Files
verify/frontend/.next/static/chunks/app/dashboard/compliance/page.js
Mohamed Mathar Irfan ed6610d5d8 Initial project upload
2026-07-28 17:57:02 +05:30

589 lines
2.6 MiB
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["app/dashboard/compliance/page"],{
/***/ "(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22C%3A%5C%5Ccompany_projects%5C%5Cverify%20pack%5C%5Cfrontend%5C%5Capp%5C%5Cdashboard%5C%5Ccompliance%5C%5Cpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!":
/*!**********************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22C%3A%5C%5Ccompany_projects%5C%5Cverify%20pack%5C%5Cfrontend%5C%5Capp%5C%5Cdashboard%5C%5Ccompliance%5C%5Cpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false! ***!
\**********************************************************************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
eval(__webpack_require__.ts("Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/dashboard/compliance/page.tsx */ \"(app-pages-browser)/./app/dashboard/compliance/page.tsx\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvd2VicGFjay9sb2FkZXJzL25leHQtZmxpZ2h0LWNsaWVudC1lbnRyeS1sb2FkZXIuanM/bW9kdWxlcz0lN0IlMjJyZXF1ZXN0JTIyJTNBJTIyQyUzQSU1QyU1Q2NvbXBhbnlfcHJvamVjdHMlNUMlNUN2ZXJpZnklMjBwYWNrJTVDJTVDZnJvbnRlbmQlNUMlNUNhcHAlNUMlNUNkYXNoYm9hcmQlNUMlNUNjb21wbGlhbmNlJTVDJTVDcGFnZS50c3glMjIlMkMlMjJpZHMlMjIlM0ElNUIlNUQlN0Qmc2VydmVyPWZhbHNlISIsIm1hcHBpbmdzIjoiQUFBQSxnTUFBc0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLz84ZjIxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiQzpcXFxcY29tcGFueV9wcm9qZWN0c1xcXFx2ZXJpZnkgcGFja1xcXFxmcm9udGVuZFxcXFxhcHBcXFxcZGFzaGJvYXJkXFxcXGNvbXBsaWFuY2VcXFxccGFnZS50c3hcIik7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22C%3A%5C%5Ccompany_projects%5C%5Cverify%20pack%5C%5Cfrontend%5C%5Capp%5C%5Cdashboard%5C%5Ccompliance%5C%5Cpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/fast-png/lib-esm/PngDecoder.js":
/*!*****************************************************!*\
!*** ./node_modules/fast-png/lib-esm/PngDecoder.js ***!
\*****************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ PngDecoder; }\n/* harmony export */ });\n/* harmony import */ var iobuffer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! iobuffer */ \"(app-pages-browser)/./node_modules/iobuffer/lib-esm/IOBuffer.js\");\n/* harmony import */ var pako__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! pako */ \"(app-pages-browser)/./node_modules/pako/dist/pako.esm.mjs\");\n/* harmony import */ var _helpers_crc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers/crc */ \"(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/crc.js\");\n/* harmony import */ var _helpers_decodeInterlaceAdam7__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers/decodeInterlaceAdam7 */ \"(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/decodeInterlaceAdam7.js\");\n/* harmony import */ var _helpers_decodeInterlaceNull__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers/decodeInterlaceNull */ \"(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/decodeInterlaceNull.js\");\n/* harmony import */ var _helpers_signature__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./helpers/signature */ \"(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/signature.js\");\n/* harmony import */ var _helpers_text__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./helpers/text */ \"(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/text.js\");\n/* harmony import */ var _internalTypes__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./internalTypes */ \"(app-pages-browser)/./node_modules/fast-png/lib-esm/internalTypes.js\");\n\n\n\n\n\n\n\n\nclass PngDecoder extends iobuffer__WEBPACK_IMPORTED_MODULE_0__.IOBuffer {\n _checkCrc;\n _inflator;\n _png;\n _apng;\n _end;\n _hasPalette;\n _palette;\n _hasTransparency;\n _transparency;\n _compressionMethod;\n _filterMethod;\n _interlaceMethod;\n _colorType;\n _isAnimated;\n _numberOfFrames;\n _numberOfPlays;\n _frames;\n _writingDataChunks;\n constructor(data, options = {}) {\n super(data);\n const { checkCrc = false } = options;\n this._checkCrc = checkCrc;\n this._inflator = new pako__WEBPACK_IMPORTED_MODULE_1__.Inflate();\n this._png = {\n width: -1,\n height: -1,\n channels: -1,\n data: new Uint8Array(0),\n depth: 1,\n text: {},\n };\n this._apng = {\n width: -1,\n height: -1,\n channels: -1,\n depth: 1,\n numberOfFrames: 1,\n numberOfPlays: 0,\n text: {},\n frames: [],\n };\n this._end = false;\n this._hasPalette = false;\n this._palette = [];\n this._hasTransparency = false;\n this._transparency = new Uint16Array(0);\n this._compressionMethod = _internalTypes__WEBPACK_IMPORTED_MODULE_7__.CompressionMethod.UNKNOWN;\n this._filterMethod = _internalTypes__WEBPACK_IMPORTED_MODULE_7__.FilterMethod.UNKNOWN;\n this._interlaceMethod = _internalTypes__WEBPACK_IMPORTED_MODULE_7__.InterlaceMethod.UNKNOWN;\n this._colorType = _internalTypes__WEBPACK_IMPORTED_MODULE_7__.ColorType.UNKNOWN;\n this._isAnimated = false;\n this._numberOfFrames = 1;\n this._numberOfPlays = 0;\n this._frames = [];\n this._writingDataChunks = false;\n // PNG is always big endian\n // https://www.w3.org/TR/PNG/#7Integers-and-byte-order\n this.setBigEndian();\n }\n decode() {\n (0,_helpers_signature__WEBPACK_IMPORTED_MODULE_5__.checkSignature)(this);\n while (!this._end) {\n const length = this.readUint32();\n const type = this.readChars(4);\n this.decodeChunk(length, type);\n }\n this.decodeImage();\n return this._png;\n }\n decodeApng() {\n (0,_helpers_signature__WEBPACK_IMPORTED_MODULE_5__.checkSignature)(this);\n while (!this._end) {\n const length = this.readUint32();\n const type = this.readChars(4);\n this.decodeApngChunk(length, type);\n }\n this.decodeApngImage();\n return this._apng;\n }\n // https://www.w3.org/TR/PNG/#5Chunk-layout\n decodeChunk(length, type) {\n const offset = this.offset;\n switch (type) {\n // 11.2 Critical chunks\n case 'IHDR': // 11.2.2 IHDR Image header\n this.decodeIHDR();\n break;\n case 'PLTE': // 11.2.3 PLTE Palette\n this.decodePLTE(length);\n break;\n case 'IDAT': // 11.2.4 IDAT Image data\n this.decodeIDAT(length);\n break;\n case 'IEND': // 11.2.5 IEND Image trailer\n this._end = true;\n break;\n // 11.3 Ancillary chunks\n case 'tRNS': // 11.3.2.1 tRNS Transparency\n this.decodetRNS(length);\n break;\n case 'iCCP': // 11.3.3.3 iCCP Embedded ICC profile\n this.decodeiCCP(length);\n break;\n case _helpers_text__WEBPACK_IMPORTED_MODULE_6__.textChunkName: // 11.3.4.3 tEXt Textual data\n (0,_helpers_text__WEBPACK_IMPORTED_MODULE_6__.decodetEXt)(this._png.text, this, length);\n break;\n case 'pHYs': // 11.3.5.3 pHYs Physical pixel dimensions\n this.decodepHYs();\n break;\n default:\n this.skip(length);\n break;\n }\n if (this.offset - offset !== length) {\n throw new Error(`Length mismatch while decoding chunk ${type}`);\n }\n if (this._checkCrc) {\n (0,_helpers_crc__WEBPACK_IMPORTED_MODULE_2__.checkCrc)(this, length + 4, type);\n }\n else {\n this.skip(4);\n }\n }\n decodeApngChunk(length, type) {\n const offset = this.offset;\n if (type !== 'fdAT' && type !== 'IDAT' && this._writingDataChunks) {\n this.pushDataToFrame();\n }\n switch (type) {\n case 'acTL':\n this.decodeACTL();\n break;\n case 'fcTL':\n this.decodeFCTL();\n break;\n case 'fdAT':\n this.decodeFDAT(length);\n break;\n default:\n this.decodeChunk(length, type);\n this.offset = offset + length;\n break;\n }\n if (this.offset - offset !== length) {\n throw new Error(`Length mismatch while decoding chunk ${type}`);\n }\n if (this._checkCrc) {\n (0,_helpers_crc__WEBPACK_IMPORTED_MODULE_2__.checkCrc)(this, length + 4, type);\n }\n else {\n this.skip(4);\n }\n }\n // https://www.w3.org/TR/PNG/#11IHDR\n decodeIHDR() {\n const image = this._png;\n image.width = this.readUint32();\n image.height = this.readUint32();\n image.depth = checkBitDepth(this.readUint8());\n const colorType = this.readUint8();\n this._colorType = colorType;\n let channels;\n switch (colorType) {\n case _internalTypes__WEBPACK_IMPORTED_MODULE_7__.ColorType.GREYSCALE:\n channels = 1;\n break;\n case _internalTypes__WEBPACK_IMPORTED_MODULE_7__.ColorType.TRUECOLOUR:\n channels = 3;\n break;\n case _internalTypes__WEBPACK_IMPORTED_MODULE_7__.ColorType.INDEXED_COLOUR:\n channels = 1;\n break;\n case _internalTypes__WEBPACK_IMPORTED_MODULE_7__.ColorType.GREYSCALE_ALPHA:\n channels = 2;\n break;\n case _internalTypes__WEBPACK_IMPORTED_MODULE_7__.ColorType.TRUECOLOUR_ALPHA:\n channels = 4;\n break;\n // Kept for exhaustiveness.\n // eslint-disable-next-line unicorn/no-useless-switch-case\n case _internalTypes__WEBPACK_IMPORTED_MODULE_7__.ColorType.UNKNOWN:\n default:\n throw new Error(`Unknown color type: ${colorType}`);\n }\n this._png.channels = channels;\n this._compressionMethod = this.readUint8();\n if (this._compressionMethod !== _internalTypes__WEBPACK_IMPORTED_MODULE_7__.CompressionMethod.DEFLATE) {\n throw new Error(`Unsupported compression method: ${this._compressionMethod}`);\n }\n this._filterMethod = this.readUint8();\n this._interlaceMethod = this.readUint8();\n }\n decodeACTL() {\n this._numberOfFrames = this.readUint32();\n this._numberOfPlays = this.readUint32();\n this._isAnimated = true;\n }\n decodeFCTL() {\n const image = {\n sequenceNumber: this.readUint32(),\n width: this.readUint32(),\n height: this.readUint32(),\n xOffset: this.readUint32(),\n yOffset: this.readUint32(),\n delayNumber: this.readUint16(),\n delayDenominator: this.readUint16(),\n disposeOp: this.readUint8(),\n blendOp: this.readUint8(),\n data: new Uint8Array(0),\n };\n this._frames.push(image);\n }\n // https://www.w3.org/TR/PNG/#11PLTE\n decodePLTE(length) {\n if (length % 3 !== 0) {\n throw new RangeError(`PLTE field length must be a multiple of 3. Got ${length}`);\n }\n const l = length / 3;\n this._hasPalette = true;\n const palette = [];\n this._palette = palette;\n for (let i = 0; i < l; i++) {\n palette.push([this.readUint8(), this.readUint8(), this.readUint8()]);\n }\n }\n // https://www.w3.org/TR/PNG/#11IDAT\n decodeIDAT(length) {\n this._writingDataChunks = true;\n const dataLength = length;\n const dataOffset = this.offset + this.byteOffset;\n this._inflator.push(new Uint8Array(this.buffer, dataOffset, dataLength));\n if (this._inflator.err) {\n throw new Error(`Error while decompressing the data: ${this._inflator.err}`);\n }\n this.skip(length);\n }\n decodeFDAT(length) {\n this._writingDataChunks = true;\n let dataLength = length;\n let dataOffset = this.offset + this.byteOffset;\n dataOffset += 4;\n dataLength -= 4;\n this._inflator.push(new Uint8Array(this.buffer, dataOffset, dataLength));\n if (this._inflator.err) {\n throw new Error(`Error while decompressing the data: ${this._inflator.err}`);\n }\n this.skip(length);\n }\n // https://www.w3.org/TR/PNG/#11tRNS\n decodetRNS(length) {\n switch (this._colorType) {\n case _internalTypes__WEBPACK_IMPORTED_MODULE_7__.ColorType.GREYSCALE:\n case _internalTypes__WEBPACK_IMPORTED_MODULE_7__.ColorType.TRUECOLOUR: {\n if (length % 2 !== 0) {\n throw new RangeError(`tRNS chunk length must be a multiple of 2. Got ${length}`);\n }\n if (length / 2 > this._png.width * this._png.height) {\n throw new Error(`tRNS chunk contains more alpha values than there are pixels (${length / 2} vs ${this._png.width * this._png.height})`);\n }\n this._hasTransparency = true;\n this._transparency = new Uint16Array(length / 2);\n for (let i = 0; i < length / 2; i++) {\n this._transparency[i] = this.readUint16();\n }\n break;\n }\n case _internalTypes__WEBPACK_IMPORTED_MODULE_7__.ColorType.INDEXED_COLOUR: {\n if (length > this._palette.length) {\n throw new Error(`tRNS chunk contains more alpha values than there are palette colors (${length} vs ${this._palette.length})`);\n }\n let i = 0;\n for (; i < length; i++) {\n const alpha = this.readByte();\n this._palette[i].push(alpha);\n }\n for (; i < this._palette.length; i++) {\n this._palette[i].push(255);\n }\n break;\n }\n // Kept for exhaustiveness.\n /* eslint-disable unicorn/no-useless-switch-case */\n case _internalTypes__WEBPACK_IMPORTED_MODULE_7__.ColorType.UNKNOWN:\n case _internalTypes__WEBPACK_IMPORTED_MODULE_7__.ColorType.GREYSCALE_ALPHA:\n case _internalTypes__WEBPACK_IMPORTED_MODULE_7__.ColorType.TRUECOLOUR_ALPHA:\n default: {\n throw new Error(`tRNS chunk is not supported for color type ${this._colorType}`);\n }\n /* eslint-enable unicorn/no-useless-switch-case */\n }\n }\n // https://www.w3.org/TR/PNG/#11iCCP\n decodeiCCP(length) {\n const name = (0,_helpers_text__WEBPACK_IMPORTED_MODULE_6__.readKeyword)(this);\n const compressionMethod = this.readUint8();\n if (compressionMethod !== _internalTypes__WEBPACK_IMPORTED_MODULE_7__.CompressionMethod.DEFLATE) {\n throw new Error(`Unsupported iCCP compression method: ${compressionMethod}`);\n }\n const compressedProfile = this.readBytes(length - name.length - 2);\n this._png.iccEmbeddedProfile = {\n name,\n profile: (0,pako__WEBPACK_IMPORTED_MODULE_1__.inflate)(compressedProfile),\n };\n }\n // https://www.w3.org/TR/PNG/#11pHYs\n decodepHYs() {\n const ppuX = this.readUint32();\n const ppuY = this.readUint32();\n const unitSpecifier = this.readByte();\n this._png.resolution = { x: ppuX, y: ppuY, unit: unitSpecifier };\n }\n decodeApngImage() {\n this._apng.width = this._png.width;\n this._apng.height = this._png.height;\n this._apng.channels = this._png.channels;\n this._apng.depth = this._png.depth;\n this._apng.numberOfFrames = this._numberOfFrames;\n this._apng.numberOfPlays = this._numberOfPlays;\n this._apng.text = this._png.text;\n this._apng.resolution = this._png.resolution;\n for (let i = 0; i < this._numberOfFrames; i++) {\n const newFrame = {\n sequenceNumber: this._frames[i].sequenceNumber,\n delayNumber: this._frames[i].delayNumber,\n delayDenominator: this._frames[i].delayDenominator,\n data: this._apng.depth === 8\n ? new Uint8Array(this._apng.width * this._apng.height * this._apng.channels)\n : new Uint16Array(this._apng.width * this._apng.height * this._apng.channels),\n };\n const frame = this._frames.at(i);\n if (frame) {\n frame.data = (0,_helpers_decodeInterlaceNull__WEBPACK_IMPORTED_MODULE_4__.decodeInterlaceNull)({\n data: frame.data,\n width: frame.width,\n height: frame.height,\n channels: this._apng.channels,\n depth: this._apng.depth,\n });\n if (this._hasPalette) {\n this._apng.palette = this._palette;\n }\n if (this._hasTransparency) {\n this._apng.transparency = this._transparency;\n }\n if (i === 0 ||\n (frame.xOffset === 0 &&\n frame.yOffset === 0 &&\n frame.width === this._png.width &&\n frame.height === this._png.height)) {\n newFrame.data = frame.data;\n }\n else {\n const prevFrame = this._apng.frames.at(i - 1);\n this.disposeFrame(frame, prevFrame, newFrame);\n this.addFrameDataToCanvas(newFrame, frame);\n }\n this._apng.frames.push(newFrame);\n }\n }\n return this._apng;\n }\n disposeFrame(frame, prevFrame, imageFrame) {\n switch (frame.disposeOp) {\n case _internalTypes__WEBPACK_IMPORTED_MODULE_7__.DisposeOpType.NONE:\n break;\n case _internalTypes__WEBPACK_IMPORTED_MODULE_7__.DisposeOpType.BACKGROUND:\n for (let row = 0; row < this._png.height; row++) {\n for (let col = 0; col < this._png.width; col++) {\n const index = (row * frame.width + col) * this._png.channels;\n for (let channel = 0; channel < this._png.channels; channel++) {\n imageFrame.data[index + channel] = 0;\n }\n }\n }\n break;\n case _internalTypes__WEBPACK_IMPORTED_MODULE_7__.DisposeOpType.PREVIOUS:\n imageFrame.data.set(prevFrame.data);\n break;\n default:\n throw new Error('Unknown disposeOp');\n }\n }\n addFrameDataToCanvas(imageFrame, frame) {\n const maxValue = 1 << this._png.depth;\n const calculatePixelIndices = (row, col) => {\n const index = ((row + frame.yOffset) * this._png.width + frame.xOffset + col) *\n this._png.channels;\n const frameIndex = (row * frame.width + col) * this._png.channels;\n return { index, frameIndex };\n };\n switch (frame.blendOp) {\n case _internalTypes__WEBPACK_IMPORTED_MODULE_7__.BlendOpType.SOURCE:\n for (let row = 0; row < frame.height; row++) {\n for (let col = 0; col < frame.width; col++) {\n const { index, frameIndex } = calculatePixelIndices(row, col);\n for (let channel = 0; channel < this._png.channels; channel++) {\n imageFrame.data[index + channel] =\n frame.data[frameIndex + channel];\n }\n }\n }\n break;\n // https://www.w3.org/TR/png-3/#13Alpha-channel-processing\n case _internalTypes__WEBPACK_IMPORTED_MODULE_7__.BlendOpType.OVER:\n for (let row = 0; row < frame.height; row++) {\n for (let col = 0; col < frame.width; col++) {\n const { index, frameIndex } = calculatePixelIndices(row, col);\n for (let channel = 0; channel < this._png.channels; channel++) {\n const sourceAlpha = frame.data[frameIndex + this._png.channels - 1] / maxValue;\n const foregroundValue = channel % (this._png.channels - 1) === 0\n ? 1\n : frame.data[frameIndex + channel];\n const value = Math.floor(sourceAlpha * foregroundValue +\n (1 - sourceAlpha) * imageFrame.data[index + channel]);\n imageFrame.data[index + channel] += value;\n }\n }\n }\n break;\n default:\n throw new Error('Unknown blendOp');\n }\n }\n decodeImage() {\n if (this._inflator.err) {\n throw new Error(`Error while decompressing the data: ${this._inflator.err}`);\n }\n const data = this._isAnimated\n ? (this._frames?.at(0)).data\n : this._inflator.result;\n if (this._filterMethod !== _internalTypes__WEBPACK_IMPORTED_MODULE_7__.FilterMethod.ADAPTIVE) {\n throw new Error(`Filter method ${this._filterMethod} not supported`);\n }\n if (this._interlaceMethod === _internalTypes__WEBPACK_IMPORTED_MODULE_7__.InterlaceMethod.NO_INTERLACE) {\n this._png.data = (0,_helpers_decodeInterlaceNull__WEBPACK_IMPORTED_MODULE_4__.decodeInterlaceNull)({\n data: data,\n width: this._png.width,\n height: this._png.height,\n channels: this._png.channels,\n depth: this._png.depth,\n });\n }\n else if (this._interlaceMethod === _internalTypes__WEBPACK_IMPORTED_MODULE_7__.InterlaceMethod.ADAM7) {\n this._png.data = (0,_helpers_decodeInterlaceAdam7__WEBPACK_IMPORTED_MODULE_3__.decodeInterlaceAdam7)({\n data: data,\n width: this._png.width,\n height: this._png.height,\n channels: this._png.channels,\n depth: this._png.depth,\n });\n }\n else {\n throw new Error(`Interlace method ${this._interlaceMethod} not supported`);\n }\n if (this._hasPalette) {\n this._png.palette = this._palette;\n }\n if (this._hasTransparency) {\n this._png.transparency = this._transparency;\n }\n }\n pushDataToFrame() {\n const result = this._inflator.result;\n const lastFrame = this._frames.at(-1);\n if (lastFrame) {\n lastFrame.data = result;\n }\n else {\n this._frames.push({\n sequenceNumber: 0,\n width: this._png.width,\n height: this._png.height,\n xOffset: 0,\n yOffset: 0,\n delayNumber: 0,\n delayDenominator: 0,\n disposeOp: _internalTypes__WEBPACK_IMPORTED_MODULE_7__.DisposeOpType.NONE,\n blendOp: _internalTypes__WEBPACK_IMPORTED_MODULE_7__.BlendOpType.SOURCE,\n data: result,\n });\n }\n this._inflator = new pako__WEBPACK_IMPORTED_MODULE_1__.Inflate();\n this._writingDataChunks = false;\n }\n}\nfunction checkBitDepth(value) {\n if (value !== 1 &&\n value !== 2 &&\n value !== 4 &&\n value !== 8 &&\n value !== 16) {\n throw new Error(`invalid bit depth: ${value}`);\n }\n return value;\n}\n//# sourceMappingURL=PngDecoder.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9mYXN0LXBuZy9saWItZXNtL1BuZ0RlY29kZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQW9DO0FBQ2dCO0FBQ1g7QUFDNkI7QUFDRjtBQUNmO0FBQ21CO0FBQ21EO0FBQzVHLHlCQUF5Qiw4Q0FBUTtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQSxnQkFBZ0IsbUJBQW1CO0FBQ25DO0FBQ0EsNkJBQTZCLHlDQUFRO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLDZEQUFpQjtBQUNuRCw2QkFBNkIsd0RBQVk7QUFDekMsZ0NBQWdDLDJEQUFlO0FBQy9DLDBCQUEwQixxREFBUztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsa0VBQWM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxrRUFBYztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHdEQUFhO0FBQzlCLGdCQUFnQix5REFBVTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLHlEQUFhO0FBQ3hDLHlCQUF5Qix1REFBVztBQUNwQztBQUNBLGFBQWE7QUFDYjtBQUNBLDZCQUE2Qix5Q0FBUTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsTUFBTTtBQUNwRDtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvZmFzdC1wbmcvbGliLWVzbS9QbmdEZWNvZGVyLmpzP2NhOTciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSU9CdWZmZXIgfSBmcm9tICdpb2J1ZmZlcic7XG5pbXBvcnQgeyBpbmZsYXRlLCBJbmZsYXRlIGFzIEluZmxhdG9yIH0gZnJvbSAncGFrbyc7XG5pbXBvcnQgeyBjaGVja0NyYyB9IGZyb20gJy4vaGVscGVycy9jcmMnO1xuaW1wb3J0IHsgZGVjb2RlSW50ZXJsYWNlQWRhbTcgfSBmcm9tICcuL2hlbHBlcnMvZGVjb2RlSW50ZXJsYWNlQWRhbTcnO1xuaW1wb3J0IHsgZGVjb2RlSW50ZXJsYWNlTnVsbCB9IGZyb20gJy4vaGVscGVycy9kZWNvZGVJbnRlcmxhY2VOdWxsJztcbmltcG9ydCB7IGNoZWNrU2lnbmF0dXJlIH0gZnJvbSAnLi9oZWxwZXJzL3NpZ25hdHVyZSc7XG5pbXBvcnQgeyBkZWNvZGV0RVh0LCByZWFkS2V5d29yZCwgdGV4dENodW5rTmFtZSB9IGZyb20gJy4vaGVscGVycy90ZXh0JztcbmltcG9ydCB7IENvbG9yVHlwZSwgQ29tcHJlc3Npb25NZXRob2QsIERpc3Bvc2VPcFR5cGUsIEZpbHRlck1ldGhvZCwgSW50ZXJsYWNlTWV0aG9kLCBCbGVuZE9wVHlwZSwgfSBmcm9tICcuL2ludGVybmFsVHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUG5nRGVjb2RlciBleHRlbmRzIElPQnVmZmVyIHtcbiAgICBfY2hlY2tDcmM7XG4gICAgX2luZmxhdG9yO1xuICAgIF9wbmc7XG4gICAgX2Fwbmc7XG4gICAgX2VuZDtcbiAgICBfaGFzUGFsZXR0ZTtcbiAgICBfcGFsZXR0ZTtcbiAgICBfaGFzVHJhbnNwYXJlbmN5O1xuICAgIF90cmFuc3BhcmVuY3k7XG4gICAgX2NvbXByZXNzaW9uTWV0aG9kO1xuICAgIF9maWx0ZXJNZXRob2Q7XG4gICAgX2ludGVybGFjZU1ldGhvZDtcbiAgICBfY29sb3JUeXBlO1xuICAgIF9pc0FuaW1hdGVkO1xuICAgIF9udW1iZXJPZkZyYW1lcztcbiAgICBfbnVtYmVyT2ZQbGF5cztcbiAgICBfZnJhbWVzO1xuICAgIF93cml0aW5nRGF0YUNodW5rcztcbiAgICBjb25zdHJ1Y3RvcihkYXRhLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgc3VwZXIoZGF0YSk7XG4gICAgICAgIGNvbnN0IHsgY2hlY2tDcmMgPSBmYWxzZSB9ID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5fY2hlY2tDcmMgPSBjaGVja0NyYztcbiAgICAgICAgdGhpcy5faW5mbGF0b3IgPSBuZXcgSW5mbGF0b3IoKTtcbiAgICAgICAgdGhpcy5fcG5nID0ge1xuICAgICAgICAgICAgd2lkdGg6IC0xLFxuICAgICAgICAgICAgaGVpZ2h0OiAtMSxcbiAgICAgICAgICAgIGNoYW5uZWxzOiAtMSxcbiAgICAgICAgICAgIGRhdGE6IG5ldyBVaW50OEFycmF5KDApLFxuICAgICAgICAgICAgZGVwdGg6IDEsXG4gICAgICAgICAgICB0ZXh0OiB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fYXBuZyA9IHtcbiAgICAgICAgICAgIHdpZHRoOiAtMSxcbiAgICAgICAgICAgIGhlaWdodDogLTEsXG4gICAgICAgICAgICBjaGFubmVsczogLTEsXG4gICAgICAgICAgICBkZXB0aDogMSxcbiAgICAgICAgICAgIG51bWJlck9mRnJhbWVzOiAxLFxuICAgICAgICAgICAgbnVtYmVyT2ZQbGF5czogMCxcbiAgICAgICAgICAgIHRleHQ6IHt9LFxuICAgICAgICAgICAgZnJhbWVzOiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fZW5kID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2hhc1BhbGV0dGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGFsZXR0ZSA9IFtdO1xuICAgICAgICB0aGlzLl9oYXNUcmFuc3BhcmVuY3kgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fdHJhbnNwYXJlbmN5ID0gbmV3IFVpbnQxNkFycmF5KDApO1xuICAgICAgICB0aGlzLl9jb21wcmVzc2lvbk1ldGhvZCA9IENvbXByZXNzaW9uTWV0aG9kLlVOS05PV047XG4gICAgICAgIHRoaXMuX2ZpbHRlck1ldGhvZCA9IEZpbHRlck1ldGhvZC5VTktOT1dOO1xuICAgICAgICB0aGlzLl9pbnRlcmxhY2VNZXRob2QgPSBJbnRlcmxhY2VNZXRob2QuVU5LTk9XTjtcbiAgICAgICAgdGhpcy5fY29sb3JUeXBlID0gQ29sb3JUeXBlLlVOS05PV047XG4gICAgICAgIHRoaXMuX2lzQW5pbWF0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fbnVtYmVyT2ZGcmFtZXMgPSAxO1xuICAgICAgICB0aGlzLl9udW1iZXJPZlBsYXlzID0gMDtcbiAgICAgICAgdGhpcy5fZnJhbWVzID0gW107XG4gICAgICAgIHRoaXMuX3dyaXRpbmdEYXRhQ2h1bmtzID0gZmFsc2U7XG4gICAgICAgIC8vIFBORyBpcyBhbHdheXMgYmlnIGVuZGlhblxuICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvUE5HLyM3SW50ZWdlcnMtYW5kLWJ5dGUtb3JkZXJcbiAgICAgICAgdGhpcy5zZXRCaWdFbmRpYW4oKTtcbiAgICB9XG4gICAgZGVjb2RlKCkge1xuICAgICAgICBjaGVja1NpZ25hdHVyZSh0aGlzKTtcbiAgICAgICAgd2hpbGUgKCF0aGlzLl9lbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMucmVhZFVpbnQzMigpO1xuICAgICAgICAgICAgY29uc3QgdHlwZSA9IHRoaXMucmVhZENoYXJzKDQpO1xuICAgICAgICAgICAgdGhpcy5kZWNvZGVDaHVuayhsZW5ndGgsIHR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVjb2RlSW1hZ2UoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BuZztcbiAgICB9XG4gICAgZGVjb2RlQXBuZygpIHtcbiAgICAgICAgY2hlY2tTaWduYXR1cmUodGhpcyk7XG4gICAgICAgIHdoaWxlICghdGhpcy5fZW5kKSB7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSB0aGlzLnJlYWRVaW50MzIoKTtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLnJlYWRDaGFycyg0KTtcbiAgICAgICAgICAgIHRoaXMuZGVjb2RlQXBuZ0NodW5rKGxlbmd0aCwgdHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZWNvZGVBcG5nSW1hZ2UoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Fwbmc7XG4gICAgfVxuICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9QTkcvIzVDaHVuay1sYXlvdXRcbiAgICBkZWNvZGVDaHVuayhsZW5ndGgsIHR5cGUpIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgLy8gMTEuMiBDcml0aWNhbCBjaHVua3NcbiAgICAgICAgICAgIGNhc2UgJ0lIRFInOiAvLyAxMS4yLjIgSUhEUiBJbWFnZSBoZWFkZXJcbiAgICAgICAgICAgICAgICB0aGlzLmRlY29kZUlIRFIoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1BMVEUnOiAvLyAxMS4yLjMgUExURSBQYWxldHRlXG4gICAgICAgICAgICAgICAgdGhpcy5kZWNvZGVQTFRFKGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdJREFUJzogLy8gMTEuMi40IElEQVQgSW1hZ2UgZGF0YVxuICAgICAgICAgICAgICAgIHRoaXMuZGVjb2RlSURBVChsZW5ndGgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnSUVORCc6IC8vIDExLjIuNSBJRU5EIEltYWdlIHRyYWlsZXJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgLy8gMTEuMyBBbmNpbGxhcnkgY2h1bmtzXG4gICAgICAgICAgICBjYXNlICd0Uk5TJzogLy8gMTEuMy4yLjEgdFJOUyBUcmFuc3BhcmVuY3lcbiAgICAgICAgICAgICAgICB0aGlzLmRlY29kZXRSTlMobGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lDQ1AnOiAvLyAxMS4zLjMuMyBpQ0NQIEVtYmVkZGVkIElDQyBwcm9maWxlXG4gICAgICAgICAgICAgICAgdGhpcy5kZWNvZGVpQ0NQKGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHRleHRDaHVua05hbWU6IC8vIDExLjMuNC4zIHRFWHQgVGV4dHVhbCBkYXRhXG4gICAgICAgICAgICAgICAgZGVjb2RldEVYdCh0aGlzLl9wbmcudGV4dCwgdGhpcywgbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3BIWXMnOiAvLyAxMS4zLjUuMyBwSFlzIFBoeXNpY2FsIHBpeGVsIGRpbWVuc2lvbnNcbiAgICAgICAgICAgICAgICB0aGlzLmRlY29kZXBIWXMoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5za2lwKGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub2Zmc2V0IC0gb2Zmc2V0ICE9PSBsZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTGVuZ3RoIG1pc21hdGNoIHdoaWxlIGRlY29kaW5nIGNodW5rICR7dHlwZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fY2hlY2tDcmMpIHtcbiAgICAgICAgICAgIGNoZWNrQ3JjKHRoaXMsIGxlbmd0aCArIDQsIHR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5za2lwKDQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRlY29kZUFwbmdDaHVuayhsZW5ndGgsIHR5cGUpIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgICAgIGlmICh0eXBlICE9PSAnZmRBVCcgJiYgdHlwZSAhPT0gJ0lEQVQnICYmIHRoaXMuX3dyaXRpbmdEYXRhQ2h1bmtzKSB7XG4gICAgICAgICAgICB0aGlzLnB1c2hEYXRhVG9GcmFtZSgpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnYWNUTCc6XG4gICAgICAgICAgICAgICAgdGhpcy5kZWNvZGVBQ1RMKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdmY1RMJzpcbiAgICAgICAgICAgICAgICB0aGlzLmRlY29kZUZDVEwoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2ZkQVQnOlxuICAgICAgICAgICAgICAgIHRoaXMuZGVjb2RlRkRBVChsZW5ndGgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aGlzLmRlY29kZUNodW5rKGxlbmd0aCwgdHlwZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQgKyBsZW5ndGg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub2Zmc2V0IC0gb2Zmc2V0ICE9PSBsZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTGVuZ3RoIG1pc21hdGNoIHdoaWxlIGRlY29kaW5nIGNodW5rICR7dHlwZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fY2hlY2tDcmMpIHtcbiAgICAgICAgICAgIGNoZWNrQ3JjKHRoaXMsIGxlbmd0aCArIDQsIHR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5za2lwKDQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9QTkcvIzExSUhEUlxuICAgIGRlY29kZUlIRFIoKSB7XG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5fcG5nO1xuICAgICAgICBpbWFnZS53aWR0aCA9IHRoaXMucmVhZFVpbnQzMigpO1xuICAgICAgICBpbWFnZS5oZWlnaHQgPSB0aGlzLnJlYWRVaW50MzIoKTtcbiAgICAgICAgaW1hZ2UuZGVwdGggPSBjaGVja0JpdERlcHRoKHRoaXMucmVhZFVpbnQ4KCkpO1xuICAgICAgICBjb25zdCBjb2xvclR5cGUgPSB0aGlzLnJlYWRVaW50OCgpO1xuICAgICAgICB0aGlzLl9jb2xvclR5cGUgPSBjb2xvclR5cGU7XG4gICAgICAgIGxldCBjaGFubmVscztcbiAgICAgICAgc3dpdGNoIChjb2xvclR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQ29sb3JUeXBlLkdSRVlTQ0FMRTpcbiAgICAgICAgICAgICAgICBjaGFubmVscyA9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIENvbG9yVHlwZS5UUlVFQ09MT1VSOlxuICAgICAgICAgICAgICAgIGNoYW5uZWxzID0gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ29sb3JUeXBlLklOREVYRURfQ09MT1VSOlxuICAgICAgICAgICAgICAgIGNoYW5uZWxzID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ29sb3JUeXBlLkdSRVlTQ0FMRV9BTFBIQTpcbiAgICAgICAgICAgICAgICBjaGFubmVscyA9IDI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIENvbG9yVHlwZS5UUlVFQ09MT1VSX0FMUEhBOlxuICAgICAgICAgICAgICAgIGNoYW5uZWxzID0gNDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIC8vIEtlcHQgZm9yIGV4aGF1c3RpdmVuZXNzLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdXNlbGVzcy1zd2l0Y2gtY2FzZVxuICAgICAgICAgICAgY2FzZSBDb2xvclR5cGUuVU5LTk9XTjpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNvbG9yIHR5cGU6ICR7Y29sb3JUeXBlfWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BuZy5jaGFubmVscyA9IGNoYW5uZWxzO1xuICAgICAgICB0aGlzLl9jb21wcmVzc2lvbk1ldGhvZCA9IHRoaXMucmVhZFVpbnQ4KCk7XG4gICAgICAgIGlmICh0aGlzLl9jb21wcmVzc2lvbk1ldGhvZCAhPT0gQ29tcHJlc3Npb25NZXRob2QuREVGTEFURSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBjb21wcmVzc2lvbiBtZXRob2Q6ICR7dGhpcy5fY29tcHJlc3Npb25NZXRob2R9YCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZmlsdGVyTWV0aG9kID0gdGhpcy5yZWFkVWludDgoKTtcbiAgICAgICAgdGhpcy5faW50ZXJsYWNlTWV0aG9kID0gdGhpcy5yZWFkVWludDgoKTtcbiAgICB9XG4gICAgZGVjb2RlQUNUTCgpIHtcbiAgICAgICAgdGhpcy5fbnVtYmVyT2ZGcmFtZXMgPSB0aGlzLnJlYWRVaW50MzIoKTtcbiAgICAgICAgdGhpcy5fbnVtYmVyT2ZQbGF5cyA9IHRoaXMucmVhZFVpbnQzMigpO1xuICAgICAgICB0aGlzLl9pc0FuaW1hdGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgZGVjb2RlRkNUTCgpIHtcbiAgICAgICAgY29uc3QgaW1hZ2UgPSB7XG4gICAgICAgICAgICBzZXF1ZW5jZU51bWJlcjogdGhpcy5yZWFkVWludDMyKCksXG4gICAgICAgICAgICB3aWR0aDogdGhpcy5yZWFkVWludDMyKCksXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMucmVhZFVpbnQzMigpLFxuICAgICAgICAgICAgeE9mZnNldDogdGhpcy5yZWFkVWludDMyKCksXG4gICAgICAgICAgICB5T2Zmc2V0OiB0aGlzLnJlYWRVaW50MzIoKSxcbiAgICAgICAgICAgIGRlbGF5TnVtYmVyOiB0aGlzLnJlYWRVaW50MTYoKSxcbiAgICAgICAgICAgIGRlbGF5RGVub21pbmF0b3I6IHRoaXMucmVhZFVpbnQxNigpLFxuICAgICAgICAgICAgZGlzcG9zZU9wOiB0aGlzLnJlYWRVaW50OCgpLFxuICAgICAgICAgICAgYmxlbmRPcDogdGhpcy5yZWFkVWludDgoKSxcbiAgICAgICAgICAgIGRhdGE6IG5ldyBVaW50OEFycmF5KDApLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9mcmFtZXMucHVzaChpbWFnZSk7XG4gICAgfVxuICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9QTkcvIzExUExURVxuICAgIGRlY29kZVBMVEUobGVuZ3RoKSB7XG4gICAgICAgIGlmIChsZW5ndGggJSAzICE9PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgUExURSBmaWVsZCBsZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMuIEdvdCAke2xlbmd0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsID0gbGVuZ3RoIC8gMztcbiAgICAgICAgdGhpcy5faGFzUGFsZXR0ZSA9IHRydWU7XG4gICAgICAgIGNvbnN0IHBhbGV0dGUgPSBbXTtcbiAgICAgICAgdGhpcy5fcGFsZXR0ZSA9IHBhbGV0dGU7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICBwYWxldHRlLnB1c2goW3RoaXMucmVhZFVpbnQ4KCksIHRoaXMucmVhZFVpbnQ4KCksIHRoaXMucmVhZFVpbnQ4KCldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvUE5HLyMxMUlEQVRcbiAgICBkZWNvZGVJREFUKGxlbmd0aCkge1xuICAgICAgICB0aGlzLl93cml0aW5nRGF0YUNodW5rcyA9IHRydWU7XG4gICAgICAgIGNvbnN0IGRhdGFMZW5ndGggPSBsZW5ndGg7XG4gICAgICAgIGNvbnN0IGRhdGFPZmZzZXQgPSB0aGlzLm9mZnNldCArIHRoaXMuYnl0ZU9mZnNldDtcbiAgICAgICAgdGhpcy5faW5mbGF0b3IucHVzaChuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlciwgZGF0YU9mZnNldCwgZGF0YUxlbmd0aCkpO1xuICAgICAgICBpZiAodGhpcy5faW5mbGF0b3IuZXJyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHdoaWxlIGRlY29tcHJlc3NpbmcgdGhlIGRhdGE6ICR7dGhpcy5faW5mbGF0b3IuZXJyfWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2tpcChsZW5ndGgpO1xuICAgIH1cbiAgICBkZWNvZGVGREFUKGxlbmd0aCkge1xuICAgICAgICB0aGlzLl93cml0aW5nRGF0YUNodW5rcyA9IHRydWU7XG4gICAgICAgIGxldCBkYXRhTGVuZ3RoID0gbGVuZ3RoO1xuICAgICAgICBsZXQgZGF0YU9mZnNldCA9IHRoaXMub2Zmc2V0ICsgdGhpcy5ieXRlT2Zmc2V0O1xuICAgICAgICBkYXRhT2Zmc2V0ICs9IDQ7XG4gICAgICAgIGRhdGFMZW5ndGggLT0gNDtcbiAgICAgICAgdGhpcy5faW5mbGF0b3IucHVzaChuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlciwgZGF0YU9mZnNldCwgZGF0YUxlbmd0aCkpO1xuICAgICAgICBpZiAodGhpcy5faW5mbGF0b3IuZXJyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHdoaWxlIGRlY29tcHJlc3NpbmcgdGhlIGRhdGE6ICR7dGhpcy5faW5mbGF0b3IuZXJyfWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2tpcChsZW5ndGgpO1xuICAgIH1cbiAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvUE5HLyMxMXRSTlNcbiAgICBkZWNvZGV0Uk5TKGxlbmd0aCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX2NvbG9yVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBDb2xvclR5cGUuR1JFWVNDQUxFOlxuICAgICAgICAgICAgY2FzZSBDb2xvclR5cGUuVFJVRUNPTE9VUjoge1xuICAgICAgICAgICAgICAgIGlmIChsZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGB0Uk5TIGNodW5rIGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMi4gR290ICR7bGVuZ3RofWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobGVuZ3RoIC8gMiA+IHRoaXMuX3BuZy53aWR0aCAqIHRoaXMuX3BuZy5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB0Uk5TIGNodW5rIGNvbnRhaW5zIG1vcmUgYWxwaGEgdmFsdWVzIHRoYW4gdGhlcmUgYXJlIHBpeGVscyAoJHtsZW5ndGggLyAyfSB2cyAke3RoaXMuX3BuZy53aWR0aCAqIHRoaXMuX3BuZy5oZWlnaHR9KWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9oYXNUcmFuc3BhcmVuY3kgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zcGFyZW5jeSA9IG5ldyBVaW50MTZBcnJheShsZW5ndGggLyAyKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aCAvIDI7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc3BhcmVuY3lbaV0gPSB0aGlzLnJlYWRVaW50MTYoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIENvbG9yVHlwZS5JTkRFWEVEX0NPTE9VUjoge1xuICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPiB0aGlzLl9wYWxldHRlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHRSTlMgY2h1bmsgY29udGFpbnMgbW9yZSBhbHBoYSB2YWx1ZXMgdGhhbiB0aGVyZSBhcmUgcGFsZXR0ZSBjb2xvcnMgKCR7bGVuZ3RofSB2cyAke3RoaXMuX3BhbGV0dGUubGVuZ3RofSlgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxwaGEgPSB0aGlzLnJlYWRCeXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhbGV0dGVbaV0ucHVzaChhbHBoYSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgdGhpcy5fcGFsZXR0ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYWxldHRlW2ldLnB1c2goMjU1KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBLZXB0IGZvciBleGhhdXN0aXZlbmVzcy5cbiAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIHVuaWNvcm4vbm8tdXNlbGVzcy1zd2l0Y2gtY2FzZSAqL1xuICAgICAgICAgICAgY2FzZSBDb2xvclR5cGUuVU5LTk9XTjpcbiAgICAgICAgICAgIGNhc2UgQ29sb3JUeXBlLkdSRVlTQ0FMRV9BTFBIQTpcbiAgICAgICAgICAgIGNhc2UgQ29sb3JUeXBlLlRSVUVDT0xPVVJfQUxQSEE6XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB0Uk5TIGNodW5rIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGNvbG9yIHR5cGUgJHt0aGlzLl9jb2xvclR5cGV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIHVuaWNvcm4vbm8tdXNlbGVzcy1zd2l0Y2gtY2FzZSAqL1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9QTkcvIzExaUNDUFxuICAgIGRlY29kZWlDQ1AobGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSByZWFkS2V5d29yZCh0aGlzKTtcbiAgICAgICAgY29uc3QgY29tcHJlc3Npb25NZXRob2QgPSB0aGlzLnJlYWRVaW50OCgpO1xuICAgICAgICBpZiAoY29tcHJlc3Npb25NZXRob2QgIT09IENvbXByZXNzaW9uTWV0aG9kLkRFRkxBVEUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgaUNDUCBjb21wcmVzc2lvbiBtZXRob2Q6ICR7Y29tcHJlc3Npb25NZXRob2R9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcHJlc3NlZFByb2ZpbGUgPSB0aGlzLnJlYWRCeXRlcyhsZW5ndGggLSBuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgICB0aGlzLl9wbmcuaWNjRW1iZWRkZWRQcm9maWxlID0ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHByb2ZpbGU6IGluZmxhdGUoY29tcHJlc3NlZFByb2ZpbGUpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvUE5HLyMxMXBIWXNcbiAgICBkZWNvZGVwSFlzKCkge1xuICAgICAgICBjb25zdCBwcHVYID0gdGhpcy5yZWFkVWludDMyKCk7XG4gICAgICAgIGNvbnN0IHBwdVkgPSB0aGlzLnJlYWRVaW50MzIoKTtcbiAgICAgICAgY29uc3QgdW5pdFNwZWNpZmllciA9IHRoaXMucmVhZEJ5dGUoKTtcbiAgICAgICAgdGhpcy5fcG5nLnJlc29sdXRpb24gPSB7IHg6IHBwdVgsIHk6IHBwdVksIHVuaXQ6IHVuaXRTcGVjaWZpZXIgfTtcbiAgICB9XG4gICAgZGVjb2RlQXBuZ0ltYWdlKCkge1xuICAgICAgICB0aGlzLl9hcG5nLndpZHRoID0gdGhpcy5fcG5nLndpZHRoO1xuICAgICAgICB0aGlzLl9hcG5nLmhlaWdodCA9IHRoaXMuX3BuZy5oZWlnaHQ7XG4gICAgICAgIHRoaXMuX2FwbmcuY2hhbm5lbHMgPSB0aGlzLl9wbmcuY2hhbm5lbHM7XG4gICAgICAgIHRoaXMuX2FwbmcuZGVwdGggPSB0aGlzLl9wbmcuZGVwdGg7XG4gICAgICAgIHRoaXMuX2FwbmcubnVtYmVyT2ZGcmFtZXMgPSB0aGlzLl9udW1iZXJPZkZyYW1lcztcbiAgICAgICAgdGhpcy5fYXBuZy5udW1iZXJPZlBsYXlzID0gdGhpcy5fbnVtYmVyT2ZQbGF5cztcbiAgICAgICAgdGhpcy5fYXBuZy50ZXh0ID0gdGhpcy5fcG5nLnRleHQ7XG4gICAgICAgIHRoaXMuX2FwbmcucmVzb2x1dGlvbiA9IHRoaXMuX3BuZy5yZXNvbHV0aW9uO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX251bWJlck9mRnJhbWVzOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0ZyYW1lID0ge1xuICAgICAgICAgICAgICAgIHNlcXVlbmNlTnVtYmVyOiB0aGlzLl9mcmFtZXNbaV0uc2VxdWVuY2VOdW1iZXIsXG4gICAgICAgICAgICAgICAgZGVsYXlOdW1iZXI6IHRoaXMuX2ZyYW1lc1tpXS5kZWxheU51bWJlcixcbiAgICAgICAgICAgICAgICBkZWxheURlbm9taW5hdG9yOiB0aGlzLl9mcmFtZXNbaV0uZGVsYXlEZW5vbWluYXRvcixcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLl9hcG5nLmRlcHRoID09PSA4XG4gICAgICAgICAgICAgICAgICAgID8gbmV3IFVpbnQ4QXJyYXkodGhpcy5fYXBuZy53aWR0aCAqIHRoaXMuX2FwbmcuaGVpZ2h0ICogdGhpcy5fYXBuZy5jaGFubmVscylcbiAgICAgICAgICAgICAgICAgICAgOiBuZXcgVWludDE2QXJyYXkodGhpcy5fYXBuZy53aWR0aCAqIHRoaXMuX2FwbmcuaGVpZ2h0ICogdGhpcy5fYXBuZy5jaGFubmVscyksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgZnJhbWUgPSB0aGlzLl9mcmFtZXMuYXQoaSk7XG4gICAgICAgICAgICBpZiAoZnJhbWUpIHtcbiAgICAgICAgICAgICAgICBmcmFtZS5kYXRhID0gZGVjb2RlSW50ZXJsYWNlTnVsbCh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGZyYW1lLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBmcmFtZS53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBmcmFtZS5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgIGNoYW5uZWxzOiB0aGlzLl9hcG5nLmNoYW5uZWxzLFxuICAgICAgICAgICAgICAgICAgICBkZXB0aDogdGhpcy5fYXBuZy5kZXB0aCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faGFzUGFsZXR0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcG5nLnBhbGV0dGUgPSB0aGlzLl9wYWxldHRlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faGFzVHJhbnNwYXJlbmN5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwbmcudHJhbnNwYXJlbmN5ID0gdGhpcy5fdHJhbnNwYXJlbmN5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICAoZnJhbWUueE9mZnNldCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUueU9mZnNldCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUud2lkdGggPT09IHRoaXMuX3BuZy53aWR0aCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuaGVpZ2h0ID09PSB0aGlzLl9wbmcuaGVpZ2h0KSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdGcmFtZS5kYXRhID0gZnJhbWUuZGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZGcmFtZSA9IHRoaXMuX2FwbmcuZnJhbWVzLmF0KGkgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwb3NlRnJhbWUoZnJhbWUsIHByZXZGcmFtZSwgbmV3RnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEZyYW1lRGF0YVRvQ2FudmFzKG5ld0ZyYW1lLCBmcmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2FwbmcuZnJhbWVzLnB1c2gobmV3RnJhbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9hcG5nO1xuICAgIH1cbiAgICBkaXNwb3NlRnJhbWUoZnJhbWUsIHByZXZGcmFtZSwgaW1hZ2VGcmFtZSkge1xuICAgICAgICBzd2l0Y2ggKGZyYW1lLmRpc3Bvc2VPcCkge1xuICAgICAgICAgICAgY2FzZSBEaXNwb3NlT3BUeXBlLk5PTkU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERpc3Bvc2VPcFR5cGUuQkFDS0dST1VORDpcbiAgICAgICAgICAgICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCB0aGlzLl9wbmcuaGVpZ2h0OyByb3crKykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCB0aGlzLl9wbmcud2lkdGg7IGNvbCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IChyb3cgKiBmcmFtZS53aWR0aCArIGNvbCkgKiB0aGlzLl9wbmcuY2hhbm5lbHM7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IHRoaXMuX3BuZy5jaGFubmVsczsgY2hhbm5lbCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VGcmFtZS5kYXRhW2luZGV4ICsgY2hhbm5lbF0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEaXNwb3NlT3BUeXBlLlBSRVZJT1VTOlxuICAgICAgICAgICAgICAgIGltYWdlRnJhbWUuZGF0YS5zZXQocHJldkZyYW1lLmRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZGlzcG9zZU9wJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWRkRnJhbWVEYXRhVG9DYW52YXMoaW1hZ2VGcmFtZSwgZnJhbWUpIHtcbiAgICAgICAgY29uc3QgbWF4VmFsdWUgPSAxIDw8IHRoaXMuX3BuZy5kZXB0aDtcbiAgICAgICAgY29uc3QgY2FsY3VsYXRlUGl4ZWxJbmRpY2VzID0gKHJvdywgY29sKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9ICgocm93ICsgZnJhbWUueU9mZnNldCkgKiB0aGlzLl9wbmcud2lkdGggKyBmcmFtZS54T2Zmc2V0ICsgY29sKSAqXG4gICAgICAgICAgICAgICAgdGhpcy5fcG5nLmNoYW5uZWxzO1xuICAgICAgICAgICAgY29uc3QgZnJhbWVJbmRleCA9IChyb3cgKiBmcmFtZS53aWR0aCArIGNvbCkgKiB0aGlzLl9wbmcuY2hhbm5lbHM7XG4gICAgICAgICAgICByZXR1cm4geyBpbmRleCwgZnJhbWVJbmRleCB9O1xuICAgICAgICB9O1xuICAgICAgICBzd2l0Y2ggKGZyYW1lLmJsZW5kT3ApIHtcbiAgICAgICAgICAgIGNhc2UgQmxlbmRPcFR5cGUuU09VUkNFOlxuICAgICAgICAgICAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGZyYW1lLmhlaWdodDsgcm93KyspIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgY29sID0gMDsgY29sIDwgZnJhbWUud2lkdGg7IGNvbCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGluZGV4LCBmcmFtZUluZGV4IH0gPSBjYWxjdWxhdGVQaXhlbEluZGljZXMocm93LCBjb2wpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCB0aGlzLl9wbmcuY2hhbm5lbHM7IGNoYW5uZWwrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlRnJhbWUuZGF0YVtpbmRleCArIGNoYW5uZWxdID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuZGF0YVtmcmFtZUluZGV4ICsgY2hhbm5lbF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvcG5nLTMvIzEzQWxwaGEtY2hhbm5lbC1wcm9jZXNzaW5nXG4gICAgICAgICAgICBjYXNlIEJsZW5kT3BUeXBlLk9WRVI6XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgZnJhbWUuaGVpZ2h0OyByb3crKykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCBmcmFtZS53aWR0aDsgY29sKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgaW5kZXgsIGZyYW1lSW5kZXggfSA9IGNhbGN1bGF0ZVBpeGVsSW5kaWNlcyhyb3csIGNvbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IHRoaXMuX3BuZy5jaGFubmVsczsgY2hhbm5lbCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc291cmNlQWxwaGEgPSBmcmFtZS5kYXRhW2ZyYW1lSW5kZXggKyB0aGlzLl9wbmcuY2hhbm5lbHMgLSAxXSAvIG1heFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcmVncm91bmRWYWx1ZSA9IGNoYW5uZWwgJSAodGhpcy5fcG5nLmNoYW5uZWxzIC0gMSkgPT09IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZnJhbWUuZGF0YVtmcmFtZUluZGV4ICsgY2hhbm5lbF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBNYXRoLmZsb29yKHNvdXJjZUFscGhhICogZm9yZWdyb3VuZFZhbHVlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgLSBzb3VyY2VBbHBoYSkgKiBpbWFnZUZyYW1lLmRhdGFbaW5kZXggKyBjaGFubmVsXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VGcmFtZS5kYXRhW2luZGV4ICsgY2hhbm5lbF0gKz0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBibGVuZE9wJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVjb2RlSW1hZ2UoKSB7XG4gICAgICAgIGlmICh0aGlzLl9pbmZsYXRvci5lcnIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgZGVjb21wcmVzc2luZyB0aGUgZGF0YTogJHt0aGlzLl9pbmZsYXRvci5lcnJ9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX2lzQW5pbWF0ZWRcbiAgICAgICAgICAgID8gKHRoaXMuX2ZyYW1lcz8uYXQoMCkpLmRhdGFcbiAgICAgICAgICAgIDogdGhpcy5faW5mbGF0b3IucmVzdWx0O1xuICAgICAgICBpZiAodGhpcy5fZmlsdGVyTWV0aG9kICE9PSBGaWx0ZXJNZXRob2QuQURBUFRJVkUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsdGVyIG1ldGhvZCAke3RoaXMuX2ZpbHRlck1ldGhvZH0gbm90IHN1cHBvcnRlZGApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnRlcmxhY2VNZXRob2QgPT09IEludGVybGFjZU1ldGhvZC5OT19JTlRFUkxBQ0UpIHtcbiAgICAgICAgICAgIHRoaXMuX3BuZy5kYXRhID0gZGVjb2RlSW50ZXJsYWNlTnVsbCh7XG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5fcG5nLndpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodDogdGhpcy5fcG5nLmhlaWdodCxcbiAgICAgICAgICAgICAgICBjaGFubmVsczogdGhpcy5fcG5nLmNoYW5uZWxzLFxuICAgICAgICAgICAgICAgIGRlcHRoOiB0aGlzLl9wbmcuZGVwdGgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9pbnRlcmxhY2VNZXRob2QgPT09IEludGVybGFjZU1ldGhvZC5BREFNNykge1xuICAgICAgICAgICAgdGhpcy5fcG5nLmRhdGEgPSBkZWNvZGVJbnRlcmxhY2VBZGFtNyh7XG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5fcG5nLndpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodDogdGhpcy5fcG5nLmhlaWdodCxcbiAgICAgICAgICAgICAgICBjaGFubmVsczogdGhpcy5fcG5nLmNoYW5uZWxzLFxuICAgICAgICAgICAgICAgIGRlcHRoOiB0aGlzLl9wbmcuZGVwdGgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW50ZXJsYWNlIG1ldGhvZCAke3RoaXMuX2ludGVybGFjZU1ldGhvZH0gbm90IHN1cHBvcnRlZGApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9oYXNQYWxldHRlKSB7XG4gICAgICAgICAgICB0aGlzLl9wbmcucGFsZXR0ZSA9IHRoaXMuX3BhbGV0dGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2hhc1RyYW5zcGFyZW5jeSkge1xuICAgICAgICAgICAgdGhpcy5fcG5nLnRyYW5zcGFyZW5jeSA9IHRoaXMuX3RyYW5zcGFyZW5jeTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwdXNoRGF0YVRvRnJhbWUoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX2luZmxhdG9yLnJlc3VsdDtcbiAgICAgICAgY29uc3QgbGFzdEZyYW1lID0gdGhpcy5fZnJhbWVzLmF0KC0xKTtcbiAgICAgICAgaWYgKGxhc3RGcmFtZSkge1xuICAgICAgICAgICAgbGFzdEZyYW1lLmRhdGEgPSByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc2VxdWVuY2VOdW1iZXI6IDAsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMuX3BuZy53aWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMuX3BuZy5oZWlnaHQsXG4gICAgICAgICAgICAgICAgeE9mZnNldDogMCxcbiAgICAgICAgICAgICAgICB5T2Zmc2V0OiAwLFxuICAgICAgICAgICAgICAgIGRlbGF5TnVtYmVyOiAwLFxuICAgICAgICAgICAgICAgIGRlbGF5RGVub21pbmF0b3I6IDAsXG4gICAgICAgICAgICAgICAgZGlzcG9zZU9wOiBEaXNwb3NlT3BUeXBlLk5PTkUsXG4gICAgICAgICAgICAgICAgYmxlbmRPcDogQmxlbmRPcFR5cGUuU09VUkNFLFxuICAgICAgICAgICAgICAgIGRhdGE6IHJlc3VsdCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2luZmxhdG9yID0gbmV3IEluZmxhdG9yKCk7XG4gICAgICAgIHRoaXMuX3dyaXRpbmdEYXRhQ2h1bmtzID0gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gY2hlY2tCaXREZXB0aCh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSAhPT0gMSAmJlxuICAgICAgICB2YWx1ZSAhPT0gMiAmJlxuICAgICAgICB2YWx1ZSAhPT0gNCAmJlxuICAgICAgICB2YWx1ZSAhPT0gOCAmJlxuICAgICAgICB2YWx1ZSAhPT0gMTYpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGJpdCBkZXB0aDogJHt2YWx1ZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UG5nRGVjb2Rlci5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/fast-png/lib-esm/PngDecoder.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/fast-png/lib-esm/PngEncoder.js":
/*!*****************************************************!*\
!*** ./node_modules/fast-png/lib-esm/PngEncoder.js ***!
\*****************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ PngEncoder; }\n/* harmony export */ });\n/* harmony import */ var iobuffer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! iobuffer */ \"(app-pages-browser)/./node_modules/iobuffer/lib-esm/IOBuffer.js\");\n/* harmony import */ var pako__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! pako */ \"(app-pages-browser)/./node_modules/pako/dist/pako.esm.mjs\");\n/* harmony import */ var _helpers_crc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers/crc */ \"(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/crc.js\");\n/* harmony import */ var _helpers_signature__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers/signature */ \"(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/signature.js\");\n/* harmony import */ var _helpers_text__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers/text */ \"(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/text.js\");\n/* harmony import */ var _internalTypes__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./internalTypes */ \"(app-pages-browser)/./node_modules/fast-png/lib-esm/internalTypes.js\");\n\n\n\n\n\n\nconst defaultZlibOptions = {\n level: 3,\n};\nclass PngEncoder extends iobuffer__WEBPACK_IMPORTED_MODULE_0__.IOBuffer {\n _png;\n _zlibOptions;\n _colorType;\n _interlaceMethod;\n constructor(data, options = {}) {\n super();\n this._colorType = _internalTypes__WEBPACK_IMPORTED_MODULE_5__.ColorType.UNKNOWN;\n this._zlibOptions = { ...defaultZlibOptions, ...options.zlib };\n this._png = this._checkData(data);\n this._interlaceMethod =\n (options.interlace === 'Adam7'\n ? _internalTypes__WEBPACK_IMPORTED_MODULE_5__.InterlaceMethod.ADAM7\n : _internalTypes__WEBPACK_IMPORTED_MODULE_5__.InterlaceMethod.NO_INTERLACE) ?? _internalTypes__WEBPACK_IMPORTED_MODULE_5__.InterlaceMethod.NO_INTERLACE;\n this.setBigEndian();\n }\n encode() {\n (0,_helpers_signature__WEBPACK_IMPORTED_MODULE_3__.writeSignature)(this);\n this.encodeIHDR();\n if (this._png.palette) {\n this.encodePLTE();\n if (this._png.palette[0].length === 4) {\n this.encodeTRNS();\n }\n }\n this.encodeData();\n if (this._png.text) {\n for (const [keyword, text] of Object.entries(this._png.text)) {\n (0,_helpers_text__WEBPACK_IMPORTED_MODULE_4__.encodetEXt)(this, keyword, text);\n }\n }\n this.encodeIEND();\n return this.toArray();\n }\n // https://www.w3.org/TR/PNG/#11IHDR\n encodeIHDR() {\n this.writeUint32(13);\n this.writeChars('IHDR');\n this.writeUint32(this._png.width);\n this.writeUint32(this._png.height);\n this.writeByte(this._png.depth);\n this.writeByte(this._colorType);\n this.writeByte(_internalTypes__WEBPACK_IMPORTED_MODULE_5__.CompressionMethod.DEFLATE);\n this.writeByte(_internalTypes__WEBPACK_IMPORTED_MODULE_5__.FilterMethod.ADAPTIVE);\n this.writeByte(this._interlaceMethod);\n (0,_helpers_crc__WEBPACK_IMPORTED_MODULE_2__.writeCrc)(this, 17);\n }\n // https://www.w3.org/TR/PNG/#11IEND\n encodeIEND() {\n this.writeUint32(0);\n this.writeChars('IEND');\n (0,_helpers_crc__WEBPACK_IMPORTED_MODULE_2__.writeCrc)(this, 4);\n }\n encodePLTE() {\n const paletteLength = this._png.palette?.length * 3;\n this.writeUint32(paletteLength);\n this.writeChars('PLTE');\n for (const color of this._png.palette) {\n this.writeByte(color[0]);\n this.writeByte(color[1]);\n this.writeByte(color[2]);\n }\n (0,_helpers_crc__WEBPACK_IMPORTED_MODULE_2__.writeCrc)(this, 4 + paletteLength);\n }\n encodeTRNS() {\n const alpha = this._png.palette.filter((color) => {\n return color.at(-1) !== 255;\n });\n this.writeUint32(alpha.length);\n this.writeChars('tRNS');\n for (const el of alpha) {\n this.writeByte(el.at(-1));\n }\n (0,_helpers_crc__WEBPACK_IMPORTED_MODULE_2__.writeCrc)(this, 4 + alpha.length);\n }\n // https://www.w3.org/TR/PNG/#11IDAT\n encodeIDAT(data) {\n this.writeUint32(data.length);\n this.writeChars('IDAT');\n this.writeBytes(data);\n (0,_helpers_crc__WEBPACK_IMPORTED_MODULE_2__.writeCrc)(this, data.length + 4);\n }\n encodeData() {\n const { width, height, channels, depth, data } = this._png;\n const slotsPerLine = depth <= 8\n ? Math.ceil((width * depth) / 8) * channels\n : Math.ceil((((width * depth) / 8) * channels) / 2);\n const newData = new iobuffer__WEBPACK_IMPORTED_MODULE_0__.IOBuffer().setBigEndian();\n let offset = 0;\n if (this._interlaceMethod === _internalTypes__WEBPACK_IMPORTED_MODULE_5__.InterlaceMethod.NO_INTERLACE) {\n for (let i = 0; i < height; i++) {\n newData.writeByte(0); // no filter\n if (depth === 16) {\n offset = writeDataUint16(data, newData, slotsPerLine, offset);\n }\n else {\n offset = writeDataBytes(data, newData, slotsPerLine, offset);\n }\n }\n }\n else if (this._interlaceMethod === _internalTypes__WEBPACK_IMPORTED_MODULE_5__.InterlaceMethod.ADAM7) {\n // Adam7 interlacing\n offset = writeDataInterlaced(this._png, data, newData, offset);\n }\n const buffer = newData.toArray();\n const compressed = (0,pako__WEBPACK_IMPORTED_MODULE_1__.deflate)(buffer, this._zlibOptions);\n this.encodeIDAT(compressed);\n }\n _checkData(data) {\n const { colorType, channels, depth } = getColorType(data, data.palette);\n const png = {\n width: checkInteger(data.width, 'width'),\n height: checkInteger(data.height, 'height'),\n channels,\n data: data.data,\n depth,\n text: data.text,\n palette: data.palette,\n };\n this._colorType = colorType;\n const expectedSize = depth < 8\n ? Math.ceil((png.width * depth) / 8) * png.height * channels\n : png.width * png.height * channels;\n if (png.data.length !== expectedSize) {\n throw new RangeError(`wrong data size. Found ${png.data.length}, expected ${expectedSize}`);\n }\n return png;\n }\n}\nfunction checkInteger(value, name) {\n if (Number.isInteger(value) && value > 0) {\n return value;\n }\n throw new TypeError(`${name} must be a positive integer`);\n}\nfunction getColorType(data, palette) {\n const { channels = 4, depth = 8 } = data;\n if (channels !== 4 && channels !== 3 && channels !== 2 && channels !== 1) {\n throw new RangeError(`unsupported number of channels: ${channels}`);\n }\n const returnValue = {\n channels,\n depth,\n colorType: _internalTypes__WEBPACK_IMPORTED_MODULE_5__.ColorType.UNKNOWN,\n };\n switch (channels) {\n case 4:\n returnValue.colorType = _internalTypes__WEBPACK_IMPORTED_MODULE_5__.ColorType.TRUECOLOUR_ALPHA;\n break;\n case 3:\n returnValue.colorType = _internalTypes__WEBPACK_IMPORTED_MODULE_5__.ColorType.TRUECOLOUR;\n break;\n case 1:\n if (palette) {\n returnValue.colorType = _internalTypes__WEBPACK_IMPORTED_MODULE_5__.ColorType.INDEXED_COLOUR;\n }\n else {\n returnValue.colorType = _internalTypes__WEBPACK_IMPORTED_MODULE_5__.ColorType.GREYSCALE;\n }\n break;\n case 2:\n returnValue.colorType = _internalTypes__WEBPACK_IMPORTED_MODULE_5__.ColorType.GREYSCALE_ALPHA;\n break;\n default:\n throw new Error('unsupported number of channels');\n }\n return returnValue;\n}\nfunction writeDataBytes(data, newData, slotsPerLine, offset) {\n for (let j = 0; j < slotsPerLine; j++) {\n newData.writeByte(data[offset++]);\n }\n return offset;\n}\nfunction writeDataInterlaced(imageData, data, newData, offset) {\n const passes = [\n { x: 0, y: 0, xStep: 8, yStep: 8 },\n { x: 4, y: 0, xStep: 8, yStep: 8 },\n { x: 0, y: 4, xStep: 4, yStep: 8 },\n { x: 2, y: 0, xStep: 4, yStep: 4 },\n { x: 0, y: 2, xStep: 2, yStep: 4 },\n { x: 1, y: 0, xStep: 2, yStep: 2 },\n { x: 0, y: 1, xStep: 1, yStep: 2 },\n ];\n const { width, height, channels, depth } = imageData;\n let pixelSize = 0;\n if (depth === 16) {\n pixelSize = (channels * depth) / 8 / 2;\n }\n else {\n pixelSize = (channels * depth) / 8;\n }\n // Process each pass\n for (let passIndex = 0; passIndex < 7; passIndex++) {\n const pass = passes[passIndex];\n const passWidth = Math.floor((width - pass.x + pass.xStep - 1) / pass.xStep);\n const passHeight = Math.floor((height - pass.y + pass.yStep - 1) / pass.yStep);\n if (passWidth <= 0 || passHeight <= 0)\n continue;\n const passLineBytes = passWidth * pixelSize;\n // For each scanline in this pass\n for (let y = 0; y < passHeight; y++) {\n const imageY = pass.y + y * pass.yStep;\n // Extract raw scanline data\n const rawScanline = depth <= 8\n ? new Uint8Array(passLineBytes)\n : new Uint16Array(passLineBytes);\n let rawOffset = 0;\n for (let x = 0; x < passWidth; x++) {\n const imageX = pass.x + x * pass.xStep;\n if (imageX < width && imageY < height) {\n const srcPos = (imageY * width + imageX) * pixelSize;\n for (let i = 0; i < pixelSize; i++) {\n rawScanline[rawOffset++] = data[srcPos + i];\n }\n }\n }\n newData.writeByte(0); // no filter\n if (depth === 8) {\n newData.writeBytes(rawScanline);\n }\n else if (depth === 16) {\n for (const value of rawScanline) {\n newData.writeByte((value >> 8) & 0xff); // High byte\n newData.writeByte(value & 0xff);\n }\n }\n }\n }\n return offset;\n}\nfunction writeDataUint16(data, newData, slotsPerLine, offset) {\n for (let j = 0; j < slotsPerLine; j++) {\n newData.writeUint16(data[offset++]);\n }\n return offset;\n}\n//# sourceMappingURL=PngEncoder.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9mYXN0LXBuZy9saWItZXNtL1BuZ0VuY29kZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFvQztBQUNMO0FBQ1U7QUFDWTtBQUNUO0FBQ21EO0FBQy9GO0FBQ0E7QUFDQTtBQUNlLHlCQUF5Qiw4Q0FBUTtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBLDBCQUEwQixxREFBUztBQUNuQyw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLDJEQUFlO0FBQ2pDLGtCQUFrQiwyREFBZSxrQkFBa0IsMkRBQWU7QUFDbEU7QUFDQTtBQUNBO0FBQ0EsUUFBUSxrRUFBYztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix5REFBVTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qiw2REFBaUI7QUFDeEMsdUJBQXVCLHdEQUFZO0FBQ25DO0FBQ0EsUUFBUSxzREFBUTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxzREFBUTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsc0RBQVE7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsc0RBQVE7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxzREFBUTtBQUNoQjtBQUNBO0FBQ0EsZ0JBQWdCLHVDQUF1QztBQUN2RDtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsOENBQVE7QUFDcEM7QUFDQSxzQ0FBc0MsMkRBQWU7QUFDckQsNEJBQTRCLFlBQVk7QUFDeEMsc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMsMkRBQWU7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsNkNBQU87QUFDbEM7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDZCQUE2QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJELGdCQUFnQixhQUFhLGFBQWE7QUFDckc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixNQUFNO0FBQ2pDO0FBQ0E7QUFDQSxZQUFZLDBCQUEwQjtBQUN0QztBQUNBLGdFQUFnRSxTQUFTO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHFEQUFTO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxxREFBUztBQUM3QztBQUNBO0FBQ0Esb0NBQW9DLHFEQUFTO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxxREFBUztBQUNqRDtBQUNBO0FBQ0Esd0NBQXdDLHFEQUFTO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxxREFBUztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixrQkFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxnQ0FBZ0M7QUFDMUMsVUFBVSxnQ0FBZ0M7QUFDMUMsVUFBVSxnQ0FBZ0M7QUFDMUMsVUFBVSxnQ0FBZ0M7QUFDMUMsVUFBVSxnQ0FBZ0M7QUFDMUMsVUFBVSxnQ0FBZ0M7QUFDMUMsVUFBVSxnQ0FBZ0M7QUFDMUM7QUFDQSxZQUFZLGlDQUFpQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLGVBQWU7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsZ0JBQWdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixlQUFlO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxlQUFlO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixrQkFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvZmFzdC1wbmcvbGliLWVzbS9QbmdFbmNvZGVyLmpzPzEwMWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSU9CdWZmZXIgfSBmcm9tICdpb2J1ZmZlcic7XG5pbXBvcnQgeyBkZWZsYXRlIH0gZnJvbSAncGFrbyc7XG5pbXBvcnQgeyB3cml0ZUNyYyB9IGZyb20gJy4vaGVscGVycy9jcmMnO1xuaW1wb3J0IHsgd3JpdGVTaWduYXR1cmUgfSBmcm9tICcuL2hlbHBlcnMvc2lnbmF0dXJlJztcbmltcG9ydCB7IGVuY29kZXRFWHQgfSBmcm9tICcuL2hlbHBlcnMvdGV4dCc7XG5pbXBvcnQgeyBJbnRlcmxhY2VNZXRob2QsIENvbG9yVHlwZSwgQ29tcHJlc3Npb25NZXRob2QsIEZpbHRlck1ldGhvZCwgfSBmcm9tICcuL2ludGVybmFsVHlwZXMnO1xuY29uc3QgZGVmYXVsdFpsaWJPcHRpb25zID0ge1xuICAgIGxldmVsOiAzLFxufTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBuZ0VuY29kZXIgZXh0ZW5kcyBJT0J1ZmZlciB7XG4gICAgX3BuZztcbiAgICBfemxpYk9wdGlvbnM7XG4gICAgX2NvbG9yVHlwZTtcbiAgICBfaW50ZXJsYWNlTWV0aG9kO1xuICAgIGNvbnN0cnVjdG9yKGRhdGEsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9jb2xvclR5cGUgPSBDb2xvclR5cGUuVU5LTk9XTjtcbiAgICAgICAgdGhpcy5femxpYk9wdGlvbnMgPSB7IC4uLmRlZmF1bHRabGliT3B0aW9ucywgLi4ub3B0aW9ucy56bGliIH07XG4gICAgICAgIHRoaXMuX3BuZyA9IHRoaXMuX2NoZWNrRGF0YShkYXRhKTtcbiAgICAgICAgdGhpcy5faW50ZXJsYWNlTWV0aG9kID1cbiAgICAgICAgICAgIChvcHRpb25zLmludGVybGFjZSA9PT0gJ0FkYW03J1xuICAgICAgICAgICAgICAgID8gSW50ZXJsYWNlTWV0aG9kLkFEQU03XG4gICAgICAgICAgICAgICAgOiBJbnRlcmxhY2VNZXRob2QuTk9fSU5URVJMQUNFKSA/PyBJbnRlcmxhY2VNZXRob2QuTk9fSU5URVJMQUNFO1xuICAgICAgICB0aGlzLnNldEJpZ0VuZGlhbigpO1xuICAgIH1cbiAgICBlbmNvZGUoKSB7XG4gICAgICAgIHdyaXRlU2lnbmF0dXJlKHRoaXMpO1xuICAgICAgICB0aGlzLmVuY29kZUlIRFIoKTtcbiAgICAgICAgaWYgKHRoaXMuX3BuZy5wYWxldHRlKSB7XG4gICAgICAgICAgICB0aGlzLmVuY29kZVBMVEUoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9wbmcucGFsZXR0ZVswXS5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuY29kZVRSTlMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuY29kZURhdGEoKTtcbiAgICAgICAgaWYgKHRoaXMuX3BuZy50ZXh0KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXl3b3JkLCB0ZXh0XSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9wbmcudGV4dCkpIHtcbiAgICAgICAgICAgICAgICBlbmNvZGV0RVh0KHRoaXMsIGtleXdvcmQsIHRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5jb2RlSUVORCgpO1xuICAgICAgICByZXR1cm4gdGhpcy50b0FycmF5KCk7XG4gICAgfVxuICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9QTkcvIzExSUhEUlxuICAgIGVuY29kZUlIRFIoKSB7XG4gICAgICAgIHRoaXMud3JpdGVVaW50MzIoMTMpO1xuICAgICAgICB0aGlzLndyaXRlQ2hhcnMoJ0lIRFInKTtcbiAgICAgICAgdGhpcy53cml0ZVVpbnQzMih0aGlzLl9wbmcud2lkdGgpO1xuICAgICAgICB0aGlzLndyaXRlVWludDMyKHRoaXMuX3BuZy5oZWlnaHQpO1xuICAgICAgICB0aGlzLndyaXRlQnl0ZSh0aGlzLl9wbmcuZGVwdGgpO1xuICAgICAgICB0aGlzLndyaXRlQnl0ZSh0aGlzLl9jb2xvclR5cGUpO1xuICAgICAgICB0aGlzLndyaXRlQnl0ZShDb21wcmVzc2lvbk1ldGhvZC5ERUZMQVRFKTtcbiAgICAgICAgdGhpcy53cml0ZUJ5dGUoRmlsdGVyTWV0aG9kLkFEQVBUSVZFKTtcbiAgICAgICAgdGhpcy53cml0ZUJ5dGUodGhpcy5faW50ZXJsYWNlTWV0aG9kKTtcbiAgICAgICAgd3JpdGVDcmModGhpcywgMTcpO1xuICAgIH1cbiAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvUE5HLyMxMUlFTkRcbiAgICBlbmNvZGVJRU5EKCkge1xuICAgICAgICB0aGlzLndyaXRlVWludDMyKDApO1xuICAgICAgICB0aGlzLndyaXRlQ2hhcnMoJ0lFTkQnKTtcbiAgICAgICAgd3JpdGVDcmModGhpcywgNCk7XG4gICAgfVxuICAgIGVuY29kZVBMVEUoKSB7XG4gICAgICAgIGNvbnN0IHBhbGV0dGVMZW5ndGggPSB0aGlzLl9wbmcucGFsZXR0ZT8ubGVuZ3RoICogMztcbiAgICAgICAgdGhpcy53cml0ZVVpbnQzMihwYWxldHRlTGVuZ3RoKTtcbiAgICAgICAgdGhpcy53cml0ZUNoYXJzKCdQTFRFJyk7XG4gICAgICAgIGZvciAoY29uc3QgY29sb3Igb2YgdGhpcy5fcG5nLnBhbGV0dGUpIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVCeXRlKGNvbG9yWzBdKTtcbiAgICAgICAgICAgIHRoaXMud3JpdGVCeXRlKGNvbG9yWzFdKTtcbiAgICAgICAgICAgIHRoaXMud3JpdGVCeXRlKGNvbG9yWzJdKTtcbiAgICAgICAgfVxuICAgICAgICB3cml0ZUNyYyh0aGlzLCA0ICsgcGFsZXR0ZUxlbmd0aCk7XG4gICAgfVxuICAgIGVuY29kZVRSTlMoKSB7XG4gICAgICAgIGNvbnN0IGFscGhhID0gdGhpcy5fcG5nLnBhbGV0dGUuZmlsdGVyKChjb2xvcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbG9yLmF0KC0xKSAhPT0gMjU1O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy53cml0ZVVpbnQzMihhbHBoYS5sZW5ndGgpO1xuICAgICAgICB0aGlzLndyaXRlQ2hhcnMoJ3RSTlMnKTtcbiAgICAgICAgZm9yIChjb25zdCBlbCBvZiBhbHBoYSkge1xuICAgICAgICAgICAgdGhpcy53cml0ZUJ5dGUoZWwuYXQoLTEpKTtcbiAgICAgICAgfVxuICAgICAgICB3cml0ZUNyYyh0aGlzLCA0ICsgYWxwaGEubGVuZ3RoKTtcbiAgICB9XG4gICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1BORy8jMTFJREFUXG4gICAgZW5jb2RlSURBVChkYXRhKSB7XG4gICAgICAgIHRoaXMud3JpdGVVaW50MzIoZGF0YS5sZW5ndGgpO1xuICAgICAgICB0aGlzLndyaXRlQ2hhcnMoJ0lEQVQnKTtcbiAgICAgICAgdGhpcy53cml0ZUJ5dGVzKGRhdGEpO1xuICAgICAgICB3cml0ZUNyYyh0aGlzLCBkYXRhLmxlbmd0aCArIDQpO1xuICAgIH1cbiAgICBlbmNvZGVEYXRhKCkge1xuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGNoYW5uZWxzLCBkZXB0aCwgZGF0YSB9ID0gdGhpcy5fcG5nO1xuICAgICAgICBjb25zdCBzbG90c1BlckxpbmUgPSBkZXB0aCA8PSA4XG4gICAgICAgICAgICA/IE1hdGguY2VpbCgod2lkdGggKiBkZXB0aCkgLyA4KSAqIGNoYW5uZWxzXG4gICAgICAgICAgICA6IE1hdGguY2VpbCgoKCh3aWR0aCAqIGRlcHRoKSAvIDgpICogY2hhbm5lbHMpIC8gMik7XG4gICAgICAgIGNvbnN0IG5ld0RhdGEgPSBuZXcgSU9CdWZmZXIoKS5zZXRCaWdFbmRpYW4oKTtcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgIGlmICh0aGlzLl9pbnRlcmxhY2VNZXRob2QgPT09IEludGVybGFjZU1ldGhvZC5OT19JTlRFUkxBQ0UpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHtcbiAgICAgICAgICAgICAgICBuZXdEYXRhLndyaXRlQnl0ZSgwKTsgLy8gbm8gZmlsdGVyXG4gICAgICAgICAgICAgICAgaWYgKGRlcHRoID09PSAxNikge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSB3cml0ZURhdGFVaW50MTYoZGF0YSwgbmV3RGF0YSwgc2xvdHNQZXJMaW5lLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gd3JpdGVEYXRhQnl0ZXMoZGF0YSwgbmV3RGF0YSwgc2xvdHNQZXJMaW5lLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9pbnRlcmxhY2VNZXRob2QgPT09IEludGVybGFjZU1ldGhvZC5BREFNNykge1xuICAgICAgICAgICAgLy8gQWRhbTcgaW50ZXJsYWNpbmdcbiAgICAgICAgICAgIG9mZnNldCA9IHdyaXRlRGF0YUludGVybGFjZWQodGhpcy5fcG5nLCBkYXRhLCBuZXdEYXRhLCBvZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ld0RhdGEudG9BcnJheSgpO1xuICAgICAgICBjb25zdCBjb21wcmVzc2VkID0gZGVmbGF0ZShidWZmZXIsIHRoaXMuX3psaWJPcHRpb25zKTtcbiAgICAgICAgdGhpcy5lbmNvZGVJREFUKGNvbXByZXNzZWQpO1xuICAgIH1cbiAgICBfY2hlY2tEYXRhKGRhdGEpIHtcbiAgICAgICAgY29uc3QgeyBjb2xvclR5cGUsIGNoYW5uZWxzLCBkZXB0aCB9ID0gZ2V0Q29sb3JUeXBlKGRhdGEsIGRhdGEucGFsZXR0ZSk7XG4gICAgICAgIGNvbnN0IHBuZyA9IHtcbiAgICAgICAgICAgIHdpZHRoOiBjaGVja0ludGVnZXIoZGF0YS53aWR0aCwgJ3dpZHRoJyksXG4gICAgICAgICAgICBoZWlnaHQ6IGNoZWNrSW50ZWdlcihkYXRhLmhlaWdodCwgJ2hlaWdodCcpLFxuICAgICAgICAgICAgY2hhbm5lbHMsXG4gICAgICAgICAgICBkYXRhOiBkYXRhLmRhdGEsXG4gICAgICAgICAgICBkZXB0aCxcbiAgICAgICAgICAgIHRleHQ6IGRhdGEudGV4dCxcbiAgICAgICAgICAgIHBhbGV0dGU6IGRhdGEucGFsZXR0ZSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fY29sb3JUeXBlID0gY29sb3JUeXBlO1xuICAgICAgICBjb25zdCBleHBlY3RlZFNpemUgPSBkZXB0aCA8IDhcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKChwbmcud2lkdGggKiBkZXB0aCkgLyA4KSAqIHBuZy5oZWlnaHQgKiBjaGFubmVsc1xuICAgICAgICAgICAgOiBwbmcud2lkdGggKiBwbmcuaGVpZ2h0ICogY2hhbm5lbHM7XG4gICAgICAgIGlmIChwbmcuZGF0YS5sZW5ndGggIT09IGV4cGVjdGVkU2l6ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYHdyb25nIGRhdGEgc2l6ZS4gRm91bmQgJHtwbmcuZGF0YS5sZW5ndGh9LCBleHBlY3RlZCAke2V4cGVjdGVkU2l6ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcG5nO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNoZWNrSW50ZWdlcih2YWx1ZSwgbmFtZSkge1xuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSAmJiB2YWx1ZSA+IDApIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke25hbWV9IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyYCk7XG59XG5mdW5jdGlvbiBnZXRDb2xvclR5cGUoZGF0YSwgcGFsZXR0ZSkge1xuICAgIGNvbnN0IHsgY2hhbm5lbHMgPSA0LCBkZXB0aCA9IDggfSA9IGRhdGE7XG4gICAgaWYgKGNoYW5uZWxzICE9PSA0ICYmIGNoYW5uZWxzICE9PSAzICYmIGNoYW5uZWxzICE9PSAyICYmIGNoYW5uZWxzICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGB1bnN1cHBvcnRlZCBudW1iZXIgb2YgY2hhbm5lbHM6ICR7Y2hhbm5lbHN9YCk7XG4gICAgfVxuICAgIGNvbnN0IHJldHVyblZhbHVlID0ge1xuICAgICAgICBjaGFubmVscyxcbiAgICAgICAgZGVwdGgsXG4gICAgICAgIGNvbG9yVHlwZTogQ29sb3JUeXBlLlVOS05PV04sXG4gICAgfTtcbiAgICBzd2l0Y2ggKGNoYW5uZWxzKSB7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJldHVyblZhbHVlLmNvbG9yVHlwZSA9IENvbG9yVHlwZS5UUlVFQ09MT1VSX0FMUEhBO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVyblZhbHVlLmNvbG9yVHlwZSA9IENvbG9yVHlwZS5UUlVFQ09MT1VSO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGlmIChwYWxldHRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUuY29sb3JUeXBlID0gQ29sb3JUeXBlLklOREVYRURfQ09MT1VSO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUuY29sb3JUeXBlID0gQ29sb3JUeXBlLkdSRVlTQ0FMRTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICByZXR1cm5WYWx1ZS5jb2xvclR5cGUgPSBDb2xvclR5cGUuR1JFWVNDQUxFX0FMUEhBO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vuc3VwcG9ydGVkIG51bWJlciBvZiBjaGFubmVscycpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG59XG5mdW5jdGlvbiB3cml0ZURhdGFCeXRlcyhkYXRhLCBuZXdEYXRhLCBzbG90c1BlckxpbmUsIG9mZnNldCkge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2xvdHNQZXJMaW5lOyBqKyspIHtcbiAgICAgICAgbmV3RGF0YS53cml0ZUJ5dGUoZGF0YVtvZmZzZXQrK10pO1xuICAgIH1cbiAgICByZXR1cm4gb2Zmc2V0O1xufVxuZnVuY3Rpb24gd3JpdGVEYXRhSW50ZXJsYWNlZChpbWFnZURhdGEsIGRhdGEsIG5ld0RhdGEsIG9mZnNldCkge1xuICAgIGNvbnN0IHBhc3NlcyA9IFtcbiAgICAgICAgeyB4OiAwLCB5OiAwLCB4U3RlcDogOCwgeVN0ZXA6IDggfSxcbiAgICAgICAgeyB4OiA0LCB5OiAwLCB4U3RlcDogOCwgeVN0ZXA6IDggfSxcbiAgICAgICAgeyB4OiAwLCB5OiA0LCB4U3RlcDogNCwgeVN0ZXA6IDggfSxcbiAgICAgICAgeyB4OiAyLCB5OiAwLCB4U3RlcDogNCwgeVN0ZXA6IDQgfSxcbiAgICAgICAgeyB4OiAwLCB5OiAyLCB4U3RlcDogMiwgeVN0ZXA6IDQgfSxcbiAgICAgICAgeyB4OiAxLCB5OiAwLCB4U3RlcDogMiwgeVN0ZXA6IDIgfSxcbiAgICAgICAgeyB4OiAwLCB5OiAxLCB4U3RlcDogMSwgeVN0ZXA6IDIgfSxcbiAgICBdO1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgY2hhbm5lbHMsIGRlcHRoIH0gPSBpbWFnZURhdGE7XG4gICAgbGV0IHBpeGVsU2l6ZSA9IDA7XG4gICAgaWYgKGRlcHRoID09PSAxNikge1xuICAgICAgICBwaXhlbFNpemUgPSAoY2hhbm5lbHMgKiBkZXB0aCkgLyA4IC8gMjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHBpeGVsU2l6ZSA9IChjaGFubmVscyAqIGRlcHRoKSAvIDg7XG4gICAgfVxuICAgIC8vIFByb2Nlc3MgZWFjaCBwYXNzXG4gICAgZm9yIChsZXQgcGFzc0luZGV4ID0gMDsgcGFzc0luZGV4IDwgNzsgcGFzc0luZGV4KyspIHtcbiAgICAgICAgY29uc3QgcGFzcyA9IHBhc3Nlc1twYXNzSW5kZXhdO1xuICAgICAgICBjb25zdCBwYXNzV2lkdGggPSBNYXRoLmZsb29yKCh3aWR0aCAtIHBhc3MueCArIHBhc3MueFN0ZXAgLSAxKSAvIHBhc3MueFN0ZXApO1xuICAgICAgICBjb25zdCBwYXNzSGVpZ2h0ID0gTWF0aC5mbG9vcigoaGVpZ2h0IC0gcGFzcy55ICsgcGFzcy55U3RlcCAtIDEpIC8gcGFzcy55U3RlcCk7XG4gICAgICAgIGlmIChwYXNzV2lkdGggPD0gMCB8fCBwYXNzSGVpZ2h0IDw9IDApXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY29uc3QgcGFzc0xpbmVCeXRlcyA9IHBhc3NXaWR0aCAqIHBpeGVsU2l6ZTtcbiAgICAgICAgLy8gRm9yIGVhY2ggc2NhbmxpbmUgaW4gdGhpcyBwYXNzXG4gICAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgcGFzc0hlaWdodDsgeSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbWFnZVkgPSBwYXNzLnkgKyB5ICogcGFzcy55U3RlcDtcbiAgICAgICAgICAgIC8vIEV4dHJhY3QgcmF3IHNjYW5saW5lIGRhdGFcbiAgICAgICAgICAgIGNvbnN0IHJhd1NjYW5saW5lID0gZGVwdGggPD0gOFxuICAgICAgICAgICAgICAgID8gbmV3IFVpbnQ4QXJyYXkocGFzc0xpbmVCeXRlcylcbiAgICAgICAgICAgICAgICA6IG5ldyBVaW50MTZBcnJheShwYXNzTGluZUJ5dGVzKTtcbiAgICAgICAgICAgIGxldCByYXdPZmZzZXQgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCBwYXNzV2lkdGg7IHgrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlWCA9IHBhc3MueCArIHggKiBwYXNzLnhTdGVwO1xuICAgICAgICAgICAgICAgIGlmIChpbWFnZVggPCB3aWR0aCAmJiBpbWFnZVkgPCBoZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3JjUG9zID0gKGltYWdlWSAqIHdpZHRoICsgaW1hZ2VYKSAqIHBpeGVsU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwaXhlbFNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmF3U2NhbmxpbmVbcmF3T2Zmc2V0KytdID0gZGF0YVtzcmNQb3MgKyBpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5ld0RhdGEud3JpdGVCeXRlKDApOyAvLyBubyBmaWx0ZXJcbiAgICAgICAgICAgIGlmIChkZXB0aCA9PT0gOCkge1xuICAgICAgICAgICAgICAgIG5ld0RhdGEud3JpdGVCeXRlcyhyYXdTY2FubGluZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkZXB0aCA9PT0gMTYpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHJhd1NjYW5saW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0RhdGEud3JpdGVCeXRlKCh2YWx1ZSA+PiA4KSAmIDB4ZmYpOyAvLyBIaWdoIGJ5dGVcbiAgICAgICAgICAgICAgICAgICAgbmV3RGF0YS53cml0ZUJ5dGUodmFsdWUgJiAweGZmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9mZnNldDtcbn1cbmZ1bmN0aW9uIHdyaXRlRGF0YVVpbnQxNihkYXRhLCBuZXdEYXRhLCBzbG90c1BlckxpbmUsIG9mZnNldCkge1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2xvdHNQZXJMaW5lOyBqKyspIHtcbiAgICAgICAgbmV3RGF0YS53cml0ZVVpbnQxNihkYXRhW29mZnNldCsrXSk7XG4gICAgfVxuICAgIHJldHVybiBvZmZzZXQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1QbmdFbmNvZGVyLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/fast-png/lib-esm/PngEncoder.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/fast-png/lib-esm/convertIndexedToRgb.js":
/*!**************************************************************!*\
!*** ./node_modules/fast-png/lib-esm/convertIndexedToRgb.js ***!
\**************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ convertIndexedToRgb: function() { return /* binding */ convertIndexedToRgb; }\n/* harmony export */ });\n/**\n * Converts indexed data into RGB/RGBA format\n * @param decodedImage - Image to decode data from.\n * @returns Uint8Array with RGB data.\n */\nfunction convertIndexedToRgb(decodedImage) {\n const palette = decodedImage.palette;\n const depth = decodedImage.depth;\n if (!palette) {\n throw new Error('Color palette is undefined.');\n }\n checkDataSize(decodedImage);\n const indexSize = decodedImage.width * decodedImage.height;\n const resSize = indexSize * palette[0].length;\n const res = new Uint8Array(resSize);\n let indexPos = 0;\n let offset = 0;\n const indexes = new Uint8Array(indexSize);\n let bit = 0xff;\n switch (depth) {\n case 1:\n bit = 0x80;\n break;\n case 2:\n bit = 0xc0;\n break;\n case 4:\n bit = 0xf0;\n break;\n case 8:\n bit = 0xff;\n break;\n default:\n throw new Error('Incorrect depth value');\n }\n for (const byte of decodedImage.data) {\n let bit2 = bit;\n let shift = 8;\n while (bit2) {\n shift -= depth;\n indexes[indexPos++] = (byte & bit2) >> shift;\n bit2 = bit2 >> depth;\n if (indexPos % decodedImage.width === 0) {\n break;\n }\n }\n }\n if (decodedImage.palette) {\n for (const index of indexes) {\n const color = decodedImage.palette.at(index);\n if (!color) {\n throw new Error('Incorrect index of palette color');\n }\n res.set(color, offset);\n offset += color.length;\n }\n }\n return res;\n}\nfunction checkDataSize(image) {\n const expectedSize = image.depth < 8\n ? Math.ceil((image.width * image.depth) / 8) *\n image.height *\n image.channels\n : image.width * image.height * image.channels;\n if (image.data.length !== expectedSize) {\n throw new RangeError(`wrong data size. Found ${image.data.length}, expected ${expectedSize}`);\n }\n}\n//# sourceMappingURL=convertIndexedToRgb.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9mYXN0LXBuZy9saWItZXNtL2NvbnZlcnRJbmRleGVkVG9SZ2IuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxrQkFBa0IsYUFBYSxhQUFhO0FBQ25HO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvZmFzdC1wbmcvbGliLWVzbS9jb252ZXJ0SW5kZXhlZFRvUmdiLmpzPzczZTEiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb252ZXJ0cyBpbmRleGVkIGRhdGEgaW50byBSR0IvUkdCQSBmb3JtYXRcbiAqIEBwYXJhbSBkZWNvZGVkSW1hZ2UgLSBJbWFnZSB0byBkZWNvZGUgZGF0YSBmcm9tLlxuICogQHJldHVybnMgVWludDhBcnJheSB3aXRoIFJHQiBkYXRhLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEluZGV4ZWRUb1JnYihkZWNvZGVkSW1hZ2UpIHtcbiAgICBjb25zdCBwYWxldHRlID0gZGVjb2RlZEltYWdlLnBhbGV0dGU7XG4gICAgY29uc3QgZGVwdGggPSBkZWNvZGVkSW1hZ2UuZGVwdGg7XG4gICAgaWYgKCFwYWxldHRlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29sb3IgcGFsZXR0ZSBpcyB1bmRlZmluZWQuJyk7XG4gICAgfVxuICAgIGNoZWNrRGF0YVNpemUoZGVjb2RlZEltYWdlKTtcbiAgICBjb25zdCBpbmRleFNpemUgPSBkZWNvZGVkSW1hZ2Uud2lkdGggKiBkZWNvZGVkSW1hZ2UuaGVpZ2h0O1xuICAgIGNvbnN0IHJlc1NpemUgPSBpbmRleFNpemUgKiBwYWxldHRlWzBdLmxlbmd0aDtcbiAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShyZXNTaXplKTtcbiAgICBsZXQgaW5kZXhQb3MgPSAwO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGNvbnN0IGluZGV4ZXMgPSBuZXcgVWludDhBcnJheShpbmRleFNpemUpO1xuICAgIGxldCBiaXQgPSAweGZmO1xuICAgIHN3aXRjaCAoZGVwdGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgYml0ID0gMHg4MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBiaXQgPSAweGMwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIGJpdCA9IDB4ZjA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgYml0ID0gMHhmZjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmNvcnJlY3QgZGVwdGggdmFsdWUnKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBieXRlIG9mIGRlY29kZWRJbWFnZS5kYXRhKSB7XG4gICAgICAgIGxldCBiaXQyID0gYml0O1xuICAgICAgICBsZXQgc2hpZnQgPSA4O1xuICAgICAgICB3aGlsZSAoYml0Mikge1xuICAgICAgICAgICAgc2hpZnQgLT0gZGVwdGg7XG4gICAgICAgICAgICBpbmRleGVzW2luZGV4UG9zKytdID0gKGJ5dGUgJiBiaXQyKSA+PiBzaGlmdDtcbiAgICAgICAgICAgIGJpdDIgPSBiaXQyID4+IGRlcHRoO1xuICAgICAgICAgICAgaWYgKGluZGV4UG9zICUgZGVjb2RlZEltYWdlLndpZHRoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRlY29kZWRJbWFnZS5wYWxldHRlKSB7XG4gICAgICAgIGZvciAoY29uc3QgaW5kZXggb2YgaW5kZXhlcykge1xuICAgICAgICAgICAgY29uc3QgY29sb3IgPSBkZWNvZGVkSW1hZ2UucGFsZXR0ZS5hdChpbmRleCk7XG4gICAgICAgICAgICBpZiAoIWNvbG9yKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmNvcnJlY3QgaW5kZXggb2YgcGFsZXR0ZSBjb2xvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzLnNldChjb2xvciwgb2Zmc2V0KTtcbiAgICAgICAgICAgIG9mZnNldCArPSBjb2xvci5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIGNoZWNrRGF0YVNpemUoaW1hZ2UpIHtcbiAgICBjb25zdCBleHBlY3RlZFNpemUgPSBpbWFnZS5kZXB0aCA8IDhcbiAgICAgICAgPyBNYXRoLmNlaWwoKGltYWdlLndpZHRoICogaW1hZ2UuZGVwdGgpIC8gOCkgKlxuICAgICAgICAgICAgaW1hZ2UuaGVpZ2h0ICpcbiAgICAgICAgICAgIGltYWdlLmNoYW5uZWxzXG4gICAgICAgIDogaW1hZ2Uud2lkdGggKiBpbWFnZS5oZWlnaHQgKiBpbWFnZS5jaGFubmVscztcbiAgICBpZiAoaW1hZ2UuZGF0YS5sZW5ndGggIT09IGV4cGVjdGVkU2l6ZSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgd3JvbmcgZGF0YSBzaXplLiBGb3VuZCAke2ltYWdlLmRhdGEubGVuZ3RofSwgZXhwZWN0ZWQgJHtleHBlY3RlZFNpemV9YCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29udmVydEluZGV4ZWRUb1JnYi5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/fast-png/lib-esm/convertIndexedToRgb.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/applyUnfilter.js":
/*!****************************************************************!*\
!*** ./node_modules/fast-png/lib-esm/helpers/applyUnfilter.js ***!
\****************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ applyUnfilter: function() { return /* binding */ applyUnfilter; }\n/* harmony export */ });\n/* harmony import */ var _unfilter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./unfilter */ \"(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/unfilter.js\");\n\n/**\n * Apllies filter on scanline based on the filter type.\n * @param filterType - The filter type to apply.\n * @param currentLine - The current line of pixel data.\n * @param newLine - The new line of pixel data.\n * @param prevLine - The previous line of pixel data.\n * @param passLineBytes - The number of bytes in the pass line.\n * @param bytesPerPixel - The number of bytes per pixel.\n */\nfunction applyUnfilter(filterType, currentLine, newLine, prevLine, passLineBytes, bytesPerPixel) {\n switch (filterType) {\n case 0:\n (0,_unfilter__WEBPACK_IMPORTED_MODULE_0__.unfilterNone)(currentLine, newLine, passLineBytes);\n break;\n case 1:\n (0,_unfilter__WEBPACK_IMPORTED_MODULE_0__.unfilterSub)(currentLine, newLine, passLineBytes, bytesPerPixel);\n break;\n case 2:\n (0,_unfilter__WEBPACK_IMPORTED_MODULE_0__.unfilterUp)(currentLine, newLine, prevLine, passLineBytes);\n break;\n case 3:\n (0,_unfilter__WEBPACK_IMPORTED_MODULE_0__.unfilterAverage)(currentLine, newLine, prevLine, passLineBytes, bytesPerPixel);\n break;\n case 4:\n (0,_unfilter__WEBPACK_IMPORTED_MODULE_0__.unfilterPaeth)(currentLine, newLine, prevLine, passLineBytes, bytesPerPixel);\n break;\n default:\n throw new Error(`Unsupported filter: ${filterType}`);\n }\n}\n//# sourceMappingURL=applyUnfilter.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9mYXN0LXBuZy9saWItZXNtL2hlbHBlcnMvYXBwbHlVbmZpbHRlci5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFvRztBQUNwRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQSxZQUFZLHVEQUFZO0FBQ3hCO0FBQ0E7QUFDQSxZQUFZLHNEQUFXO0FBQ3ZCO0FBQ0E7QUFDQSxZQUFZLHFEQUFVO0FBQ3RCO0FBQ0E7QUFDQSxZQUFZLDBEQUFlO0FBQzNCO0FBQ0E7QUFDQSxZQUFZLHdEQUFhO0FBQ3pCO0FBQ0E7QUFDQSxtREFBbUQsV0FBVztBQUM5RDtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2Zhc3QtcG5nL2xpYi1lc20vaGVscGVycy9hcHBseVVuZmlsdGVyLmpzP2EwMGIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdW5maWx0ZXJBdmVyYWdlLCB1bmZpbHRlck5vbmUsIHVuZmlsdGVyUGFldGgsIHVuZmlsdGVyU3ViLCB1bmZpbHRlclVwLCB9IGZyb20gJy4vdW5maWx0ZXInO1xuLyoqXG4gKiBBcGxsaWVzIGZpbHRlciBvbiBzY2FubGluZSBiYXNlZCBvbiB0aGUgZmlsdGVyIHR5cGUuXG4gKiBAcGFyYW0gZmlsdGVyVHlwZSAtIFRoZSBmaWx0ZXIgdHlwZSB0byBhcHBseS5cbiAqIEBwYXJhbSBjdXJyZW50TGluZSAtIFRoZSBjdXJyZW50IGxpbmUgb2YgcGl4ZWwgZGF0YS5cbiAqIEBwYXJhbSBuZXdMaW5lIC0gVGhlIG5ldyBsaW5lIG9mIHBpeGVsIGRhdGEuXG4gKiBAcGFyYW0gcHJldkxpbmUgLSBUaGUgcHJldmlvdXMgbGluZSBvZiBwaXhlbCBkYXRhLlxuICogQHBhcmFtIHBhc3NMaW5lQnl0ZXMgLSBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBwYXNzIGxpbmUuXG4gKiBAcGFyYW0gYnl0ZXNQZXJQaXhlbCAtIFRoZSBudW1iZXIgb2YgYnl0ZXMgcGVyIHBpeGVsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlVbmZpbHRlcihmaWx0ZXJUeXBlLCBjdXJyZW50TGluZSwgbmV3TGluZSwgcHJldkxpbmUsIHBhc3NMaW5lQnl0ZXMsIGJ5dGVzUGVyUGl4ZWwpIHtcbiAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgdW5maWx0ZXJOb25lKGN1cnJlbnRMaW5lLCBuZXdMaW5lLCBwYXNzTGluZUJ5dGVzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB1bmZpbHRlclN1YihjdXJyZW50TGluZSwgbmV3TGluZSwgcGFzc0xpbmVCeXRlcywgYnl0ZXNQZXJQaXhlbCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdW5maWx0ZXJVcChjdXJyZW50TGluZSwgbmV3TGluZSwgcHJldkxpbmUsIHBhc3NMaW5lQnl0ZXMpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHVuZmlsdGVyQXZlcmFnZShjdXJyZW50TGluZSwgbmV3TGluZSwgcHJldkxpbmUsIHBhc3NMaW5lQnl0ZXMsIGJ5dGVzUGVyUGl4ZWwpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHVuZmlsdGVyUGFldGgoY3VycmVudExpbmUsIG5ld0xpbmUsIHByZXZMaW5lLCBwYXNzTGluZUJ5dGVzLCBieXRlc1BlclBpeGVsKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBmaWx0ZXI6ICR7ZmlsdGVyVHlwZX1gKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHBseVVuZmlsdGVyLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/applyUnfilter.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/crc.js":
/*!******************************************************!*\
!*** ./node_modules/fast-png/lib-esm/helpers/crc.js ***!
\******************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ checkCrc: function() { return /* binding */ checkCrc; },\n/* harmony export */ writeCrc: function() { return /* binding */ writeCrc; }\n/* harmony export */ });\nconst crcTable = [];\nfor (let n = 0; n < 256; n++) {\n let c = n;\n for (let k = 0; k < 8; k++) {\n if (c & 1) {\n c = 0xedb88320 ^ (c >>> 1);\n }\n else {\n c = c >>> 1;\n }\n }\n crcTable[n] = c;\n}\nconst initialCrc = 0xffffffff;\nfunction updateCrc(currentCrc, data, length) {\n let c = currentCrc;\n for (let n = 0; n < length; n++) {\n c = crcTable[(c ^ data[n]) & 0xff] ^ (c >>> 8);\n }\n return c;\n}\nfunction crc(data, length) {\n return (updateCrc(initialCrc, data, length) ^ initialCrc) >>> 0;\n}\nfunction checkCrc(buffer, crcLength, chunkName) {\n const expectedCrc = buffer.readUint32();\n const actualCrc = crc(new Uint8Array(buffer.buffer, buffer.byteOffset + buffer.offset - crcLength - 4, crcLength), crcLength); // \"- 4\" because we already advanced by reading the CRC\n if (actualCrc !== expectedCrc) {\n throw new Error(`CRC mismatch for chunk ${chunkName}. Expected ${expectedCrc}, found ${actualCrc}`);\n }\n}\nfunction writeCrc(buffer, length) {\n buffer.writeUint32(crc(new Uint8Array(buffer.buffer, buffer.byteOffset + buffer.offset - length, length), length));\n}\n//# sourceMappingURL=crc.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9mYXN0LXBuZy9saWItZXNtL2hlbHBlcnMvY3JjLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQSxnQkFBZ0IsU0FBUztBQUN6QjtBQUNBLG9CQUFvQixPQUFPO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixZQUFZO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBLG1JQUFtSTtBQUNuSTtBQUNBLGtEQUFrRCxVQUFVLGFBQWEsWUFBWSxVQUFVLFVBQVU7QUFDekc7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9mYXN0LXBuZy9saWItZXNtL2hlbHBlcnMvY3JjLmpzPzk4ZGUiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgY3JjVGFibGUgPSBbXTtcbmZvciAobGV0IG4gPSAwOyBuIDwgMjU2OyBuKyspIHtcbiAgICBsZXQgYyA9IG47XG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCA4OyBrKyspIHtcbiAgICAgICAgaWYgKGMgJiAxKSB7XG4gICAgICAgICAgICBjID0gMHhlZGI4ODMyMCBeIChjID4+PiAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGMgPSBjID4+PiAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNyY1RhYmxlW25dID0gYztcbn1cbmNvbnN0IGluaXRpYWxDcmMgPSAweGZmZmZmZmZmO1xuZnVuY3Rpb24gdXBkYXRlQ3JjKGN1cnJlbnRDcmMsIGRhdGEsIGxlbmd0aCkge1xuICAgIGxldCBjID0gY3VycmVudENyYztcbiAgICBmb3IgKGxldCBuID0gMDsgbiA8IGxlbmd0aDsgbisrKSB7XG4gICAgICAgIGMgPSBjcmNUYWJsZVsoYyBeIGRhdGFbbl0pICYgMHhmZl0gXiAoYyA+Pj4gOCk7XG4gICAgfVxuICAgIHJldHVybiBjO1xufVxuZnVuY3Rpb24gY3JjKGRhdGEsIGxlbmd0aCkge1xuICAgIHJldHVybiAodXBkYXRlQ3JjKGluaXRpYWxDcmMsIGRhdGEsIGxlbmd0aCkgXiBpbml0aWFsQ3JjKSA+Pj4gMDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0NyYyhidWZmZXIsIGNyY0xlbmd0aCwgY2h1bmtOYW1lKSB7XG4gICAgY29uc3QgZXhwZWN0ZWRDcmMgPSBidWZmZXIucmVhZFVpbnQzMigpO1xuICAgIGNvbnN0IGFjdHVhbENyYyA9IGNyYyhuZXcgVWludDhBcnJheShidWZmZXIuYnVmZmVyLCBidWZmZXIuYnl0ZU9mZnNldCArIGJ1ZmZlci5vZmZzZXQgLSBjcmNMZW5ndGggLSA0LCBjcmNMZW5ndGgpLCBjcmNMZW5ndGgpOyAvLyBcIi0gNFwiIGJlY2F1c2Ugd2UgYWxyZWFkeSBhZHZhbmNlZCBieSByZWFkaW5nIHRoZSBDUkNcbiAgICBpZiAoYWN0dWFsQ3JjICE9PSBleHBlY3RlZENyYykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENSQyBtaXNtYXRjaCBmb3IgY2h1bmsgJHtjaHVua05hbWV9LiBFeHBlY3RlZCAke2V4cGVjdGVkQ3JjfSwgZm91bmQgJHthY3R1YWxDcmN9YCk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlQ3JjKGJ1ZmZlciwgbGVuZ3RoKSB7XG4gICAgYnVmZmVyLndyaXRlVWludDMyKGNyYyhuZXcgVWludDhBcnJheShidWZmZXIuYnVmZmVyLCBidWZmZXIuYnl0ZU9mZnNldCArIGJ1ZmZlci5vZmZzZXQgLSBsZW5ndGgsIGxlbmd0aCksIGxlbmd0aCkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3JjLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/crc.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/decodeInterlaceAdam7.js":
/*!***********************************************************************!*\
!*** ./node_modules/fast-png/lib-esm/helpers/decodeInterlaceAdam7.js ***!
\***********************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ decodeInterlaceAdam7: function() { return /* binding */ decodeInterlaceAdam7; }\n/* harmony export */ });\n/* harmony import */ var _applyUnfilter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./applyUnfilter */ \"(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/applyUnfilter.js\");\n\nconst uint16 = new Uint16Array([0x00ff]);\nconst uint8 = new Uint8Array(uint16.buffer);\nconst osIsLittleEndian = uint8[0] === 0xff;\n/**\n * Decodes the Adam7 interlaced PNG data.\n *\n * @param params - DecodeInterlaceNullParams\n * @returns - array of pixel data.\n */\nfunction decodeInterlaceAdam7(params) {\n const { data, width, height, channels, depth } = params;\n // Adam7 interlacing pattern\n const passes = [\n { x: 0, y: 0, xStep: 8, yStep: 8 }, // Pass 1\n { x: 4, y: 0, xStep: 8, yStep: 8 }, // Pass 2\n { x: 0, y: 4, xStep: 4, yStep: 8 }, // Pass 3\n { x: 2, y: 0, xStep: 4, yStep: 4 }, // Pass 4\n { x: 0, y: 2, xStep: 2, yStep: 4 }, // Pass 5\n { x: 1, y: 0, xStep: 2, yStep: 2 }, // Pass 6\n { x: 0, y: 1, xStep: 1, yStep: 2 }, // Pass 7\n ];\n const bytesPerPixel = Math.ceil(depth / 8) * channels;\n const resultData = new Uint8Array(height * width * bytesPerPixel);\n let offset = 0;\n // Process each pass\n for (let passIndex = 0; passIndex < 7; passIndex++) {\n const pass = passes[passIndex];\n // Calculate pass dimensions\n const passWidth = Math.ceil((width - pass.x) / pass.xStep);\n const passHeight = Math.ceil((height - pass.y) / pass.yStep);\n if (passWidth <= 0 || passHeight <= 0)\n continue;\n const passLineBytes = passWidth * bytesPerPixel;\n const prevLine = new Uint8Array(passLineBytes);\n // Process each scanline in this pass\n for (let y = 0; y < passHeight; y++) {\n // First byte is the filter type\n const filterType = data[offset++];\n const currentLine = data.subarray(offset, offset + passLineBytes);\n offset += passLineBytes;\n // Create a new line for the unfiltered data\n const newLine = new Uint8Array(passLineBytes);\n // Apply the appropriate unfilter\n (0,_applyUnfilter__WEBPACK_IMPORTED_MODULE_0__.applyUnfilter)(filterType, currentLine, newLine, prevLine, passLineBytes, bytesPerPixel);\n prevLine.set(newLine);\n for (let x = 0; x < passWidth; x++) {\n const outputX = pass.x + x * pass.xStep;\n const outputY = pass.y + y * pass.yStep;\n if (outputX >= width || outputY >= height)\n continue;\n for (let i = 0; i < bytesPerPixel; i++) {\n resultData[(outputY * width + outputX) * bytesPerPixel + i] =\n newLine[x * bytesPerPixel + i];\n }\n }\n }\n }\n if (depth === 16) {\n const uint16Data = new Uint16Array(resultData.buffer);\n if (osIsLittleEndian) {\n for (let k = 0; k < uint16Data.length; k++) {\n // PNG is always big endian. Swap the bytes.\n uint16Data[k] = swap16(uint16Data[k]);\n }\n }\n return uint16Data;\n }\n else {\n return resultData;\n }\n}\nfunction swap16(val) {\n return ((val & 0xff) << 8) | ((val >> 8) & 0xff);\n}\n//# sourceMappingURL=decodeInterlaceAdam7.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9mYXN0LXBuZy9saWItZXNtL2hlbHBlcnMvZGVjb2RlSW50ZXJsYWNlQWRhbTcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBZ0Q7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUCxZQUFZLHVDQUF1QztBQUNuRDtBQUNBO0FBQ0EsVUFBVSxnQ0FBZ0M7QUFDMUMsVUFBVSxnQ0FBZ0M7QUFDMUMsVUFBVSxnQ0FBZ0M7QUFDMUMsVUFBVSxnQ0FBZ0M7QUFDMUMsVUFBVSxnQ0FBZ0M7QUFDMUMsVUFBVSxnQ0FBZ0M7QUFDMUMsVUFBVSxnQ0FBZ0M7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixlQUFlO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixnQkFBZ0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLDZEQUFhO0FBQ3pCO0FBQ0EsNEJBQTRCLGVBQWU7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsbUJBQW1CO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qix1QkFBdUI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvZmFzdC1wbmcvbGliLWVzbS9oZWxwZXJzL2RlY29kZUludGVybGFjZUFkYW03LmpzP2YzODgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXBwbHlVbmZpbHRlciB9IGZyb20gJy4vYXBwbHlVbmZpbHRlcic7XG5jb25zdCB1aW50MTYgPSBuZXcgVWludDE2QXJyYXkoWzB4MDBmZl0pO1xuY29uc3QgdWludDggPSBuZXcgVWludDhBcnJheSh1aW50MTYuYnVmZmVyKTtcbmNvbnN0IG9zSXNMaXR0bGVFbmRpYW4gPSB1aW50OFswXSA9PT0gMHhmZjtcbi8qKlxuICogRGVjb2RlcyB0aGUgQWRhbTcgaW50ZXJsYWNlZCBQTkcgZGF0YS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gRGVjb2RlSW50ZXJsYWNlTnVsbFBhcmFtc1xuICogQHJldHVybnMgLSBhcnJheSBvZiBwaXhlbCBkYXRhLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlSW50ZXJsYWNlQWRhbTcocGFyYW1zKSB7XG4gICAgY29uc3QgeyBkYXRhLCB3aWR0aCwgaGVpZ2h0LCBjaGFubmVscywgZGVwdGggfSA9IHBhcmFtcztcbiAgICAvLyBBZGFtNyBpbnRlcmxhY2luZyBwYXR0ZXJuXG4gICAgY29uc3QgcGFzc2VzID0gW1xuICAgICAgICB7IHg6IDAsIHk6IDAsIHhTdGVwOiA4LCB5U3RlcDogOCB9LCAvLyBQYXNzIDFcbiAgICAgICAgeyB4OiA0LCB5OiAwLCB4U3RlcDogOCwgeVN0ZXA6IDggfSwgLy8gUGFzcyAyXG4gICAgICAgIHsgeDogMCwgeTogNCwgeFN0ZXA6IDQsIHlTdGVwOiA4IH0sIC8vIFBhc3MgM1xuICAgICAgICB7IHg6IDIsIHk6IDAsIHhTdGVwOiA0LCB5U3RlcDogNCB9LCAvLyBQYXNzIDRcbiAgICAgICAgeyB4OiAwLCB5OiAyLCB4U3RlcDogMiwgeVN0ZXA6IDQgfSwgLy8gUGFzcyA1XG4gICAgICAgIHsgeDogMSwgeTogMCwgeFN0ZXA6IDIsIHlTdGVwOiAyIH0sIC8vIFBhc3MgNlxuICAgICAgICB7IHg6IDAsIHk6IDEsIHhTdGVwOiAxLCB5U3RlcDogMiB9LCAvLyBQYXNzIDdcbiAgICBdO1xuICAgIGNvbnN0IGJ5dGVzUGVyUGl4ZWwgPSBNYXRoLmNlaWwoZGVwdGggLyA4KSAqIGNoYW5uZWxzO1xuICAgIGNvbnN0IHJlc3VsdERhdGEgPSBuZXcgVWludDhBcnJheShoZWlnaHQgKiB3aWR0aCAqIGJ5dGVzUGVyUGl4ZWwpO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIC8vIFByb2Nlc3MgZWFjaCBwYXNzXG4gICAgZm9yIChsZXQgcGFzc0luZGV4ID0gMDsgcGFzc0luZGV4IDwgNzsgcGFzc0luZGV4KyspIHtcbiAgICAgICAgY29uc3QgcGFzcyA9IHBhc3Nlc1twYXNzSW5kZXhdO1xuICAgICAgICAvLyBDYWxjdWxhdGUgcGFzcyBkaW1lbnNpb25zXG4gICAgICAgIGNvbnN0IHBhc3NXaWR0aCA9IE1hdGguY2VpbCgod2lkdGggLSBwYXNzLngpIC8gcGFzcy54U3RlcCk7XG4gICAgICAgIGNvbnN0IHBhc3NIZWlnaHQgPSBNYXRoLmNlaWwoKGhlaWdodCAtIHBhc3MueSkgLyBwYXNzLnlTdGVwKTtcbiAgICAgICAgaWYgKHBhc3NXaWR0aCA8PSAwIHx8IHBhc3NIZWlnaHQgPD0gMClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBwYXNzTGluZUJ5dGVzID0gcGFzc1dpZHRoICogYnl0ZXNQZXJQaXhlbDtcbiAgICAgICAgY29uc3QgcHJldkxpbmUgPSBuZXcgVWludDhBcnJheShwYXNzTGluZUJ5dGVzKTtcbiAgICAgICAgLy8gUHJvY2VzcyBlYWNoIHNjYW5saW5lIGluIHRoaXMgcGFzc1xuICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IHBhc3NIZWlnaHQ7IHkrKykge1xuICAgICAgICAgICAgLy8gRmlyc3QgYnl0ZSBpcyB0aGUgZmlsdGVyIHR5cGVcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlclR5cGUgPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRMaW5lID0gZGF0YS5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIHBhc3NMaW5lQnl0ZXMpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IHBhc3NMaW5lQnl0ZXM7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgbGluZSBmb3IgdGhlIHVuZmlsdGVyZWQgZGF0YVxuICAgICAgICAgICAgY29uc3QgbmV3TGluZSA9IG5ldyBVaW50OEFycmF5KHBhc3NMaW5lQnl0ZXMpO1xuICAgICAgICAgICAgLy8gQXBwbHkgdGhlIGFwcHJvcHJpYXRlIHVuZmlsdGVyXG4gICAgICAgICAgICBhcHBseVVuZmlsdGVyKGZpbHRlclR5cGUsIGN1cnJlbnRMaW5lLCBuZXdMaW5lLCBwcmV2TGluZSwgcGFzc0xpbmVCeXRlcywgYnl0ZXNQZXJQaXhlbCk7XG4gICAgICAgICAgICBwcmV2TGluZS5zZXQobmV3TGluZSk7XG4gICAgICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHBhc3NXaWR0aDsgeCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0WCA9IHBhc3MueCArIHggKiBwYXNzLnhTdGVwO1xuICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dFkgPSBwYXNzLnkgKyB5ICogcGFzcy55U3RlcDtcbiAgICAgICAgICAgICAgICBpZiAob3V0cHV0WCA+PSB3aWR0aCB8fCBvdXRwdXRZID49IGhlaWdodClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlc1BlclBpeGVsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0RGF0YVsob3V0cHV0WSAqIHdpZHRoICsgb3V0cHV0WCkgKiBieXRlc1BlclBpeGVsICsgaV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3TGluZVt4ICogYnl0ZXNQZXJQaXhlbCArIGldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGVwdGggPT09IDE2KSB7XG4gICAgICAgIGNvbnN0IHVpbnQxNkRhdGEgPSBuZXcgVWludDE2QXJyYXkocmVzdWx0RGF0YS5idWZmZXIpO1xuICAgICAgICBpZiAob3NJc0xpdHRsZUVuZGlhbikge1xuICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCB1aW50MTZEYXRhLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgLy8gUE5HIGlzIGFsd2F5cyBiaWcgZW5kaWFuLiBTd2FwIHRoZSBieXRlcy5cbiAgICAgICAgICAgICAgICB1aW50MTZEYXRhW2tdID0gc3dhcDE2KHVpbnQxNkRhdGFba10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1aW50MTZEYXRhO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdERhdGE7XG4gICAgfVxufVxuZnVuY3Rpb24gc3dhcDE2KHZhbCkge1xuICAgIHJldHVybiAoKHZhbCAmIDB4ZmYpIDw8IDgpIHwgKCh2YWwgPj4gOCkgJiAweGZmKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlY29kZUludGVybGFjZUFkYW03LmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/decodeInterlaceAdam7.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/decodeInterlaceNull.js":
/*!**********************************************************************!*\
!*** ./node_modules/fast-png/lib-esm/helpers/decodeInterlaceNull.js ***!
\**********************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ decodeInterlaceNull: function() { return /* binding */ decodeInterlaceNull; }\n/* harmony export */ });\n/* harmony import */ var _unfilter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./unfilter */ \"(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/unfilter.js\");\n\nconst uint16 = new Uint16Array([0x00ff]);\nconst uint8 = new Uint8Array(uint16.buffer);\nconst osIsLittleEndian = uint8[0] === 0xff;\nconst empty = new Uint8Array(0);\nfunction decodeInterlaceNull(params) {\n const { data, width, height, channels, depth } = params;\n const bytesPerPixel = Math.ceil(depth / 8) * channels;\n const bytesPerLine = Math.ceil((depth / 8) * channels * width);\n const newData = new Uint8Array(height * bytesPerLine);\n let prevLine = empty;\n let offset = 0;\n let currentLine;\n let newLine;\n for (let i = 0; i < height; i++) {\n currentLine = data.subarray(offset + 1, offset + 1 + bytesPerLine);\n newLine = newData.subarray(i * bytesPerLine, (i + 1) * bytesPerLine);\n switch (data[offset]) {\n case 0:\n (0,_unfilter__WEBPACK_IMPORTED_MODULE_0__.unfilterNone)(currentLine, newLine, bytesPerLine);\n break;\n case 1:\n (0,_unfilter__WEBPACK_IMPORTED_MODULE_0__.unfilterSub)(currentLine, newLine, bytesPerLine, bytesPerPixel);\n break;\n case 2:\n (0,_unfilter__WEBPACK_IMPORTED_MODULE_0__.unfilterUp)(currentLine, newLine, prevLine, bytesPerLine);\n break;\n case 3:\n (0,_unfilter__WEBPACK_IMPORTED_MODULE_0__.unfilterAverage)(currentLine, newLine, prevLine, bytesPerLine, bytesPerPixel);\n break;\n case 4:\n (0,_unfilter__WEBPACK_IMPORTED_MODULE_0__.unfilterPaeth)(currentLine, newLine, prevLine, bytesPerLine, bytesPerPixel);\n break;\n default:\n throw new Error(`Unsupported filter: ${data[offset]}`);\n }\n prevLine = newLine;\n offset += bytesPerLine + 1;\n }\n if (depth === 16) {\n const uint16Data = new Uint16Array(newData.buffer);\n if (osIsLittleEndian) {\n for (let k = 0; k < uint16Data.length; k++) {\n // PNG is always big endian. Swap the bytes.\n uint16Data[k] = swap16(uint16Data[k]);\n }\n }\n return uint16Data;\n }\n else {\n return newData;\n }\n}\nfunction swap16(val) {\n return ((val & 0xff) << 8) | ((val >> 8) & 0xff);\n}\n//# sourceMappingURL=decodeInterlaceNull.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9mYXN0LXBuZy9saWItZXNtL2hlbHBlcnMvZGVjb2RlSW50ZXJsYWNlTnVsbC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFvRztBQUNwRztBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1AsWUFBWSx1Q0FBdUM7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsWUFBWTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix1REFBWTtBQUM1QjtBQUNBO0FBQ0EsZ0JBQWdCLHNEQUFXO0FBQzNCO0FBQ0E7QUFDQSxnQkFBZ0IscURBQVU7QUFDMUI7QUFDQTtBQUNBLGdCQUFnQiwwREFBZTtBQUMvQjtBQUNBO0FBQ0EsZ0JBQWdCLHdEQUFhO0FBQzdCO0FBQ0E7QUFDQSx1REFBdUQsYUFBYTtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qix1QkFBdUI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvZmFzdC1wbmcvbGliLWVzbS9oZWxwZXJzL2RlY29kZUludGVybGFjZU51bGwuanM/ODA1MyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1bmZpbHRlckF2ZXJhZ2UsIHVuZmlsdGVyTm9uZSwgdW5maWx0ZXJQYWV0aCwgdW5maWx0ZXJTdWIsIHVuZmlsdGVyVXAsIH0gZnJvbSAnLi91bmZpbHRlcic7XG5jb25zdCB1aW50MTYgPSBuZXcgVWludDE2QXJyYXkoWzB4MDBmZl0pO1xuY29uc3QgdWludDggPSBuZXcgVWludDhBcnJheSh1aW50MTYuYnVmZmVyKTtcbmNvbnN0IG9zSXNMaXR0bGVFbmRpYW4gPSB1aW50OFswXSA9PT0gMHhmZjtcbmNvbnN0IGVtcHR5ID0gbmV3IFVpbnQ4QXJyYXkoMCk7XG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlSW50ZXJsYWNlTnVsbChwYXJhbXMpIHtcbiAgICBjb25zdCB7IGRhdGEsIHdpZHRoLCBoZWlnaHQsIGNoYW5uZWxzLCBkZXB0aCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IGJ5dGVzUGVyUGl4ZWwgPSBNYXRoLmNlaWwoZGVwdGggLyA4KSAqIGNoYW5uZWxzO1xuICAgIGNvbnN0IGJ5dGVzUGVyTGluZSA9IE1hdGguY2VpbCgoZGVwdGggLyA4KSAqIGNoYW5uZWxzICogd2lkdGgpO1xuICAgIGNvbnN0IG5ld0RhdGEgPSBuZXcgVWludDhBcnJheShoZWlnaHQgKiBieXRlc1BlckxpbmUpO1xuICAgIGxldCBwcmV2TGluZSA9IGVtcHR5O1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGxldCBjdXJyZW50TGluZTtcbiAgICBsZXQgbmV3TGluZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7XG4gICAgICAgIGN1cnJlbnRMaW5lID0gZGF0YS5zdWJhcnJheShvZmZzZXQgKyAxLCBvZmZzZXQgKyAxICsgYnl0ZXNQZXJMaW5lKTtcbiAgICAgICAgbmV3TGluZSA9IG5ld0RhdGEuc3ViYXJyYXkoaSAqIGJ5dGVzUGVyTGluZSwgKGkgKyAxKSAqIGJ5dGVzUGVyTGluZSk7XG4gICAgICAgIHN3aXRjaCAoZGF0YVtvZmZzZXRdKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgdW5maWx0ZXJOb25lKGN1cnJlbnRMaW5lLCBuZXdMaW5lLCBieXRlc1BlckxpbmUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIHVuZmlsdGVyU3ViKGN1cnJlbnRMaW5lLCBuZXdMaW5lLCBieXRlc1BlckxpbmUsIGJ5dGVzUGVyUGl4ZWwpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHVuZmlsdGVyVXAoY3VycmVudExpbmUsIG5ld0xpbmUsIHByZXZMaW5lLCBieXRlc1BlckxpbmUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIHVuZmlsdGVyQXZlcmFnZShjdXJyZW50TGluZSwgbmV3TGluZSwgcHJldkxpbmUsIGJ5dGVzUGVyTGluZSwgYnl0ZXNQZXJQaXhlbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgdW5maWx0ZXJQYWV0aChjdXJyZW50TGluZSwgbmV3TGluZSwgcHJldkxpbmUsIGJ5dGVzUGVyTGluZSwgYnl0ZXNQZXJQaXhlbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZmlsdGVyOiAke2RhdGFbb2Zmc2V0XX1gKTtcbiAgICAgICAgfVxuICAgICAgICBwcmV2TGluZSA9IG5ld0xpbmU7XG4gICAgICAgIG9mZnNldCArPSBieXRlc1BlckxpbmUgKyAxO1xuICAgIH1cbiAgICBpZiAoZGVwdGggPT09IDE2KSB7XG4gICAgICAgIGNvbnN0IHVpbnQxNkRhdGEgPSBuZXcgVWludDE2QXJyYXkobmV3RGF0YS5idWZmZXIpO1xuICAgICAgICBpZiAob3NJc0xpdHRsZUVuZGlhbikge1xuICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCB1aW50MTZEYXRhLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgLy8gUE5HIGlzIGFsd2F5cyBiaWcgZW5kaWFuLiBTd2FwIHRoZSBieXRlcy5cbiAgICAgICAgICAgICAgICB1aW50MTZEYXRhW2tdID0gc3dhcDE2KHVpbnQxNkRhdGFba10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1aW50MTZEYXRhO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ld0RhdGE7XG4gICAgfVxufVxuZnVuY3Rpb24gc3dhcDE2KHZhbCkge1xuICAgIHJldHVybiAoKHZhbCAmIDB4ZmYpIDw8IDgpIHwgKCh2YWwgPj4gOCkgJiAweGZmKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlY29kZUludGVybGFjZU51bGwuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/decodeInterlaceNull.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/signature.js":
/*!************************************************************!*\
!*** ./node_modules/fast-png/lib-esm/helpers/signature.js ***!
\************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ checkSignature: function() { return /* binding */ checkSignature; },\n/* harmony export */ hasPngSignature: function() { return /* binding */ hasPngSignature; },\n/* harmony export */ writeSignature: function() { return /* binding */ writeSignature; }\n/* harmony export */ });\n// https://www.w3.org/TR/PNG/#5PNG-file-signature\nconst pngSignature = Uint8Array.of(137, 80, 78, 71, 13, 10, 26, 10);\nfunction writeSignature(buffer) {\n buffer.writeBytes(pngSignature);\n}\nfunction checkSignature(buffer) {\n if (!hasPngSignature(buffer.readBytes(pngSignature.length))) {\n throw new Error('wrong PNG signature');\n }\n}\nfunction hasPngSignature(array) {\n if (array.length < pngSignature.length) {\n return false;\n }\n for (let i = 0; i < pngSignature.length; i++) {\n if (array[i] !== pngSignature[i]) {\n return false;\n }\n }\n return true;\n}\n//# sourceMappingURL=signature.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9mYXN0LXBuZy9saWItZXNtL2hlbHBlcnMvc2lnbmF0dXJlLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IseUJBQXlCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9mYXN0LXBuZy9saWItZXNtL2hlbHBlcnMvc2lnbmF0dXJlLmpzPzdjZDAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1BORy8jNVBORy1maWxlLXNpZ25hdHVyZVxuY29uc3QgcG5nU2lnbmF0dXJlID0gVWludDhBcnJheS5vZigxMzcsIDgwLCA3OCwgNzEsIDEzLCAxMCwgMjYsIDEwKTtcbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVNpZ25hdHVyZShidWZmZXIpIHtcbiAgICBidWZmZXIud3JpdGVCeXRlcyhwbmdTaWduYXR1cmUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrU2lnbmF0dXJlKGJ1ZmZlcikge1xuICAgIGlmICghaGFzUG5nU2lnbmF0dXJlKGJ1ZmZlci5yZWFkQnl0ZXMocG5nU2lnbmF0dXJlLmxlbmd0aCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignd3JvbmcgUE5HIHNpZ25hdHVyZScpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBoYXNQbmdTaWduYXR1cmUoYXJyYXkpIHtcbiAgICBpZiAoYXJyYXkubGVuZ3RoIDwgcG5nU2lnbmF0dXJlLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG5nU2lnbmF0dXJlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhcnJheVtpXSAhPT0gcG5nU2lnbmF0dXJlW2ldKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaWduYXR1cmUuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/signature.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/text.js":
/*!*******************************************************!*\
!*** ./node_modules/fast-png/lib-esm/helpers/text.js ***!
\*******************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ decodetEXt: function() { return /* binding */ decodetEXt; },\n/* harmony export */ encodetEXt: function() { return /* binding */ encodetEXt; },\n/* harmony export */ readKeyword: function() { return /* binding */ readKeyword; },\n/* harmony export */ readLatin1: function() { return /* binding */ readLatin1; },\n/* harmony export */ textChunkName: function() { return /* binding */ textChunkName; }\n/* harmony export */ });\n/* harmony import */ var _crc__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./crc */ \"(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/crc.js\");\n\n// https://www.w3.org/TR/png/#11tEXt\nconst textChunkName = 'tEXt';\nconst NULL = 0;\nconst latin1Decoder = new TextDecoder('latin1');\nfunction validateKeyword(keyword) {\n validateLatin1(keyword);\n if (keyword.length === 0 || keyword.length > 79) {\n throw new Error('keyword length must be between 1 and 79');\n }\n}\n// eslint-disable-next-line no-control-regex\nconst latin1Regex = /^[\\u0000-\\u00FF]*$/;\nfunction validateLatin1(text) {\n if (!latin1Regex.test(text)) {\n throw new Error('invalid latin1 text');\n }\n}\nfunction decodetEXt(text, buffer, length) {\n const keyword = readKeyword(buffer);\n text[keyword] = readLatin1(buffer, length - keyword.length - 1);\n}\nfunction encodetEXt(buffer, keyword, text) {\n validateKeyword(keyword);\n validateLatin1(text);\n const length = keyword.length + 1 /* NULL */ + text.length;\n buffer.writeUint32(length);\n buffer.writeChars(textChunkName);\n buffer.writeChars(keyword);\n buffer.writeByte(NULL);\n buffer.writeChars(text);\n (0,_crc__WEBPACK_IMPORTED_MODULE_0__.writeCrc)(buffer, length + 4);\n}\n// https://www.w3.org/TR/png/#11keywords\nfunction readKeyword(buffer) {\n buffer.mark();\n while (buffer.readByte() !== NULL) {\n /* advance */\n }\n const end = buffer.offset;\n buffer.reset();\n const keyword = latin1Decoder.decode(buffer.readBytes(end - buffer.offset - 1));\n // NULL\n buffer.skip(1);\n validateKeyword(keyword);\n return keyword;\n}\nfunction readLatin1(buffer, length) {\n return latin1Decoder.decode(buffer.readBytes(length));\n}\n//# sourceMappingURL=text.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9mYXN0LXBuZy9saWItZXNtL2hlbHBlcnMvdGV4dC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBaUM7QUFDakM7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSw4Q0FBUTtBQUNaO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9mYXN0LXBuZy9saWItZXNtL2hlbHBlcnMvdGV4dC5qcz9iMDk3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHdyaXRlQ3JjIH0gZnJvbSAnLi9jcmMnO1xuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3BuZy8jMTF0RVh0XG5leHBvcnQgY29uc3QgdGV4dENodW5rTmFtZSA9ICd0RVh0JztcbmNvbnN0IE5VTEwgPSAwO1xuY29uc3QgbGF0aW4xRGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcignbGF0aW4xJyk7XG5mdW5jdGlvbiB2YWxpZGF0ZUtleXdvcmQoa2V5d29yZCkge1xuICAgIHZhbGlkYXRlTGF0aW4xKGtleXdvcmQpO1xuICAgIGlmIChrZXl3b3JkLmxlbmd0aCA9PT0gMCB8fCBrZXl3b3JkLmxlbmd0aCA+IDc5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigna2V5d29yZCBsZW5ndGggbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDc5Jyk7XG4gICAgfVxufVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbmNvbnN0IGxhdGluMVJlZ2V4ID0gL15bXFx1MDAwMC1cXHUwMEZGXSokLztcbmZ1bmN0aW9uIHZhbGlkYXRlTGF0aW4xKHRleHQpIHtcbiAgICBpZiAoIWxhdGluMVJlZ2V4LnRlc3QodGV4dCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGxhdGluMSB0ZXh0Jyk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZXRFWHQodGV4dCwgYnVmZmVyLCBsZW5ndGgpIHtcbiAgICBjb25zdCBrZXl3b3JkID0gcmVhZEtleXdvcmQoYnVmZmVyKTtcbiAgICB0ZXh0W2tleXdvcmRdID0gcmVhZExhdGluMShidWZmZXIsIGxlbmd0aCAtIGtleXdvcmQubGVuZ3RoIC0gMSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZW5jb2RldEVYdChidWZmZXIsIGtleXdvcmQsIHRleHQpIHtcbiAgICB2YWxpZGF0ZUtleXdvcmQoa2V5d29yZCk7XG4gICAgdmFsaWRhdGVMYXRpbjEodGV4dCk7XG4gICAgY29uc3QgbGVuZ3RoID0ga2V5d29yZC5sZW5ndGggKyAxIC8qIE5VTEwgKi8gKyB0ZXh0Lmxlbmd0aDtcbiAgICBidWZmZXIud3JpdGVVaW50MzIobGVuZ3RoKTtcbiAgICBidWZmZXIud3JpdGVDaGFycyh0ZXh0Q2h1bmtOYW1lKTtcbiAgICBidWZmZXIud3JpdGVDaGFycyhrZXl3b3JkKTtcbiAgICBidWZmZXIud3JpdGVCeXRlKE5VTEwpO1xuICAgIGJ1ZmZlci53cml0ZUNoYXJzKHRleHQpO1xuICAgIHdyaXRlQ3JjKGJ1ZmZlciwgbGVuZ3RoICsgNCk7XG59XG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvcG5nLyMxMWtleXdvcmRzXG5leHBvcnQgZnVuY3Rpb24gcmVhZEtleXdvcmQoYnVmZmVyKSB7XG4gICAgYnVmZmVyLm1hcmsoKTtcbiAgICB3aGlsZSAoYnVmZmVyLnJlYWRCeXRlKCkgIT09IE5VTEwpIHtcbiAgICAgICAgLyogYWR2YW5jZSAqL1xuICAgIH1cbiAgICBjb25zdCBlbmQgPSBidWZmZXIub2Zmc2V0O1xuICAgIGJ1ZmZlci5yZXNldCgpO1xuICAgIGNvbnN0IGtleXdvcmQgPSBsYXRpbjFEZWNvZGVyLmRlY29kZShidWZmZXIucmVhZEJ5dGVzKGVuZCAtIGJ1ZmZlci5vZmZzZXQgLSAxKSk7XG4gICAgLy8gTlVMTFxuICAgIGJ1ZmZlci5za2lwKDEpO1xuICAgIHZhbGlkYXRlS2V5d29yZChrZXl3b3JkKTtcbiAgICByZXR1cm4ga2V5d29yZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZWFkTGF0aW4xKGJ1ZmZlciwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGxhdGluMURlY29kZXIuZGVjb2RlKGJ1ZmZlci5yZWFkQnl0ZXMobGVuZ3RoKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10ZXh0LmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/text.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/unfilter.js":
/*!***********************************************************!*\
!*** ./node_modules/fast-png/lib-esm/helpers/unfilter.js ***!
\***********************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ unfilterAverage: function() { return /* binding */ unfilterAverage; },\n/* harmony export */ unfilterNone: function() { return /* binding */ unfilterNone; },\n/* harmony export */ unfilterPaeth: function() { return /* binding */ unfilterPaeth; },\n/* harmony export */ unfilterSub: function() { return /* binding */ unfilterSub; },\n/* harmony export */ unfilterUp: function() { return /* binding */ unfilterUp; }\n/* harmony export */ });\nfunction unfilterNone(currentLine, newLine, bytesPerLine) {\n for (let i = 0; i < bytesPerLine; i++) {\n newLine[i] = currentLine[i];\n }\n}\nfunction unfilterSub(currentLine, newLine, bytesPerLine, bytesPerPixel) {\n let i = 0;\n for (; i < bytesPerPixel; i++) {\n // just copy first bytes\n newLine[i] = currentLine[i];\n }\n for (; i < bytesPerLine; i++) {\n newLine[i] = (currentLine[i] + newLine[i - bytesPerPixel]) & 0xff;\n }\n}\nfunction unfilterUp(currentLine, newLine, prevLine, bytesPerLine) {\n let i = 0;\n if (prevLine.length === 0) {\n // just copy bytes for first line\n for (; i < bytesPerLine; i++) {\n newLine[i] = currentLine[i];\n }\n }\n else {\n for (; i < bytesPerLine; i++) {\n newLine[i] = (currentLine[i] + prevLine[i]) & 0xff;\n }\n }\n}\nfunction unfilterAverage(currentLine, newLine, prevLine, bytesPerLine, bytesPerPixel) {\n let i = 0;\n if (prevLine.length === 0) {\n for (; i < bytesPerPixel; i++) {\n newLine[i] = currentLine[i];\n }\n for (; i < bytesPerLine; i++) {\n newLine[i] = (currentLine[i] + (newLine[i - bytesPerPixel] >> 1)) & 0xff;\n }\n }\n else {\n for (; i < bytesPerPixel; i++) {\n newLine[i] = (currentLine[i] + (prevLine[i] >> 1)) & 0xff;\n }\n for (; i < bytesPerLine; i++) {\n newLine[i] =\n (currentLine[i] + ((newLine[i - bytesPerPixel] + prevLine[i]) >> 1)) &\n 0xff;\n }\n }\n}\nfunction unfilterPaeth(currentLine, newLine, prevLine, bytesPerLine, bytesPerPixel) {\n let i = 0;\n if (prevLine.length === 0) {\n for (; i < bytesPerPixel; i++) {\n newLine[i] = currentLine[i];\n }\n for (; i < bytesPerLine; i++) {\n newLine[i] = (currentLine[i] + newLine[i - bytesPerPixel]) & 0xff;\n }\n }\n else {\n for (; i < bytesPerPixel; i++) {\n newLine[i] = (currentLine[i] + prevLine[i]) & 0xff;\n }\n for (; i < bytesPerLine; i++) {\n newLine[i] =\n (currentLine[i] +\n paethPredictor(newLine[i - bytesPerPixel], prevLine[i], prevLine[i - bytesPerPixel])) &\n 0xff;\n }\n }\n}\nfunction paethPredictor(a, b, c) {\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n if (pa <= pb && pa <= pc)\n return a;\n else if (pb <= pc)\n return b;\n else\n return c;\n}\n//# sourceMappingURL=unfilter.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9mYXN0LXBuZy9saWItZXNtL2hlbHBlcnMvdW5maWx0ZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBTztBQUNQLG9CQUFvQixrQkFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBLFdBQVcsbUJBQW1CO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsa0JBQWtCO0FBQzdCO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsZUFBZSxrQkFBa0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBLGVBQWUsbUJBQW1CO0FBQ2xDO0FBQ0E7QUFDQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQW1CO0FBQ2xDO0FBQ0E7QUFDQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQSxlQUFlLG1CQUFtQjtBQUNsQztBQUNBO0FBQ0EsZUFBZSxrQkFBa0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1CQUFtQjtBQUNsQztBQUNBO0FBQ0EsZUFBZSxrQkFBa0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvZmFzdC1wbmcvbGliLWVzbS9oZWxwZXJzL3VuZmlsdGVyLmpzPzgxZjEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHVuZmlsdGVyTm9uZShjdXJyZW50TGluZSwgbmV3TGluZSwgYnl0ZXNQZXJMaW5lKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlc1BlckxpbmU7IGkrKykge1xuICAgICAgICBuZXdMaW5lW2ldID0gY3VycmVudExpbmVbaV07XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHVuZmlsdGVyU3ViKGN1cnJlbnRMaW5lLCBuZXdMaW5lLCBieXRlc1BlckxpbmUsIGJ5dGVzUGVyUGl4ZWwpIHtcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBieXRlc1BlclBpeGVsOyBpKyspIHtcbiAgICAgICAgLy8ganVzdCBjb3B5IGZpcnN0IGJ5dGVzXG4gICAgICAgIG5ld0xpbmVbaV0gPSBjdXJyZW50TGluZVtpXTtcbiAgICB9XG4gICAgZm9yICg7IGkgPCBieXRlc1BlckxpbmU7IGkrKykge1xuICAgICAgICBuZXdMaW5lW2ldID0gKGN1cnJlbnRMaW5lW2ldICsgbmV3TGluZVtpIC0gYnl0ZXNQZXJQaXhlbF0pICYgMHhmZjtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gdW5maWx0ZXJVcChjdXJyZW50TGluZSwgbmV3TGluZSwgcHJldkxpbmUsIGJ5dGVzUGVyTGluZSkge1xuICAgIGxldCBpID0gMDtcbiAgICBpZiAocHJldkxpbmUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIGp1c3QgY29weSBieXRlcyBmb3IgZmlyc3QgbGluZVxuICAgICAgICBmb3IgKDsgaSA8IGJ5dGVzUGVyTGluZTsgaSsrKSB7XG4gICAgICAgICAgICBuZXdMaW5lW2ldID0gY3VycmVudExpbmVbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZvciAoOyBpIDwgYnl0ZXNQZXJMaW5lOyBpKyspIHtcbiAgICAgICAgICAgIG5ld0xpbmVbaV0gPSAoY3VycmVudExpbmVbaV0gKyBwcmV2TGluZVtpXSkgJiAweGZmO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHVuZmlsdGVyQXZlcmFnZShjdXJyZW50TGluZSwgbmV3TGluZSwgcHJldkxpbmUsIGJ5dGVzUGVyTGluZSwgYnl0ZXNQZXJQaXhlbCkge1xuICAgIGxldCBpID0gMDtcbiAgICBpZiAocHJldkxpbmUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGZvciAoOyBpIDwgYnl0ZXNQZXJQaXhlbDsgaSsrKSB7XG4gICAgICAgICAgICBuZXdMaW5lW2ldID0gY3VycmVudExpbmVbaV07XG4gICAgICAgIH1cbiAgICAgICAgZm9yICg7IGkgPCBieXRlc1BlckxpbmU7IGkrKykge1xuICAgICAgICAgICAgbmV3TGluZVtpXSA9IChjdXJyZW50TGluZVtpXSArIChuZXdMaW5lW2kgLSBieXRlc1BlclBpeGVsXSA+PiAxKSkgJiAweGZmO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmb3IgKDsgaSA8IGJ5dGVzUGVyUGl4ZWw7IGkrKykge1xuICAgICAgICAgICAgbmV3TGluZVtpXSA9IChjdXJyZW50TGluZVtpXSArIChwcmV2TGluZVtpXSA+PiAxKSkgJiAweGZmO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoOyBpIDwgYnl0ZXNQZXJMaW5lOyBpKyspIHtcbiAgICAgICAgICAgIG5ld0xpbmVbaV0gPVxuICAgICAgICAgICAgICAgIChjdXJyZW50TGluZVtpXSArICgobmV3TGluZVtpIC0gYnl0ZXNQZXJQaXhlbF0gKyBwcmV2TGluZVtpXSkgPj4gMSkpICZcbiAgICAgICAgICAgICAgICAgICAgMHhmZjtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiB1bmZpbHRlclBhZXRoKGN1cnJlbnRMaW5lLCBuZXdMaW5lLCBwcmV2TGluZSwgYnl0ZXNQZXJMaW5lLCBieXRlc1BlclBpeGVsKSB7XG4gICAgbGV0IGkgPSAwO1xuICAgIGlmIChwcmV2TGluZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZm9yICg7IGkgPCBieXRlc1BlclBpeGVsOyBpKyspIHtcbiAgICAgICAgICAgIG5ld0xpbmVbaV0gPSBjdXJyZW50TGluZVtpXTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKDsgaSA8IGJ5dGVzUGVyTGluZTsgaSsrKSB7XG4gICAgICAgICAgICBuZXdMaW5lW2ldID0gKGN1cnJlbnRMaW5lW2ldICsgbmV3TGluZVtpIC0gYnl0ZXNQZXJQaXhlbF0pICYgMHhmZjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZm9yICg7IGkgPCBieXRlc1BlclBpeGVsOyBpKyspIHtcbiAgICAgICAgICAgIG5ld0xpbmVbaV0gPSAoY3VycmVudExpbmVbaV0gKyBwcmV2TGluZVtpXSkgJiAweGZmO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoOyBpIDwgYnl0ZXNQZXJMaW5lOyBpKyspIHtcbiAgICAgICAgICAgIG5ld0xpbmVbaV0gPVxuICAgICAgICAgICAgICAgIChjdXJyZW50TGluZVtpXSArXG4gICAgICAgICAgICAgICAgICAgIHBhZXRoUHJlZGljdG9yKG5ld0xpbmVbaSAtIGJ5dGVzUGVyUGl4ZWxdLCBwcmV2TGluZVtpXSwgcHJldkxpbmVbaSAtIGJ5dGVzUGVyUGl4ZWxdKSkgJlxuICAgICAgICAgICAgICAgICAgICAweGZmO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gcGFldGhQcmVkaWN0b3IoYSwgYiwgYykge1xuICAgIGNvbnN0IHAgPSBhICsgYiAtIGM7XG4gICAgY29uc3QgcGEgPSBNYXRoLmFicyhwIC0gYSk7XG4gICAgY29uc3QgcGIgPSBNYXRoLmFicyhwIC0gYik7XG4gICAgY29uc3QgcGMgPSBNYXRoLmFicyhwIC0gYyk7XG4gICAgaWYgKHBhIDw9IHBiICYmIHBhIDw9IHBjKVxuICAgICAgICByZXR1cm4gYTtcbiAgICBlbHNlIGlmIChwYiA8PSBwYylcbiAgICAgICAgcmV0dXJuIGI7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gYztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVuZmlsdGVyLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/unfilter.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/fast-png/lib-esm/index.js":
/*!************************************************!*\
!*** ./node_modules/fast-png/lib-esm/index.js ***!
\************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ResolutionUnitSpecifier: function() { return /* reexport safe */ _types__WEBPACK_IMPORTED_MODULE_3__.ResolutionUnitSpecifier; },\n/* harmony export */ convertIndexedToRgb: function() { return /* reexport safe */ _convertIndexedToRgb__WEBPACK_IMPORTED_MODULE_4__.convertIndexedToRgb; },\n/* harmony export */ decode: function() { return /* binding */ decodePng; },\n/* harmony export */ decodeApng: function() { return /* binding */ decodeApng; },\n/* harmony export */ encode: function() { return /* binding */ encodePng; },\n/* harmony export */ hasPngSignature: function() { return /* reexport safe */ _helpers_signature__WEBPACK_IMPORTED_MODULE_2__.hasPngSignature; }\n/* harmony export */ });\n/* harmony import */ var _PngDecoder__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./PngDecoder */ \"(app-pages-browser)/./node_modules/fast-png/lib-esm/PngDecoder.js\");\n/* harmony import */ var _PngEncoder__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./PngEncoder */ \"(app-pages-browser)/./node_modules/fast-png/lib-esm/PngEncoder.js\");\n/* harmony import */ var _helpers_signature__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers/signature */ \"(app-pages-browser)/./node_modules/fast-png/lib-esm/helpers/signature.js\");\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./types */ \"(app-pages-browser)/./node_modules/fast-png/lib-esm/types.js\");\n/* harmony import */ var _convertIndexedToRgb__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./convertIndexedToRgb */ \"(app-pages-browser)/./node_modules/fast-png/lib-esm/convertIndexedToRgb.js\");\n\n\n\n\nfunction decodePng(data, options) {\n const decoder = new _PngDecoder__WEBPACK_IMPORTED_MODULE_0__[\"default\"](data, options);\n return decoder.decode();\n}\nfunction encodePng(png, options) {\n const encoder = new _PngEncoder__WEBPACK_IMPORTED_MODULE_1__[\"default\"](png, options);\n return encoder.encode();\n}\nfunction decodeApng(data, options) {\n const decoder = new _PngDecoder__WEBPACK_IMPORTED_MODULE_0__[\"default\"](data, options);\n return decoder.decodeApng();\n}\n\n\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9mYXN0LXBuZy9saWItZXNtL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQXNDO0FBQ0E7QUFDZ0I7QUFDOUI7QUFDeEI7QUFDQSx3QkFBd0IsbURBQVU7QUFDbEM7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLG1EQUFVO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixtREFBVTtBQUNsQztBQUNBO0FBQ2dFO0FBQ0o7QUFDNUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2Zhc3QtcG5nL2xpYi1lc20vaW5kZXguanM/NzIxZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUG5nRGVjb2RlciBmcm9tICcuL1BuZ0RlY29kZXInO1xuaW1wb3J0IFBuZ0VuY29kZXIgZnJvbSAnLi9QbmdFbmNvZGVyJztcbmV4cG9ydCB7IGhhc1BuZ1NpZ25hdHVyZSB9IGZyb20gJy4vaGVscGVycy9zaWduYXR1cmUnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5mdW5jdGlvbiBkZWNvZGVQbmcoZGF0YSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgUG5nRGVjb2RlcihkYXRhLCBvcHRpb25zKTtcbiAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGUoKTtcbn1cbmZ1bmN0aW9uIGVuY29kZVBuZyhwbmcsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBlbmNvZGVyID0gbmV3IFBuZ0VuY29kZXIocG5nLCBvcHRpb25zKTtcbiAgICByZXR1cm4gZW5jb2Rlci5lbmNvZGUoKTtcbn1cbmZ1bmN0aW9uIGRlY29kZUFwbmcoZGF0YSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgUG5nRGVjb2RlcihkYXRhLCBvcHRpb25zKTtcbiAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVBcG5nKCk7XG59XG5leHBvcnQgeyBkZWNvZGVQbmcgYXMgZGVjb2RlLCBlbmNvZGVQbmcgYXMgZW5jb2RlLCBkZWNvZGVBcG5nIH07XG5leHBvcnQgeyBjb252ZXJ0SW5kZXhlZFRvUmdiIH0gZnJvbSAnLi9jb252ZXJ0SW5kZXhlZFRvUmdiJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/fast-png/lib-esm/index.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/fast-png/lib-esm/internalTypes.js":
/*!********************************************************!*\
!*** ./node_modules/fast-png/lib-esm/internalTypes.js ***!
\********************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BlendOpType: function() { return /* binding */ BlendOpType; },\n/* harmony export */ ColorType: function() { return /* binding */ ColorType; },\n/* harmony export */ CompressionMethod: function() { return /* binding */ CompressionMethod; },\n/* harmony export */ DisposeOpType: function() { return /* binding */ DisposeOpType; },\n/* harmony export */ FilterMethod: function() { return /* binding */ FilterMethod; },\n/* harmony export */ InterlaceMethod: function() { return /* binding */ InterlaceMethod; }\n/* harmony export */ });\nconst ColorType = {\n UNKNOWN: -1,\n GREYSCALE: 0,\n TRUECOLOUR: 2,\n INDEXED_COLOUR: 3,\n GREYSCALE_ALPHA: 4,\n TRUECOLOUR_ALPHA: 6,\n};\nconst CompressionMethod = {\n UNKNOWN: -1,\n DEFLATE: 0,\n};\nconst FilterMethod = {\n UNKNOWN: -1,\n ADAPTIVE: 0,\n};\nconst InterlaceMethod = {\n UNKNOWN: -1,\n NO_INTERLACE: 0,\n ADAM7: 1,\n};\nconst DisposeOpType = {\n NONE: 0,\n BACKGROUND: 1,\n PREVIOUS: 2,\n};\nconst BlendOpType = {\n SOURCE: 0,\n OVER: 1,\n};\n//# sourceMappingURL=internalTypes.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9mYXN0LXBuZy9saWItZXNtL2ludGVybmFsVHlwZXMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2Zhc3QtcG5nL2xpYi1lc20vaW50ZXJuYWxUeXBlcy5qcz8zNDAwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBDb2xvclR5cGUgPSB7XG4gICAgVU5LTk9XTjogLTEsXG4gICAgR1JFWVNDQUxFOiAwLFxuICAgIFRSVUVDT0xPVVI6IDIsXG4gICAgSU5ERVhFRF9DT0xPVVI6IDMsXG4gICAgR1JFWVNDQUxFX0FMUEhBOiA0LFxuICAgIFRSVUVDT0xPVVJfQUxQSEE6IDYsXG59O1xuZXhwb3J0IGNvbnN0IENvbXByZXNzaW9uTWV0aG9kID0ge1xuICAgIFVOS05PV046IC0xLFxuICAgIERFRkxBVEU6IDAsXG59O1xuZXhwb3J0IGNvbnN0IEZpbHRlck1ldGhvZCA9IHtcbiAgICBVTktOT1dOOiAtMSxcbiAgICBBREFQVElWRTogMCxcbn07XG5leHBvcnQgY29uc3QgSW50ZXJsYWNlTWV0aG9kID0ge1xuICAgIFVOS05PV046IC0xLFxuICAgIE5PX0lOVEVSTEFDRTogMCxcbiAgICBBREFNNzogMSxcbn07XG5leHBvcnQgY29uc3QgRGlzcG9zZU9wVHlwZSA9IHtcbiAgICBOT05FOiAwLFxuICAgIEJBQ0tHUk9VTkQ6IDEsXG4gICAgUFJFVklPVVM6IDIsXG59O1xuZXhwb3J0IGNvbnN0IEJsZW5kT3BUeXBlID0ge1xuICAgIFNPVVJDRTogMCxcbiAgICBPVkVSOiAxLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVybmFsVHlwZXMuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/fast-png/lib-esm/internalTypes.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/fast-png/lib-esm/types.js":
/*!************************************************!*\
!*** ./node_modules/fast-png/lib-esm/types.js ***!
\************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ResolutionUnitSpecifier: function() { return /* binding */ ResolutionUnitSpecifier; }\n/* harmony export */ });\nvar ResolutionUnitSpecifier;\n(function (ResolutionUnitSpecifier) {\n /**\n * Unit is unknown\n */\n ResolutionUnitSpecifier[ResolutionUnitSpecifier[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n /**\n * Unit is the metre\n */\n ResolutionUnitSpecifier[ResolutionUnitSpecifier[\"METRE\"] = 1] = \"METRE\";\n})(ResolutionUnitSpecifier || (ResolutionUnitSpecifier = {}));\n//# sourceMappingURL=types.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9mYXN0LXBuZy9saWItZXNtL3R5cGVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsMERBQTBEO0FBQzNEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9mYXN0LXBuZy9saWItZXNtL3R5cGVzLmpzPzI3MTAiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHZhciBSZXNvbHV0aW9uVW5pdFNwZWNpZmllcjtcbihmdW5jdGlvbiAoUmVzb2x1dGlvblVuaXRTcGVjaWZpZXIpIHtcbiAgICAvKipcbiAgICAgKiBVbml0IGlzIHVua25vd25cbiAgICAgKi9cbiAgICBSZXNvbHV0aW9uVW5pdFNwZWNpZmllcltSZXNvbHV0aW9uVW5pdFNwZWNpZmllcltcIlVOS05PV05cIl0gPSAwXSA9IFwiVU5LTk9XTlwiO1xuICAgIC8qKlxuICAgICAqIFVuaXQgaXMgdGhlIG1ldHJlXG4gICAgICovXG4gICAgUmVzb2x1dGlvblVuaXRTcGVjaWZpZXJbUmVzb2x1dGlvblVuaXRTcGVjaWZpZXJbXCJNRVRSRVwiXSA9IDFdID0gXCJNRVRSRVwiO1xufSkoUmVzb2x1dGlvblVuaXRTcGVjaWZpZXIgfHwgKFJlc29sdXRpb25Vbml0U3BlY2lmaWVyID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/fast-png/lib-esm/types.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/fflate/esm/browser.js":
/*!********************************************!*\
!*** ./node_modules/fflate/esm/browser.js ***!
\********************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AsyncCompress: function() { return /* binding */ AsyncGzip; },\n/* harmony export */ AsyncDecompress: function() { return /* binding */ AsyncDecompress; },\n/* harmony export */ AsyncDeflate: function() { return /* binding */ AsyncDeflate; },\n/* harmony export */ AsyncGunzip: function() { return /* binding */ AsyncGunzip; },\n/* harmony export */ AsyncGzip: function() { return /* binding */ AsyncGzip; },\n/* harmony export */ AsyncInflate: function() { return /* binding */ AsyncInflate; },\n/* harmony export */ AsyncUnzipInflate: function() { return /* binding */ AsyncUnzipInflate; },\n/* harmony export */ AsyncUnzlib: function() { return /* binding */ AsyncUnzlib; },\n/* harmony export */ AsyncZipDeflate: function() { return /* binding */ AsyncZipDeflate; },\n/* harmony export */ AsyncZlib: function() { return /* binding */ AsyncZlib; },\n/* harmony export */ Compress: function() { return /* binding */ Gzip; },\n/* harmony export */ DecodeUTF8: function() { return /* binding */ DecodeUTF8; },\n/* harmony export */ Decompress: function() { return /* binding */ Decompress; },\n/* harmony export */ Deflate: function() { return /* binding */ Deflate; },\n/* harmony export */ EncodeUTF8: function() { return /* binding */ EncodeUTF8; },\n/* harmony export */ FlateErrorCode: function() { return /* binding */ FlateErrorCode; },\n/* harmony export */ Gunzip: function() { return /* binding */ Gunzip; },\n/* harmony export */ Gzip: function() { return /* binding */ Gzip; },\n/* harmony export */ Inflate: function() { return /* binding */ Inflate; },\n/* harmony export */ Unzip: function() { return /* binding */ Unzip; },\n/* harmony export */ UnzipInflate: function() { return /* binding */ UnzipInflate; },\n/* harmony export */ UnzipPassThrough: function() { return /* binding */ UnzipPassThrough; },\n/* harmony export */ Unzlib: function() { return /* binding */ Unzlib; },\n/* harmony export */ Zip: function() { return /* binding */ Zip; },\n/* harmony export */ ZipDeflate: function() { return /* binding */ ZipDeflate; },\n/* harmony export */ ZipPassThrough: function() { return /* binding */ ZipPassThrough; },\n/* harmony export */ Zlib: function() { return /* binding */ Zlib; },\n/* harmony export */ compress: function() { return /* binding */ gzip; },\n/* harmony export */ compressSync: function() { return /* binding */ gzipSync; },\n/* harmony export */ decompress: function() { return /* binding */ decompress; },\n/* harmony export */ decompressSync: function() { return /* binding */ decompressSync; },\n/* harmony export */ deflate: function() { return /* binding */ deflate; },\n/* harmony export */ deflateSync: function() { return /* binding */ deflateSync; },\n/* harmony export */ gunzip: function() { return /* binding */ gunzip; },\n/* harmony export */ gunzipSync: function() { return /* binding */ gunzipSync; },\n/* harmony export */ gzip: function() { return /* binding */ gzip; },\n/* harmony export */ gzipSync: function() { return /* binding */ gzipSync; },\n/* harmony export */ inflate: function() { return /* binding */ inflate; },\n/* harmony export */ inflateSync: function() { return /* binding */ inflateSync; },\n/* harmony export */ strFromU8: function() { return /* binding */ strFromU8; },\n/* harmony export */ strToU8: function() { return /* binding */ strToU8; },\n/* harmony export */ unzip: function() { return /* binding */ unzip; },\n/* harmony export */ unzipSync: function() { return /* binding */ unzipSync; },\n/* harmony export */ unzlib: function() { return /* binding */ unzlib; },\n/* harmony export */ unzlibSync: function() { return /* binding */ unzlibSync; },\n/* harmony export */ zip: function() { return /* binding */ zip; },\n/* harmony export */ zipSync: function() { return /* binding */ zipSync; },\n/* harmony export */ zlib: function() { return /* binding */ zlib; },\n/* harmony export */ zlibSync: function() { return /* binding */ zlibSync; }\n/* harmony export */ });\n// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Some of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar ch2 = {};\nvar wk = (function (c, id, msg, transfer, cb) {\n var w = new Worker(ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([\n c + ';addEventListener(\"error\",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'\n ], { type: 'text/javascript' }))));\n w.onmessage = function (e) {\n var d = e.data, ed = d.$e$;\n if (ed) {\n var err = new Error(ed[0]);\n err['code'] = ed[1];\n err.stack = ed[2];\n cb(err, null);\n }\n else\n cb(null, d);\n };\n w.postMessage(msg, transfer);\n return w;\n});\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new i32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return { b: b, r: r };\n};\nvar _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b.b, revfd = _b.r;\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i) {\n if (cd[i])\n ++l[cd[i] - 1];\n }\n // u16 \"map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 1; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);\n }\n }\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p + 7) / 8) | 0; };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n return new u8(v.subarray(s, e));\n};\n/**\n * Codes for errors generated within this library\n */\nvar FlateErrorCode = {\n UnexpectedEOF: 0,\n InvalidBlockType: 1,\n InvalidLengthLiteral: 2,\n InvalidDistance: 3,\n StreamFinished: 4,\n NoStreamHandler: 5,\n InvalidHeader: 6,\n NoCallback: 7,\n InvalidUTF8: 8,\n ExtraFieldTooLong: 9,\n InvalidDate: 10,\n FilenameTooLong: 11,\n StreamFinishing: 12,\n InvalidZipData: 13,\n UnknownCompressionMethod: 14\n};\n// error codes\nvar ec = [\n 'unexpected EOF',\n 'invalid block type',\n 'invalid length/literal',\n 'invalid distance',\n 'stream finished',\n 'no stream handler',\n , // determined by compression function\n 'no callback',\n 'invalid UTF-8 data',\n 'extra field too long',\n 'date not in range 1980-2099',\n 'filename too long',\n 'stream finishing',\n 'invalid zip data'\n // determined by unknown compression method\n];\n;\nvar err = function (ind, msg, nt) {\n var e = new Error(msg || ec[ind]);\n e.code = ind;\n if (Error.captureStackTrace)\n Error.captureStackTrace(e, err);\n if (!nt)\n throw e;\n return e;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, st, buf, dict) {\n // source length dict length\n var sl = dat.length, dl = dict ? dict.length : 0;\n if (!sl || st.f && !st.l)\n return buf || new u8(0);\n var noBuf = !buf;\n // have to estimate size\n var resize = noBuf || st.i != 2;\n // no state\n var noSt = st.i;\n // Assumes roughly 33% compression ratio average\n if (noBuf)\n buf = new u8(sl * 3);\n // ensure buffer can fit at least l elements\n var cbuf = function (l) {\n var bl = buf.length;\n // need to increase size to fit\n if (l > bl) {\n // Double or set to necessary, whichever is greater\n var nbuf = new u8(Math.max(bl * 2, l));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n // last chunk bitpos bytes\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n // total bits\n var tbts = sl * 8;\n do {\n if (!lm) {\n // BFINAL - this is only 1 when last chunk is next\n final = bits(dat, pos, 1);\n // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n // go to end of byte boundary\n var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n if (t > sl) {\n if (noSt)\n err(0);\n break;\n }\n // ensure size\n if (resize)\n cbuf(bt + l);\n // Copy over uncompressed data\n buf.set(dat.subarray(s, t), bt);\n // Get new bitpos, update byte count\n st.b = bt += l, st.p = pos = t * 8, st.f = final;\n continue;\n }\n else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n // literal lengths\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n // length+distance tree\n var ldt = new u8(tl);\n // code length tree\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n // use index map to get real code\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n // code lengths bits\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n // code lengths map\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n // bits read\n pos += r & 15;\n // symbol\n var s = r >> 4;\n // code length to copy\n if (s < 16) {\n ldt[i++] = s;\n }\n else {\n // copy count\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n // length tree distance tree\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n // max length bits\n lbt = max(lt);\n // max dist bits\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n }\n else\n err(1);\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n }\n // Make sure the buffer can hold this + the largest possible addition\n // Maximum chunk size (practically, theoretically infinite) is 2^17\n if (resize)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (;; lpos = pos) {\n // bits read, code\n var c = lm[bits16(dat, pos) & lms], sym = c >> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (!c)\n err(2);\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lpos = pos, lm = null;\n break;\n }\n else {\n var add = sym - 254;\n // no extra bits needed if less\n if (sym > 264) {\n // index\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n // dist\n var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;\n if (!d)\n err(3);\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (resize)\n cbuf(bt + 131072);\n var end = bt + add;\n if (bt < dt) {\n var shift = dl - dt, dend = Math.min(dt, end);\n if (shift + bt < 0)\n err(3);\n for (; bt < dend; ++bt)\n buf[bt] = dict[shift + bt];\n }\n for (; bt < end; ++bt)\n buf[bt] = buf[bt - dt];\n }\n }\n st.l = lm, st.p = lpos, st.b = bt, st.f = final;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n // don't reallocate for streams or user buffers\n return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n d[o + 2] |= v >> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return { t: et, l: 0 };\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return { t: v, l: 1 };\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return { t: new u8(tr), l: mbt };\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return { c: cl.subarray(0, cli), n: s };\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a.t, mlb = _a.l;\n var _b = hTree(df, 15), ddt = _b.t, mdb = _b.l;\n var _c = lc(dlt), lclt = _c.c, nlc = _c.n;\n var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n ++lcfreq[lclt[i] & 31];\n for (var i = 0; i < lcdt.length; ++i)\n ++lcfreq[lcdt[i] & 31];\n var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];\n if (bs >= 0 && flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >> 5) & 127), p += clct[i] >> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n var sym = syms[i];\n if (sym > 255) {\n var len = (sym >> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (sym >> 23) & 31), p += fleb[len];\n var dst = sym & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (sym >> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[sym]), p += ll[sym];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, st) {\n var s = st.z || dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var lst = st.l;\n var pos = (st.r || 0) & 7;\n if (lvl) {\n if (pos)\n w[0] = st.r >> 3;\n var opt = deo[lvl - 1];\n var n = opt >> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new i32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx blkpos\n var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0;\n for (; i + 2 < s; ++i) {\n // hash value\n var hv = hsh(i);\n // index mod 32768 previous index mod\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && (rem > 423 || !lst)) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j & 32767;\n var pti = prev[ti];\n var cd = ti - pti & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one int32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n for (i = Math.max(i, wi); i < s; ++i) {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst) {\n st.r = (pos & 7) | w[(pos / 8) | 0] << 3;\n // shft(pos) now 1 less if pos & 7 != 0\n pos -= 7;\n st.h = head, st.p = prev, st.i = i, st.w = wi;\n }\n }\n else {\n for (var i = st.w || 0; i < s + lst; i += 65535) {\n // end\n var e = i + 65535;\n if (e >= s) {\n // write final block\n w[(pos / 8) | 0] = lst;\n e = s;\n }\n pos = wfblk(w, pos + 1, dat.subarray(i, e));\n }\n st.i = s;\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new Int32Array(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && -306674912) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = -1;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return ~c; }\n };\n};\n// Adler32\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n // closures have awful performance\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i != l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | (a & 0xFF00) << 8 | (b & 255) << 8 | (b >> 8);\n }\n };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n if (!st) {\n st = { l: 1 };\n if (opt.dictionary) {\n var dict = opt.dictionary.subarray(-32768);\n var newDat = new u8(dict.length + dat.length);\n newDat.set(dict);\n newDat.set(dat, dict.length);\n dat = newDat;\n st.w = dict.length;\n }\n }\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? (st.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 20) : (12 + opt.mem), pre, post, st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n var dt = fn();\n var st = fn.toString();\n var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/\\s+/g, '').split(',');\n for (var i = 0; i < dt.length; ++i) {\n var v = dt[i], k = ks[i];\n if (typeof v == 'function') {\n fnStr += ';' + k + '=';\n var st_1 = v.toString();\n if (v.prototype) {\n // for global objects\n if (st_1.indexOf('[native code]') != -1) {\n var spInd = st_1.indexOf(' ', 8) + 1;\n fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n }\n else {\n fnStr += st_1;\n for (var t in v.prototype)\n fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n }\n }\n else\n fnStr += st_1;\n }\n else\n td[k] = v;\n }\n return fnStr;\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n var tl = [];\n for (var k in v) {\n if (v[k].buffer) {\n tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n }\n }\n return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n if (!ch[id]) {\n var fnStr = '', td_1 = {}, m = fns.length - 1;\n for (var i = 0; i < m; ++i)\n fnStr = wcln(fns[i], fnStr, td_1);\n ch[id] = { c: wcln(fns[m], fnStr, td_1), e: td_1 };\n }\n var td = mrg({}, ch[id].e);\n return wk(ch[id].c + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, i32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, ec, hMap, max, bits, bits16, shft, slc, err, inflt, inflateSync, pbf, gopt]; };\nvar bDflt = function () { return [u8, u16, i32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zls]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get opts\nvar gopt = function (o) { return o && {\n out: o.size && new u8(o.size),\n dictionary: o.dictionary\n}; };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n var w = wrkr(fns, init, id, function (err, dat) {\n w.terminate();\n cb(err, dat);\n });\n w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);\n return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n return function (ev) {\n if (ev.data[0]) {\n strm.push(ev.data[0], ev.data[1]);\n postMessage([ev.data[0].length]);\n }\n else\n strm.flush(ev.data[1]);\n };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id, flush, ext) {\n var t;\n var w = wrkr(fns, init, id, function (err, dat) {\n if (err)\n w.terminate(), strm.ondata.call(strm, err);\n else if (!Array.isArray(dat))\n ext(dat);\n else if (dat.length == 1) {\n strm.queuedSize -= dat[0];\n if (strm.ondrain)\n strm.ondrain(dat[0]);\n }\n else {\n if (dat[1])\n w.terminate();\n strm.ondata.call(strm, err, dat[0], dat[1]);\n }\n });\n w.postMessage(opts);\n strm.queuedSize = 0;\n strm.push = function (d, f) {\n if (!strm.ondata)\n err(5);\n if (t)\n strm.ondata(err(4, 0, 1), null, !!f);\n strm.queuedSize += d.length;\n // can fail for cross-realm Uint8Array, but ok - only a small performance penalty\n w.postMessage([d, t = f], d.buffer instanceof ArrayBuffer ? [d.buffer] : []);\n };\n strm.terminate = function () { w.terminate(); };\n if (flush) {\n strm.flush = function (sync) { w.postMessage([0, sync]); };\n }\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\n// read 8 bytes\nvar b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n var fn = o.filename;\n c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n if (o.mtime != 0)\n wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n if (fn) {\n c[3] = 8;\n for (var i = 0; i <= fn.length; ++i)\n c[i + 10] = fn.charCodeAt(i);\n }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n err(6, 'invalid gzip data');\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += (d[10] | d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n var l = d.length;\n return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0;\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + (o.filename ? o.filename.length + 1 : 0); };\n// zlib header\nvar zlh = function (c, o) {\n var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = (fl << 6) | (o.dictionary && 32);\n c[1] |= 31 - ((c[0] << 8) | c[1]) % 31;\n if (o.dictionary) {\n var h = adler();\n h.p(o.dictionary);\n wbytes(c, 2, h.d());\n }\n};\n// zlib start\nvar zls = function (d, dict) {\n if ((d[0] & 15) != 8 || (d[0] >> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n err(6, 'invalid zlib data');\n if ((d[1] >> 5 & 1) == +!dict)\n err(6, 'invalid zlib data: ' + (d[1] & 32 ? 'need' : 'unexpected') + ' dictionary');\n return (d[1] >> 3 & 4) + 2;\n};\nfunction StrmOpt(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n return opts;\n}\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n function Deflate(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n this.o = opts || {};\n this.s = { l: 0, i: 32768, w: 32768, z: 32768 };\n // Buffer length must always be 0 mod 32768 for index calculations to be correct when modifying head and prev\n // 98304 = 32768 (lookback) + 65536 (common chunk size)\n this.b = new u8(98304);\n if (this.o.dictionary) {\n var dict = this.o.dictionary.subarray(-32768);\n this.b.set(dict, 32768 - dict.length);\n this.s.i = 32768 - dict.length;\n }\n }\n Deflate.prototype.p = function (c, f) {\n this.ondata(dopt(c, this.o, 0, 0, this.s), f);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Deflate.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n var endLen = chunk.length + this.s.z;\n if (endLen > this.b.length) {\n if (endLen > 2 * this.b.length - 32768) {\n var newBuf = new u8(endLen & -32768);\n newBuf.set(this.b.subarray(0, this.s.z));\n this.b = newBuf;\n }\n var split = this.b.length - this.s.z;\n this.b.set(chunk.subarray(0, split), this.s.z);\n this.s.z = this.b.length;\n this.p(this.b, false);\n this.b.set(this.b.subarray(-32768));\n this.b.set(chunk.subarray(split), 32768);\n this.s.z = chunk.length - split + 32768;\n this.s.i = 32766, this.s.w = 32768;\n }\n else {\n this.b.set(chunk, this.s.z);\n this.s.z += chunk.length;\n }\n this.s.l = final & 1;\n if (this.s.z > this.s.w + 8191 || final) {\n this.p(this.b, final || false);\n this.s.w = this.s.i, this.s.i -= 2;\n }\n if (final) {\n // cleanup unneeded buffers/state to reduce memory usage\n this.s = this.o = {};\n this.b = et;\n }\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * deflated output for small inputs.\n * @param sync Whether to flush to a byte boundary. A sync flush takes 4-5\n * extra bytes, but guarantees all pushed data is immediately\n * decompressible. A separate DEFLATE stream may be concatenated\n * with the current output after a sync flush.\n */\n Deflate.prototype.flush = function (sync) {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n this.p(this.b, false);\n this.s.w = this.s.i, this.s.i -= 2;\n // could technically skip writing the type-0 block for (this.s.r & 7) == 0,\n // but the deterministic trailer (00 00 FF FF) is useful in some situations\n if (sync) {\n var c = new u8(6);\n c[0] = this.s.r >> 3;\n // write empty, non-final type-0 block\n var ep = wfblk(c, this.s.r, et);\n this.s.r = 0;\n this.ondata(c.subarray(0, ep >> 3), false);\n }\n };\n return Deflate;\n}());\n\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n function AsyncDeflate(opts, cb) {\n astrmify([\n bDflt,\n function () { return [astrm, Deflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Deflate(ev.data);\n onmessage = astrm(strm);\n }, 6, 1);\n }\n return AsyncDeflate;\n}());\n\nfunction deflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nfunction deflateSync(data, opts) {\n return dopt(data, opts || {}, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n function Inflate(opts, cb) {\n // no StrmOpt here to avoid adding to workerizer\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768);\n this.s = { i: 0, b: dict ? dict.length : 0 };\n this.o = new u8(32768);\n this.p = new u8(0);\n if (dict)\n this.o.set(dict);\n }\n Inflate.prototype.e = function (c) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n if (!this.p.length)\n this.p = c;\n else if (c.length) {\n var n = new u8(this.p.length + c.length);\n n.set(this.p), n.set(c, this.p.length), this.p = n;\n }\n };\n Inflate.prototype.c = function (final) {\n this.s.i = +(this.d = final || false);\n var bts = this.s.b;\n var dt = inflt(this.p, this.s, this.o);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;\n };\n /**\n * Pushes a chunk to be inflated\n * @param chunk The chunk to push\n * @param final Whether this is the final chunk\n */\n Inflate.prototype.push = function (chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate;\n}());\n\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n function AsyncInflate(opts, cb) {\n astrmify([\n bInflt,\n function () { return [astrm, Inflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Inflate(ev.data);\n onmessage = astrm(strm);\n }, 7, 0);\n }\n return AsyncInflate;\n}());\n\nfunction inflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt\n ], function (ev) { return pbf(inflateSync(ev.data[0], gopt(ev.data[1]))); }, 1, cb);\n}\nfunction inflateSync(data, opts) {\n return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n function Gzip(opts, cb) {\n this.c = crc();\n this.l = 0;\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gzip.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n this.l += chunk.length;\n Deflate.prototype.push.call(this, chunk, final);\n };\n Gzip.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, this.s);\n if (this.v)\n gzh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * GZIPped output for small inputs.\n * @param sync Whether to flush to a byte boundary. A sync flush takes 4-5\n * extra bytes, but guarantees all pushed data is immediately\n * decompressible.\n */\n Gzip.prototype.flush = function (sync) {\n Deflate.prototype.flush.call(this, sync);\n };\n return Gzip;\n}());\n\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n function AsyncGzip(opts, cb) {\n astrmify([\n bDflt,\n gze,\n function () { return [astrm, Deflate, Gzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gzip(ev.data);\n onmessage = astrm(strm);\n }, 8, 1);\n }\n return AsyncGzip;\n}());\n\nfunction gzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n gze,\n function () { return [gzipSync]; }\n ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nfunction gzipSync(data, opts) {\n if (!opts)\n opts = {};\n var c = crc(), l = data.length;\n c.p(data);\n var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming single or multi-member GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n function Gunzip(opts, cb) {\n this.v = 1;\n this.r = 0;\n Inflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GUNZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gunzip.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n this.r += chunk.length;\n if (this.v) {\n var p = this.p.subarray(this.v - 1);\n var s = p.length > 3 ? gzs(p) : 4;\n if (s > p.length) {\n if (!final)\n return;\n }\n else if (this.v > 1 && this.onmember) {\n this.onmember(this.r - p.length);\n }\n this.p = p.subarray(s), this.v = 0;\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, 0);\n // process concatenated GZIP\n if (this.s.f && !this.s.l) {\n this.v = shft(this.s.p) + 9;\n this.s = { i: 0 };\n this.o = new u8(0);\n this.push(new u8(0), final);\n }\n else if (final) {\n Inflate.prototype.c.call(this, final);\n }\n };\n return Gunzip;\n}());\n\n/**\n * Asynchronous streaming single or multi-member GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n function AsyncGunzip(opts, cb) {\n var _this = this;\n astrmify([\n bInflt,\n guze,\n function () { return [astrm, Inflate, Gunzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gunzip(ev.data);\n strm.onmember = function (offset) { return postMessage(offset); };\n onmessage = astrm(strm);\n }, 9, 0, function (offset) { return _this.onmember && _this.onmember(offset); });\n }\n return AsyncGunzip;\n}());\n\nfunction gunzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n guze,\n function () { return [gunzipSync]; }\n ], function (ev) { return pbf(gunzipSync(ev.data[0], ev.data[1])); }, 3, cb);\n}\nfunction gunzipSync(data, opts) {\n var st = gzs(data);\n if (st + 8 > data.length)\n err(6, 'invalid gzip data');\n return inflt(data.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data)), opts && opts.dictionary);\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n function Zlib(opts, cb) {\n this.c = adler();\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be zlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Zlib.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n Deflate.prototype.push.call(this, chunk, final);\n };\n Zlib.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && (this.o.dictionary ? 6 : 2), f && 4, this.s);\n if (this.v)\n zlh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 4, this.c.d());\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * zlibbed output for small inputs.\n * @param sync Whether to flush to a byte boundary. A sync flush takes 4-5\n * extra bytes, but guarantees all pushed data is immediately\n * decompressible.\n */\n Zlib.prototype.flush = function (sync) {\n Deflate.prototype.flush.call(this, sync);\n };\n return Zlib;\n}());\n\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n function AsyncZlib(opts, cb) {\n astrmify([\n bDflt,\n zle,\n function () { return [astrm, Deflate, Zlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Zlib(ev.data);\n onmessage = astrm(strm);\n }, 10, 1);\n }\n return AsyncZlib;\n}());\n\nfunction zlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n zle,\n function () { return [zlibSync]; }\n ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nfunction zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, opts.dictionary ? 6 : 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n function Unzlib(opts, cb) {\n Inflate.call(this, opts, cb);\n this.v = opts && opts.dictionary ? 2 : 1;\n }\n /**\n * Pushes a chunk to be unzlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzlib.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n if (this.p.length < 6 && !final)\n return;\n this.p = this.p.subarray(zls(this.p, this.v - 1)), this.v = 0;\n }\n if (final) {\n if (this.p.length < 4)\n err(6, 'invalid zlib data');\n this.p = this.p.subarray(0, -4);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Unzlib;\n}());\n\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n function AsyncUnzlib(opts, cb) {\n astrmify([\n bInflt,\n zule,\n function () { return [astrm, Inflate, Unzlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Unzlib(ev.data);\n onmessage = astrm(strm);\n }, 11, 0);\n }\n return AsyncUnzlib;\n}());\n\nfunction unzlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n zule,\n function () { return [unzlibSync]; }\n ], function (ev) { return pbf(unzlibSync(ev.data[0], gopt(ev.data[1]))); }, 5, cb);\n}\nfunction unzlibSync(data, opts) {\n return inflt(data.subarray(zls(data, opts && opts.dictionary), -4), { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\n\n\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n function Decompress(opts, cb) {\n this.o = StrmOpt.call(this, opts, cb) || {};\n this.G = Gunzip;\n this.I = Inflate;\n this.Z = Unzlib;\n }\n // init substream\n // overriden by AsyncDecompress\n Decompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (dat, final) {\n _this.ondata(dat, final);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Decompress.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (!this.s) {\n if (this.p && this.p.length) {\n var n = new u8(this.p.length + chunk.length);\n n.set(this.p), n.set(chunk, this.p.length);\n }\n else\n this.p = chunk;\n if (this.p.length > 2) {\n this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n ? new this.G(this.o)\n : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n ? new this.I(this.o)\n : new this.Z(this.o);\n this.i();\n this.s.push(this.p, final);\n this.p = null;\n }\n }\n else\n this.s.push(chunk, final);\n };\n return Decompress;\n}());\n\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n function AsyncDecompress(opts, cb) {\n Decompress.call(this, opts, cb);\n this.queuedSize = 0;\n this.G = AsyncGunzip;\n this.I = AsyncInflate;\n this.Z = AsyncUnzlib;\n }\n AsyncDecompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (err, dat, final) {\n _this.ondata(err, dat, final);\n };\n this.s.ondrain = function (size) {\n _this.queuedSize -= size;\n if (_this.ondrain)\n _this.ondrain(size);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncDecompress.prototype.push = function (chunk, final) {\n this.queuedSize += chunk.length;\n Decompress.prototype.push.call(this, chunk, final);\n };\n return AsyncDecompress;\n}());\n\nfunction decompress(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzip(data, opts, cb)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflate(data, opts, cb)\n : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nfunction decompressSync(data, opts) {\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzipSync(data, opts)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflateSync(data, opts)\n : unzlibSync(data, opts);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k, op = o;\n if (Array.isArray(val))\n op = mrg(o, val[1]), val = val[0];\n if (ArrayBuffer.isView(val))\n t[n] = [val, op];\n else {\n t[n += '/'] = [new u8(0), op];\n fltn(val, n, t, o);\n }\n }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n td.decode(et, { stream: true });\n tds = 1;\n}\ncatch (e) { }\n// decode UTF8\nvar dutf8 = function (d) {\n for (var r = '', i = 0;;) {\n var c = d[i++];\n var eb = (c > 127) + (c > 223) + (c > 239);\n if (i + eb > d.length)\n return { s: r, r: slc(d, i - 1) };\n if (!eb)\n r += String.fromCharCode(c);\n else if (eb == 3) {\n c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,\n r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n }\n else if (eb & 1)\n r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));\n else\n r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));\n }\n};\n/**\n * Streaming UTF-8 decoding\n */\nvar DecodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is decoded\n */\n function DecodeUTF8(cb) {\n this.ondata = cb;\n if (tds)\n this.t = new TextDecoder();\n else\n this.p = et;\n }\n /**\n * Pushes a chunk to be decoded from UTF-8 binary\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n DecodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n final = !!final;\n if (this.t) {\n this.ondata(this.t.decode(chunk, { stream: true }), final);\n if (final) {\n if (this.t.decode().length)\n err(8);\n this.t = null;\n }\n return;\n }\n if (!this.p)\n err(4);\n var dat = new u8(this.p.length + chunk.length);\n dat.set(this.p);\n dat.set(chunk, this.p.length);\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (final) {\n if (r.length)\n err(8);\n this.p = null;\n }\n else\n this.p = r;\n this.ondata(s, final);\n };\n return DecodeUTF8;\n}());\n\n/**\n * Streaming UTF-8 encoding\n */\nvar EncodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is encoded\n */\n function EncodeUTF8(cb) {\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be encoded to UTF-8\n * @param chunk The string data to push\n * @param final Whether this is the last chunk\n */\n EncodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n this.ondata(strToU8(chunk), this.d = final || false);\n };\n return EncodeUTF8;\n}());\n\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nfunction strToU8(str, latin1) {\n if (latin1) {\n var ar_1 = new u8(str.length);\n for (var i = 0; i < str.length; ++i)\n ar_1[i] = str.charCodeAt(i);\n return ar_1;\n }\n if (te)\n return te.encode(str);\n var l = str.length;\n var ar = new u8(str.length + (str.length >> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nfunction strFromU8(dat, latin1) {\n if (latin1) {\n var r = '';\n for (var i = 0; i < dat.length; i += 16384)\n r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));\n return r;\n }\n else if (td) {\n return td.decode(dat);\n }\n else {\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (r.length)\n err(8);\n return s;\n }\n}\n;\n// deflate bit flag\nvar dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n var fnl = b2(d, b + 28), efl = b2(d, b + 30), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl;\n var _a = z64hs(d, es, efl, z, b4(d, b + 20), b4(d, b + 24), b4(d, b + 42)), sc = _a[0], su = _a[1], off = _a[2];\n return [b2(d, b + 10), sc, su, fn, es + efl + b2(d, b + 32), off];\n};\n// read zip64 header sizes\nvar z64hs = function (d, b, l, z, sc, su, off) {\n var nsc = sc == 4294967295, nsu = su == 4294967295, noff = off == 4294967295, e = b + l;\n var nf = nsc + nsu + noff;\n if (z && nf) {\n for (; b + 4 < e; b += 4 + b2(d, b + 2)) {\n if (b2(d, b) == 1) {\n return [\n nsc ? b8(d, b + 4 + 8 * nsu) : sc,\n nsu ? b8(d, b + 4) : su,\n noff ? b8(d, b + 4 + 8 * (nsu + nsc)) : off,\n 1\n ];\n }\n }\n // z == 2 for unknown whether or not zip64\n if (z < 2)\n err(13);\n }\n return [sc, su, off, 0];\n};\n// extra field length\nvar exfl = function (ex) {\n var le = 0;\n if (ex) {\n for (var k in ex) {\n var l = ex[k].length;\n if (l > 65535)\n err(9);\n le += l + 4;\n }\n }\n return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n var fl = fn.length, ex = f.extra, col = co && co.length;\n var exl = exfl(ex);\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b++] = 20, d[b++] = f.os;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++] = (f.flag << 1) | (c < 0 && 8), d[b++] = u && 8;\n d[b++] = f.compression & 255, d[b++] = f.compression >> 8;\n var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n if (y < 0 || y > 119)\n err(10);\n wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >> 1)), b += 4;\n if (c != -1) {\n wbytes(d, b, f.crc);\n wbytes(d, b + 4, c < 0 ? -c - 2 : c);\n wbytes(d, b + 8, f.size);\n }\n wbytes(d, b + 12, fl);\n wbytes(d, b + 14, exl), b += 16;\n if (ce != null) {\n wbytes(d, b, col);\n wbytes(d, b + 6, f.attrs);\n wbytes(d, b + 10, ce), b += 14;\n }\n d.set(fn, b);\n b += fl;\n if (exl) {\n for (var k in ex) {\n var exf = ex[k], l = exf.length;\n wbytes(d, b, +k);\n wbytes(d, b + 2, l);\n d.set(exf, b + 4), b += 4 + l;\n }\n }\n if (col)\n d.set(co, b), b += col;\n return b;\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\n/**\n * A pass-through stream to keep data uncompressed in a ZIP archive.\n */\nvar ZipPassThrough = /*#__PURE__*/ (function () {\n /**\n * Creates a pass-through stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n */\n function ZipPassThrough(filename) {\n this.filename = filename;\n this.c = crc();\n this.size = 0;\n this.compression = 0;\n }\n /**\n * Processes a chunk and pushes to the output stream. You can override this\n * method in a subclass for custom behavior, but by default this passes\n * the data through. You must call this.ondata(err, chunk, final) at some\n * point in this method.\n * @param chunk The chunk to process\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.process = function (chunk, final) {\n this.ondata(null, chunk, final);\n };\n /**\n * Pushes a chunk to be added. If you are subclassing this with a custom\n * compression algorithm, note that you must push data from the source\n * file only, pre-compression.\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n this.c.p(chunk);\n this.size += chunk.length;\n if (final)\n this.crc = this.c.d();\n // we shouldn't really do this cast, but properly handling ArrayBufferLike\n // makes the API unergonomic with Buffer\n this.process(chunk, final || false);\n };\n return ZipPassThrough;\n}());\n\n// I don't extend because TypeScript extension adds 1kB of runtime bloat\n/**\n * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate\n * for better performance\n */\nvar ZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function ZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new Deflate(opts, function (dat, final) {\n _this.ondata(null, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n }\n ZipDeflate.prototype.process = function (chunk, final) {\n try {\n this.d.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return ZipDeflate;\n}());\n\n/**\n * Asynchronous streaming DEFLATE compression for ZIP archives\n */\nvar AsyncZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function AsyncZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new AsyncDeflate(opts, function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n this.terminate = this.d.terminate;\n }\n AsyncZipDeflate.prototype.process = function (chunk, final) {\n this.d.push(chunk, final);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return AsyncZipDeflate;\n}());\n\n// TODO: Better tree shaking\n/**\n * A zippable archive to which files can incrementally be added\n */\nvar Zip = /*#__PURE__*/ (function () {\n /**\n * Creates an empty ZIP archive to which files can be added\n * @param cb The callback to call whenever data for the generated ZIP archive\n * is available\n */\n function Zip(cb) {\n this.ondata = cb;\n this.u = [];\n this.d = 1;\n }\n /**\n * Adds a file to the ZIP archive\n * @param file The file stream to add\n */\n Zip.prototype.add = function (file) {\n var _this = this;\n if (!this.ondata)\n err(5);\n // finishing or finished\n if (this.d & 2)\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, false);\n else {\n var f = strToU8(file.filename), fl_1 = f.length;\n var com = file.comment, o = com && strToU8(com);\n var u = fl_1 != file.filename.length || (o && (com.length != o.length));\n var hl_1 = fl_1 + exfl(file.extra) + 30;\n if (fl_1 > 65535)\n this.ondata(err(11, 0, 1), null, false);\n var header = new u8(hl_1);\n wzh(header, 0, file, f, u, -1);\n var chks_1 = [header];\n var pAll_1 = function () {\n for (var _i = 0, chks_2 = chks_1; _i < chks_2.length; _i++) {\n var chk = chks_2[_i];\n _this.ondata(null, chk, false);\n }\n chks_1 = [];\n };\n var tr_1 = this.d;\n this.d = 0;\n var ind_1 = this.u.length;\n var uf_1 = mrg(file, {\n f: f,\n u: u,\n o: o,\n t: function () {\n if (file.terminate)\n file.terminate();\n },\n r: function () {\n pAll_1();\n if (tr_1) {\n var nxt = _this.u[ind_1 + 1];\n if (nxt)\n nxt.r();\n else\n _this.d = 1;\n }\n tr_1 = 1;\n }\n });\n var cl_1 = 0;\n file.ondata = function (err, dat, final) {\n if (err) {\n _this.ondata(err, dat, final);\n _this.terminate();\n }\n else {\n cl_1 += dat.length;\n chks_1.push(dat);\n if (final) {\n var dd = new u8(16);\n wbytes(dd, 0, 0x8074B50);\n wbytes(dd, 4, file.crc);\n wbytes(dd, 8, cl_1);\n wbytes(dd, 12, file.size);\n chks_1.push(dd);\n uf_1.c = cl_1, uf_1.b = hl_1 + cl_1 + 16, uf_1.crc = file.crc, uf_1.size = file.size;\n if (tr_1)\n uf_1.r();\n tr_1 = 1;\n }\n else if (tr_1)\n pAll_1();\n }\n };\n this.u.push(uf_1);\n }\n };\n /**\n * Ends the process of adding files and prepares to emit the final chunks.\n * This *must* be called after adding all desired files for the resulting\n * ZIP file to work properly.\n */\n Zip.prototype.end = function () {\n var _this = this;\n if (this.d & 2) {\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, true);\n return;\n }\n if (this.d)\n this.e();\n else\n this.u.push({\n r: function () {\n if (!(_this.d & 1))\n return;\n _this.u.splice(-1, 1);\n _this.e();\n },\n t: function () { }\n });\n this.d = 3;\n };\n Zip.prototype.e = function () {\n var bt = 0, l = 0, tl = 0;\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);\n }\n var out = new u8(tl + 22);\n for (var _b = 0, _c = this.u; _b < _c.length; _b++) {\n var f = _c[_b];\n wzh(out, bt, f, f.f, f.u, -f.c - 2, l, f.o);\n bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;\n }\n wzf(out, bt, this.u.length, tl, l);\n this.ondata(null, out, true);\n this.d = 2;\n };\n /**\n * A method to terminate any internal workers used by the stream. Subsequent\n * calls to add() will fail.\n */\n Zip.prototype.terminate = function () {\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n f.t();\n }\n this.d = 2;\n };\n return Zip;\n}());\n\nfunction zip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var r = {};\n fltn(data, '', r, opts);\n var k = Object.keys(r);\n var lft = k.length, o = 0, tot = 0;\n var slft = lft, files = new Array(lft);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var cbf = function () {\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n tot = 0;\n for (var i = 0; i < slft; ++i) {\n var f = files[i];\n try {\n var l = f.c.length;\n wzh(out, tot, f, f.f, f.u, l);\n var badd = 30 + f.f.length + exfl(f.extra);\n var loc = tot + badd;\n out.set(f.c, loc);\n wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;\n }\n catch (e) {\n return cbd(e, null);\n }\n }\n wzf(out, o, files.length, cdl, oe);\n cbd(null, out);\n };\n if (!lft)\n cbf();\n var _loop_1 = function (i) {\n var fn = k[i];\n var _a = r[fn], file = _a[0], p = _a[1];\n var c = crc(), size = file.length;\n c.p(file);\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n var compression = p.level == 0 ? 0 : 8;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n var l = d.length;\n files[i] = mrg(p, {\n size: size,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n compression: compression\n });\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n if (!--lft)\n cbf();\n }\n };\n if (s > 65535)\n cbl(err(11, 0, 1), null);\n if (!compression)\n cbl(null, file);\n else if (size < 160000) {\n try {\n cbl(null, deflateSync(file, p));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(deflate(file, p, cbl));\n };\n // Cannot use lft because it can decrease\n for (var i = 0; i < slft; ++i) {\n _loop_1(i);\n }\n return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nfunction zipSync(data, opts) {\n if (!opts)\n opts = {};\n var r = {};\n var files = [];\n fltn(data, '', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var compression = p.level == 0 ? 0 : 8;\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n if (s > 65535)\n err(11);\n var d = compression ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push(mrg(p, {\n size: file.length,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n o: o,\n compression: compression\n }));\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f, f.f, f.u, f.c.length);\n var badd = 30 + f.f.length + exfl(f.extra);\n out.set(f.c, f.o + badd);\n wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\n/**\n * Streaming pass-through decompression for ZIP archives\n */\nvar UnzipPassThrough = /*#__PURE__*/ (function () {\n function UnzipPassThrough() {\n }\n UnzipPassThrough.prototype.push = function (chunk, final) {\n // same as ZipPassThrough: cast to retain Buffer ergonomics\n this.ondata(null, chunk, final);\n };\n UnzipPassThrough.compression = 0;\n return UnzipPassThrough;\n}());\n\n/**\n * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for\n * better performance.\n */\nvar UnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function UnzipInflate() {\n var _this = this;\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n UnzipInflate.prototype.push = function (chunk, final) {\n try {\n this.i.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n UnzipInflate.compression = 8;\n return UnzipInflate;\n}());\n\n/**\n * Asynchronous streaming DEFLATE decompression for ZIP archives\n */\nvar AsyncUnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function AsyncUnzipInflate(_, sz) {\n var _this = this;\n if (sz < 320000) {\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n else {\n this.i = new AsyncInflate(function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.terminate = this.i.terminate;\n }\n }\n AsyncUnzipInflate.prototype.push = function (chunk, final) {\n if (this.i.terminate)\n chunk = slc(chunk, 0);\n this.i.push(chunk, final);\n };\n AsyncUnzipInflate.compression = 8;\n return AsyncUnzipInflate;\n}());\n\n/**\n * A ZIP archive decompression stream that emits files as they are discovered\n */\nvar Unzip = /*#__PURE__*/ (function () {\n /**\n * Creates a ZIP decompression stream\n * @param cb The callback to call whenever a file in the ZIP archive is found\n */\n function Unzip(cb) {\n this.onfile = cb;\n this.k = [];\n this.o = {\n 0: UnzipPassThrough\n };\n this.p = et;\n }\n /**\n * Pushes a chunk to be unzipped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzip.prototype.push = function (chunk, final) {\n var _this = this;\n if (!this.onfile)\n err(5);\n if (!this.p)\n err(4);\n if (this.c > 0) {\n var len = Math.min(this.c, chunk.length);\n var toAdd = chunk.subarray(0, len);\n this.c -= len;\n if (this.d)\n this.d.push(toAdd, !this.c);\n else\n this.k[0].push(toAdd);\n chunk = chunk.subarray(len);\n if (chunk.length)\n return this.push(chunk, final);\n }\n else {\n var f = 0, i = 0, is = void 0, buf = void 0;\n if (!this.p.length)\n buf = chunk;\n else if (!chunk.length)\n buf = this.p;\n else {\n buf = new u8(this.p.length + chunk.length);\n buf.set(this.p), buf.set(chunk, this.p.length);\n }\n var l = buf.length, oc = this.c, add = oc && this.d;\n var _loop_2 = function () {\n var sig = b4(buf, i);\n if (sig == 0x4034B50) {\n f = 1, is = i;\n this_1.d = null;\n this_1.c = 0;\n var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);\n if (l > i + 30 + fnl + es) {\n var chks_3 = [];\n this_1.k.unshift(chks_3);\n f = 2;\n var lsc = b4(buf, i + 18), lsu = b4(buf, i + 22);\n var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);\n var _a = z64hs(buf, i, es, 2, lsc, lsu, 0), sc_1 = _a[0], su_1 = _a[1], z64 = _a[3];\n if (dd)\n sc_1 = -1 - z64;\n i += es;\n this_1.c = sc_1;\n var d_1;\n var file_1 = {\n name: fn_1,\n compression: cmp_1,\n start: function () {\n if (!file_1.ondata)\n err(5);\n if (!sc_1)\n file_1.ondata(null, et, true);\n else {\n var ctr = _this.o[cmp_1];\n if (!ctr)\n file_1.ondata(err(14, 'unknown compression type ' + cmp_1, 1), null, false);\n d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);\n d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };\n for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) {\n var dat = chks_4[_i];\n d_1.push(dat, false);\n }\n if (_this.k[0] == chks_3 && _this.c)\n _this.d = d_1;\n else\n d_1.push(et, true);\n }\n },\n terminate: function () {\n if (d_1 && d_1.terminate)\n d_1.terminate();\n }\n };\n if (sc_1 >= 0)\n file_1.size = sc_1, file_1.originalSize = su_1;\n this_1.onfile(file_1);\n }\n return \"break\";\n }\n else if (oc) {\n if (sig == 0x8074B50) {\n is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;\n return \"break\";\n }\n else if (sig == 0x2014B50) {\n is = i -= 4, f = 3, this_1.c = 0;\n return \"break\";\n }\n }\n };\n var this_1 = this;\n for (; i < l - 4; ++i) {\n var state_1 = _loop_2();\n if (state_1 === \"break\")\n break;\n }\n this.p = et;\n if (oc < 0) {\n var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);\n if (add)\n add.push(dat, !!f);\n else\n this.k[+(f == 2)].push(dat);\n }\n if (f & 2)\n return this.push(buf.subarray(i), final);\n this.p = buf.subarray(i);\n }\n if (final) {\n if (this.c)\n err(13);\n this.p = null;\n }\n };\n /**\n * Registers a decoder with the stream, allowing for files compressed with\n * the compression type provided to be expanded correctly\n * @param decoder The decoder constructor\n */\n Unzip.prototype.register = function (decoder) {\n this.o[decoder.compression] = decoder;\n };\n return Unzip;\n}());\n\nvar mt = typeof queueMicrotask == 'function' ? queueMicrotask : typeof setTimeout == 'function' ? setTimeout : function (fn) { fn(); };\nfunction unzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var files = {};\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558) {\n cbd(err(13, 0, 1), null);\n return tAll;\n }\n }\n ;\n var lft = b2(data, e + 8);\n if (lft) {\n var c = lft;\n var o = b4(data, e + 16);\n var z = b4(data, e - 20) == 0x7064B50;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = lft = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n var _loop_3 = function (i) {\n var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n if (d)\n files[fn] = d;\n if (!--lft)\n cbd(null, files);\n }\n };\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_1\n })) {\n if (!c_1)\n cbl(null, slc(data, b, b + sc));\n else if (c_1 == 8) {\n var infl = data.subarray(b, b + sc);\n // Synchronously decompress under 512KB, or barely-compressed data\n if (su < 524288 || sc > 0.8 * su) {\n try {\n cbl(null, inflateSync(infl, { out: new u8(su) }));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(inflate(infl, { size: su }, cbl));\n }\n else\n cbl(err(14, 'unknown compression type ' + c_1, 1), null);\n }\n else\n cbl(null, null);\n };\n for (var i = 0; i < c; ++i) {\n _loop_3(i);\n }\n }\n else\n cbd(null, {});\n return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @param opts The ZIP extraction options\n * @returns The decompressed files\n */\nfunction unzipSync(data, opts) {\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558)\n err(13);\n }\n ;\n var c = b2(data, e + 8);\n if (!c)\n return {};\n var o = b4(data, e + 16);\n var z = b4(data, e - 20) == 0x7064B50;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n for (var i = 0; i < c; ++i) {\n var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_2\n })) {\n if (!c_2)\n files[fn] = slc(data, b, b + sc);\n else if (c_2 == 8)\n files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });\n else\n err(14, 'unknown compression type ' + c_2);\n }\n }\n return files;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9mZmxhdGUvZXNtL2Jyb3dzZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxxQ0FBcUMsVUFBVSxhQUFhLCtCQUErQixFQUFFO0FBQzNHLFNBQVMseUJBQXlCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QiwyQkFBMkIsY0FBYztBQUN6QztBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLDREQUE0RDtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixXQUFXO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLE9BQU87QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELFFBQVE7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixPQUFPO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsZ0JBQWdCLFNBQVM7QUFDekI7QUFDQSxrQkFBa0IsU0FBUztBQUMzQjtBQUNBLGtCQUFrQixTQUFTO0FBQzNCO0FBQ0Esa0JBQWtCLFNBQVM7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixjQUFjO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNrQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLENBQUM7QUFDdUI7QUFDakI7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsa0RBQWtEO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUCxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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UDtBQUNBO0FBQ0Esd0JBQXdCLGdCQUFnQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsV0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUN5QjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDcUI7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQzBCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELG9CQUFvQjtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsZ0JBQWdCO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLGdCQUFnQjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxnQkFBZ0I7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNjO0FBQ1I7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsV0FBVztBQUNwQztBQUNBLHFCQUFxQixXQUFXO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixVQUFVO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixVQUFVO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixrQkFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUMyQjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDdUI7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUM0QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhFQUE4RTtBQUM5RSxzRUFBc0Usb0JBQW9CO0FBQzFGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixXQUFXO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNnQjtBQUNqQiwrSEFBK0g7QUFDeEg7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLFdBQVc7QUFDcEM7QUFDQSxxQkFBcUIsV0FBVztBQUNoQztBQUNBLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELGlCQUFpQjtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsVUFBVTtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixPQUFPO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBLFdBQVcsMEJBQTBCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixPQUFPO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLG9FQUFvRSxpQkFBaUI7QUFDckY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9mZmxhdGUvZXNtL2Jyb3dzZXIuanM/MzIzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBERUZMQVRFIGlzIGEgY29tcGxleCBmb3JtYXQ7IHRvIHJlYWQgdGhpcyBjb2RlLCB5b3Ugc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBSRkMgZmlyc3Q6XG4vLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MVxuLy8gWW91IG1heSBhbHNvIHdpc2ggdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGd1aWRlIEkgbWFkZSBhYm91dCB0aGlzIHByb2dyYW06XG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS8xMDFhcnJvd3ovMjUzZjMxZWI1YWJjM2Q5Mjc1YWI5NDMwMDNmZmVjYWRcbi8vIFNvbWUgb2YgdGhlIGZvbGxvd2luZyBjb2RlIGlzIHNpbWlsYXIgdG8gdGhhdCBvZiBVWklQLmpzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3Bob3RvcGVhL1VaSVAuanNcbi8vIEhvd2V2ZXIsIHRoZSB2YXN0IG1ham9yaXR5IG9mIHRoZSBjb2RlYmFzZSBoYXMgZGl2ZXJnZWQgZnJvbSBVWklQLmpzIHRvIGluY3JlYXNlIHBlcmZvcm1hbmNlIGFuZCByZWR1Y2UgYnVuZGxlIHNpemUuXG4vLyBTb21ldGltZXMgMCB3aWxsIGFwcGVhciB3aGVyZSAtMSB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlLiBUaGlzIGlzIGJlY2F1c2UgdXNpbmcgYSB1aW50XG4vLyBpcyBiZXR0ZXIgZm9yIG1lbW9yeSBpbiBtb3N0IGVuZ2luZXMgKEkgKnRoaW5rKikuXG52YXIgY2gyID0ge307XG52YXIgd2sgPSAoZnVuY3Rpb24gKGMsIGlkLCBtc2csIHRyYW5zZmVyLCBjYikge1xuICAgIHZhciB3ID0gbmV3IFdvcmtlcihjaDJbaWRdIHx8IChjaDJbaWRdID0gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbXG4gICAgICAgIGMgKyAnO2FkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLGZ1bmN0aW9uKGUpe2U9ZS5lcnJvcjtwb3N0TWVzc2FnZSh7JGUkOltlLm1lc3NhZ2UsZS5jb2RlLGUuc3RhY2tdfSl9KSdcbiAgICBdLCB7IHR5cGU6ICd0ZXh0L2phdmFzY3JpcHQnIH0pKSkpO1xuICAgIHcub25tZXNzYWdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIGQgPSBlLmRhdGEsIGVkID0gZC4kZSQ7XG4gICAgICAgIGlmIChlZCkge1xuICAgICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihlZFswXSk7XG4gICAgICAgICAgICBlcnJbJ2NvZGUnXSA9IGVkWzFdO1xuICAgICAgICAgICAgZXJyLnN0YWNrID0gZWRbMl07XG4gICAgICAgICAgICBjYihlcnIsIG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGNiKG51bGwsIGQpO1xuICAgIH07XG4gICAgdy5wb3N0TWVzc2FnZShtc2csIHRyYW5zZmVyKTtcbiAgICByZXR1cm4gdztcbn0pO1xuXG4vLyBhbGlhc2VzIGZvciBzaG9ydGVyIGNvbXByZXNzZWQgY29kZSAobW9zdCBtaW5pZmVycyBkb24ndCBkbyB0aGlzKVxudmFyIHU4ID0gVWludDhBcnJheSwgdTE2ID0gVWludDE2QXJyYXksIGkzMiA9IEludDMyQXJyYXk7XG4vLyBmaXhlZCBsZW5ndGggZXh0cmEgYml0c1xudmFyIGZsZWIgPSBuZXcgdTgoWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDIsIDIsIDIsIDIsIDMsIDMsIDMsIDMsIDQsIDQsIDQsIDQsIDUsIDUsIDUsIDUsIDAsIC8qIHVudXNlZCAqLyAwLCAwLCAvKiBpbXBvc3NpYmxlICovIDBdKTtcbi8vIGZpeGVkIGRpc3RhbmNlIGV4dHJhIGJpdHNcbnZhciBmZGViID0gbmV3IHU4KFswLCAwLCAwLCAwLCAxLCAxLCAyLCAyLCAzLCAzLCA0LCA0LCA1LCA1LCA2LCA2LCA3LCA3LCA4LCA4LCA5LCA5LCAxMCwgMTAsIDExLCAxMSwgMTIsIDEyLCAxMywgMTMsIC8qIHVudXNlZCAqLyAwLCAwXSk7XG4vLyBjb2RlIGxlbmd0aCBpbmRleCBtYXBcbnZhciBjbGltID0gbmV3IHU4KFsxNiwgMTcsIDE4LCAwLCA4LCA3LCA5LCA2LCAxMCwgNSwgMTEsIDQsIDEyLCAzLCAxMywgMiwgMTQsIDEsIDE1XSk7XG4vLyBnZXQgYmFzZSwgcmV2ZXJzZSBpbmRleCBtYXAgZnJvbSBleHRyYSBiaXRzXG52YXIgZnJlYiA9IGZ1bmN0aW9uIChlYiwgc3RhcnQpIHtcbiAgICB2YXIgYiA9IG5ldyB1MTYoMzEpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzE7ICsraSkge1xuICAgICAgICBiW2ldID0gc3RhcnQgKz0gMSA8PCBlYltpIC0gMV07XG4gICAgfVxuICAgIC8vIG51bWJlcnMgaGVyZSBhcmUgYXQgbWF4IDE4IGJpdHNcbiAgICB2YXIgciA9IG5ldyBpMzIoYlszMF0pO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgMzA7ICsraSkge1xuICAgICAgICBmb3IgKHZhciBqID0gYltpXTsgaiA8IGJbaSArIDFdOyArK2opIHtcbiAgICAgICAgICAgIHJbal0gPSAoKGogLSBiW2ldKSA8PCA1KSB8IGk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgYjogYiwgcjogciB9O1xufTtcbnZhciBfYSA9IGZyZWIoZmxlYiwgMiksIGZsID0gX2EuYiwgcmV2ZmwgPSBfYS5yO1xuLy8gd2UgY2FuIGlnbm9yZSB0aGUgZmFjdCB0aGF0IHRoZSBvdGhlciBudW1iZXJzIGFyZSB3cm9uZzsgdGhleSBuZXZlciBoYXBwZW4gYW55d2F5XG5mbFsyOF0gPSAyNTgsIHJldmZsWzI1OF0gPSAyODtcbnZhciBfYiA9IGZyZWIoZmRlYiwgMCksIGZkID0gX2IuYiwgcmV2ZmQgPSBfYi5yO1xuLy8gbWFwIG9mIHZhbHVlIHRvIHJldmVyc2UgKGFzc3VtaW5nIDE2IGJpdHMpXG52YXIgcmV2ID0gbmV3IHUxNigzMjc2OCk7XG5mb3IgKHZhciBpID0gMDsgaSA8IDMyNzY4OyArK2kpIHtcbiAgICAvLyByZXZlcnNlIHRhYmxlIGFsZ29yaXRobSBmcm9tIFNPXG4gICAgdmFyIHggPSAoKGkgJiAweEFBQUEpID4+IDEpIHwgKChpICYgMHg1NTU1KSA8PCAxKTtcbiAgICB4ID0gKCh4ICYgMHhDQ0NDKSA+PiAyKSB8ICgoeCAmIDB4MzMzMykgPDwgMik7XG4gICAgeCA9ICgoeCAmIDB4RjBGMCkgPj4gNCkgfCAoKHggJiAweDBGMEYpIDw8IDQpO1xuICAgIHJldltpXSA9ICgoKHggJiAweEZGMDApID4+IDgpIHwgKCh4ICYgMHgwMEZGKSA8PCA4KSkgPj4gMTtcbn1cbi8vIGNyZWF0ZSBodWZmbWFuIHRyZWUgZnJvbSB1OCBcIm1hcFwiOiBpbmRleCAtPiBjb2RlIGxlbmd0aCBmb3IgY29kZSBpbmRleFxuLy8gbWIgKG1heCBiaXRzKSBtdXN0IGJlIGF0IG1vc3QgMTVcbi8vIFRPRE86IG9wdGltaXplL3NwbGl0IHVwP1xudmFyIGhNYXAgPSAoZnVuY3Rpb24gKGNkLCBtYiwgcikge1xuICAgIHZhciBzID0gY2QubGVuZ3RoO1xuICAgIC8vIGluZGV4XG4gICAgdmFyIGkgPSAwO1xuICAgIC8vIHUxNiBcIm1hcFwiOiBpbmRleCAtPiAjIG9mIGNvZGVzIHdpdGggYml0IGxlbmd0aCA9IGluZGV4XG4gICAgdmFyIGwgPSBuZXcgdTE2KG1iKTtcbiAgICAvLyBsZW5ndGggb2YgY2QgbXVzdCBiZSAyODggKHRvdGFsICMgb2YgY29kZXMpXG4gICAgZm9yICg7IGkgPCBzOyArK2kpIHtcbiAgICAgICAgaWYgKGNkW2ldKVxuICAgICAgICAgICAgKytsW2NkW2ldIC0gMV07XG4gICAgfVxuICAgIC8vIHUxNiBcIm1hcFwiOiBpbmRleCAtPiBtaW5pbXVtIGNvZGUgZm9yIGJpdCBsZW5ndGggPSBpbmRleFxuICAgIHZhciBsZSA9IG5ldyB1MTYobWIpO1xuICAgIGZvciAoaSA9IDE7IGkgPCBtYjsgKytpKSB7XG4gICAgICAgIGxlW2ldID0gKGxlW2kgLSAxXSArIGxbaSAtIDFdKSA8PCAxO1xuICAgIH1cbiAgICB2YXIgY287XG4gICAgaWYgKHIpIHtcbiAgICAgICAgLy8gdTE2IFwibWFwXCI6IGluZGV4IC0+IG51bWJlciBvZiBhY3R1YWwgYml0cywgc3ltYm9sIGZvciBjb2RlXG4gICAgICAgIGNvID0gbmV3IHUxNigxIDw8IG1iKTtcbiAgICAgICAgLy8gYml0cyB0byByZW1vdmUgZm9yIHJldmVyc2VyXG4gICAgICAgIHZhciBydmIgPSAxNSAtIG1iO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgczsgKytpKSB7XG4gICAgICAgICAgICAvLyBpZ25vcmUgMCBsZW5ndGhzXG4gICAgICAgICAgICBpZiAoY2RbaV0pIHtcbiAgICAgICAgICAgICAgICAvLyBudW0gZW5jb2RpbmcgYm90aCBzeW1ib2wgYW5kIGJpdHMgcmVhZFxuICAgICAgICAgICAgICAgIHZhciBzdiA9IChpIDw8IDQpIHwgY2RbaV07XG4gICAgICAgICAgICAgICAgLy8gZnJlZSBiaXRzXG4gICAgICAgICAgICAgICAgdmFyIHJfMSA9IG1iIC0gY2RbaV07XG4gICAgICAgICAgICAgICAgLy8gc3RhcnQgdmFsdWVcbiAgICAgICAgICAgICAgICB2YXIgdiA9IGxlW2NkW2ldIC0gMV0rKyA8PCByXzE7XG4gICAgICAgICAgICAgICAgLy8gbSBpcyBlbmQgdmFsdWVcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBtID0gdiB8ICgoMSA8PCByXzEpIC0gMSk7IHYgPD0gbTsgKyt2KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGV2ZXJ5IDE2IGJpdCB2YWx1ZSBzdGFydGluZyB3aXRoIHRoZSBjb2RlIHlpZWxkcyB0aGUgc2FtZSByZXN1bHRcbiAgICAgICAgICAgICAgICAgICAgY29bcmV2W3ZdID4+IHJ2Yl0gPSBzdjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvID0gbmV3IHUxNihzKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHM7ICsraSkge1xuICAgICAgICAgICAgaWYgKGNkW2ldKSB7XG4gICAgICAgICAgICAgICAgY29baV0gPSByZXZbbGVbY2RbaV0gLSAxXSsrXSA+PiAoMTUgLSBjZFtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvO1xufSk7XG4vLyBmaXhlZCBsZW5ndGggdHJlZVxudmFyIGZsdCA9IG5ldyB1OCgyODgpO1xuZm9yICh2YXIgaSA9IDA7IGkgPCAxNDQ7ICsraSlcbiAgICBmbHRbaV0gPSA4O1xuZm9yICh2YXIgaSA9IDE0NDsgaSA8IDI1NjsgKytpKVxuICAgIGZsdFtpXSA9IDk7XG5mb3IgKHZhciBpID0gMjU2OyBpIDwgMjgwOyArK2kpXG4gICAgZmx0W2ldID0gNztcbmZvciAodmFyIGkgPSAyODA7IGkgPCAyODg7ICsraSlcbiAgICBmbHRbaV0gPSA4O1xuLy8gZml4ZWQgZGlzdGFuY2UgdHJlZVxudmFyIGZkdCA9IG5ldyB1OCgzMik7XG5mb3IgKHZhciBpID0gMDsgaSA8IDMyOyArK2kpXG4gICAgZmR0W2ldID0gNTtcbi8vIGZpeGVkIGxlbmd0aCBtYXBcbnZhciBmbG0gPSAvKiNfX1BVUkVfXyovIGhNYXAoZmx0LCA5LCAwKSwgZmxybSA9IC8qI19fUFVSRV9fKi8gaE1hcChmbHQsIDksIDEpO1xuLy8gZml4ZWQgZGlzdGFuY2UgbWFwXG52YXIgZmRtID0gLyojX19QVVJFX18qLyBoTWFwKGZkdCwgNSwgMCksIGZkcm0gPSAvKiNfX1BVUkVfXyovIGhNYXAoZmR0LCA1LCAxKTtcbi8vIGZpbmQgbWF4IG9mIGFycmF5XG52YXIgbWF4ID0gZnVuY3Rpb24gKGEpIHtcbiAgICB2YXIgbSA9IGFbMF07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChhW2ldID4gbSlcbiAgICAgICAgICAgIG0gPSBhW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbTtcbn07XG4vLyByZWFkIGQsIHN0YXJ0aW5nIGF0IGJpdCBwIGFuZCBtYXNrIHdpdGggbVxudmFyIGJpdHMgPSBmdW5jdGlvbiAoZCwgcCwgbSkge1xuICAgIHZhciBvID0gKHAgLyA4KSB8IDA7XG4gICAgcmV0dXJuICgoZFtvXSB8IChkW28gKyAxXSA8PCA4KSkgPj4gKHAgJiA3KSkgJiBtO1xufTtcbi8vIHJlYWQgZCwgc3RhcnRpbmcgYXQgYml0IHAgY29udGludWluZyBmb3IgYXQgbGVhc3QgMTYgYml0c1xudmFyIGJpdHMxNiA9IGZ1bmN0aW9uIChkLCBwKSB7XG4gICAgdmFyIG8gPSAocCAvIDgpIHwgMDtcbiAgICByZXR1cm4gKChkW29dIHwgKGRbbyArIDFdIDw8IDgpIHwgKGRbbyArIDJdIDw8IDE2KSkgPj4gKHAgJiA3KSk7XG59O1xuLy8gZ2V0IGVuZCBvZiBieXRlXG52YXIgc2hmdCA9IGZ1bmN0aW9uIChwKSB7IHJldHVybiAoKHAgKyA3KSAvIDgpIHwgMDsgfTtcbi8vIHR5cGVkIGFycmF5IHNsaWNlIC0gYWxsb3dzIGdhcmJhZ2UgY29sbGVjdG9yIHRvIGZyZWUgb3JpZ2luYWwgcmVmZXJlbmNlLFxuLy8gd2hpbGUgYmVpbmcgbW9yZSBjb21wYXRpYmxlIHRoYW4gLnNsaWNlXG52YXIgc2xjID0gZnVuY3Rpb24gKHYsIHMsIGUpIHtcbiAgICBpZiAocyA9PSBudWxsIHx8IHMgPCAwKVxuICAgICAgICBzID0gMDtcbiAgICBpZiAoZSA9PSBudWxsIHx8IGUgPiB2Lmxlbmd0aClcbiAgICAgICAgZSA9IHYubGVuZ3RoO1xuICAgIC8vIGNhbid0IHVzZSAuY29uc3RydWN0b3IgaW4gY2FzZSB1c2VyLXN1cHBsaWVkXG4gICAgcmV0dXJuIG5ldyB1OCh2LnN1YmFycmF5KHMsIGUpKTtcbn07XG4vKipcbiAqIENvZGVzIGZvciBlcnJvcnMgZ2VuZXJhdGVkIHdpdGhpbiB0aGlzIGxpYnJhcnlcbiAqL1xuZXhwb3J0IHZhciBGbGF0ZUVycm9yQ29kZSA9IHtcbiAgICBVbmV4cGVjdGVkRU9GOiAwLFxuICAgIEludmFsaWRCbG9ja1R5cGU6IDEsXG4gICAgSW52YWxpZExlbmd0aExpdGVyYWw6IDIsXG4gICAgSW52YWxpZERpc3RhbmNlOiAzLFxuICAgIFN0cmVhbUZpbmlzaGVkOiA0LFxuICAgIE5vU3RyZWFtSGFuZGxlcjogNSxcbiAgICBJbnZhbGlkSGVhZGVyOiA2LFxuICAgIE5vQ2FsbGJhY2s6IDcsXG4gICAgSW52YWxpZFVURjg6IDgsXG4gICAgRXh0cmFGaWVsZFRvb0xvbmc6IDksXG4gICAgSW52YWxpZERhdGU6IDEwLFxuICAgIEZpbGVuYW1lVG9vTG9uZzogMTEsXG4gICAgU3RyZWFtRmluaXNoaW5nOiAxMixcbiAgICBJbnZhbGlkWmlwRGF0YTogMTMsXG4gICAgVW5rbm93bkNvbXByZXNzaW9uTWV0aG9kOiAxNFxufTtcbi8vIGVycm9yIGNvZGVzXG52YXIgZWMgPSBbXG4gICAgJ3VuZXhwZWN0ZWQgRU9GJyxcbiAgICAnaW52YWxpZCBibG9jayB0eXBlJyxcbiAgICAnaW52YWxpZCBsZW5ndGgvbGl0ZXJhbCcsXG4gICAgJ2ludmFsaWQgZGlzdGFuY2UnLFxuICAgICdzdHJlYW0gZmluaXNoZWQnLFxuICAgICdubyBzdHJlYW0gaGFuZGxlcicsXG4gICAgLCAvLyBkZXRlcm1pbmVkIGJ5IGNvbXByZXNzaW9uIGZ1bmN0aW9uXG4gICAgJ25vIGNhbGxiYWNrJyxcbiAgICAnaW52YWxpZCBVVEYtOCBkYXRhJyxcbiAgICAnZXh0cmEgZmllbGQgdG9vIGxvbmcnLFxuICAgICdkYXRlIG5vdCBpbiByYW5nZSAxOTgwLTIwOTknLFxuICAgICdmaWxlbmFtZSB0b28gbG9uZycsXG4gICAgJ3N0cmVhbSBmaW5pc2hpbmcnLFxuICAgICdpbnZhbGlkIHppcCBkYXRhJ1xuICAgIC8vIGRldGVybWluZWQgYnkgdW5rbm93biBjb21wcmVzc2lvbiBtZXRob2Rcbl07XG47XG52YXIgZXJyID0gZnVuY3Rpb24gKGluZCwgbXNnLCBudCkge1xuICAgIHZhciBlID0gbmV3IEVycm9yKG1zZyB8fCBlY1tpbmRdKTtcbiAgICBlLmNvZGUgPSBpbmQ7XG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKVxuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShlLCBlcnIpO1xuICAgIGlmICghbnQpXG4gICAgICAgIHRocm93IGU7XG4gICAgcmV0dXJuIGU7XG59O1xuLy8gZXhwYW5kcyByYXcgREVGTEFURSBkYXRhXG52YXIgaW5mbHQgPSBmdW5jdGlvbiAoZGF0LCBzdCwgYnVmLCBkaWN0KSB7XG4gICAgLy8gc291cmNlIGxlbmd0aCAgICAgICBkaWN0IGxlbmd0aFxuICAgIHZhciBzbCA9IGRhdC5sZW5ndGgsIGRsID0gZGljdCA/IGRpY3QubGVuZ3RoIDogMDtcbiAgICBpZiAoIXNsIHx8IHN0LmYgJiYgIXN0LmwpXG4gICAgICAgIHJldHVybiBidWYgfHwgbmV3IHU4KDApO1xuICAgIHZhciBub0J1ZiA9ICFidWY7XG4gICAgLy8gaGF2ZSB0byBlc3RpbWF0ZSBzaXplXG4gICAgdmFyIHJlc2l6ZSA9IG5vQnVmIHx8IHN0LmkgIT0gMjtcbiAgICAvLyBubyBzdGF0ZVxuICAgIHZhciBub1N0ID0gc3QuaTtcbiAgICAvLyBBc3N1bWVzIHJvdWdobHkgMzMlIGNvbXByZXNzaW9uIHJhdGlvIGF2ZXJhZ2VcbiAgICBpZiAobm9CdWYpXG4gICAgICAgIGJ1ZiA9IG5ldyB1OChzbCAqIDMpO1xuICAgIC8vIGVuc3VyZSBidWZmZXIgY2FuIGZpdCBhdCBsZWFzdCBsIGVsZW1lbnRzXG4gICAgdmFyIGNidWYgPSBmdW5jdGlvbiAobCkge1xuICAgICAgICB2YXIgYmwgPSBidWYubGVuZ3RoO1xuICAgICAgICAvLyBuZWVkIHRvIGluY3JlYXNlIHNpemUgdG8gZml0XG4gICAgICAgIGlmIChsID4gYmwpIHtcbiAgICAgICAgICAgIC8vIERvdWJsZSBvciBzZXQgdG8gbmVjZXNzYXJ5LCB3aGljaGV2ZXIgaXMgZ3JlYXRlclxuICAgICAgICAgICAgdmFyIG5idWYgPSBuZXcgdTgoTWF0aC5tYXgoYmwgKiAyLCBsKSk7XG4gICAgICAgICAgICBuYnVmLnNldChidWYpO1xuICAgICAgICAgICAgYnVmID0gbmJ1ZjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLy8gIGxhc3QgY2h1bmsgICAgICAgICBiaXRwb3MgICAgICAgICAgIGJ5dGVzXG4gICAgdmFyIGZpbmFsID0gc3QuZiB8fCAwLCBwb3MgPSBzdC5wIHx8IDAsIGJ0ID0gc3QuYiB8fCAwLCBsbSA9IHN0LmwsIGRtID0gc3QuZCwgbGJ0ID0gc3QubSwgZGJ0ID0gc3QubjtcbiAgICAvLyB0b3RhbCBiaXRzXG4gICAgdmFyIHRidHMgPSBzbCAqIDg7XG4gICAgZG8ge1xuICAgICAgICBpZiAoIWxtKSB7XG4gICAgICAgICAgICAvLyBCRklOQUwgLSB0aGlzIGlzIG9ubHkgMSB3aGVuIGxhc3QgY2h1bmsgaXMgbmV4dFxuICAgICAgICAgICAgZmluYWwgPSBiaXRzKGRhdCwgcG9zLCAxKTtcbiAgICAgICAgICAgIC8vIHR5cGU6IDAgPSBubyBjb21wcmVzc2lvbiwgMSA9IGZpeGVkIGh1ZmZtYW4sIDIgPSBkeW5hbWljIGh1ZmZtYW5cbiAgICAgICAgICAgIHZhciB0eXBlID0gYml0cyhkYXQsIHBvcyArIDEsIDMpO1xuICAgICAgICAgICAgcG9zICs9IDM7XG4gICAgICAgICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgICAgICAgICAvLyBnbyB0byBlbmQgb2YgYnl0ZSBib3VuZGFyeVxuICAgICAgICAgICAgICAgIHZhciBzID0gc2hmdChwb3MpICsgNCwgbCA9IGRhdFtzIC0gNF0gfCAoZGF0W3MgLSAzXSA8PCA4KSwgdCA9IHMgKyBsO1xuICAgICAgICAgICAgICAgIGlmICh0ID4gc2wpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vU3QpXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnIoMCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlbnN1cmUgc2l6ZVxuICAgICAgICAgICAgICAgIGlmIChyZXNpemUpXG4gICAgICAgICAgICAgICAgICAgIGNidWYoYnQgKyBsKTtcbiAgICAgICAgICAgICAgICAvLyBDb3B5IG92ZXIgdW5jb21wcmVzc2VkIGRhdGFcbiAgICAgICAgICAgICAgICBidWYuc2V0KGRhdC5zdWJhcnJheShzLCB0KSwgYnQpO1xuICAgICAgICAgICAgICAgIC8vIEdldCBuZXcgYml0cG9zLCB1cGRhdGUgYnl0ZSBjb3VudFxuICAgICAgICAgICAgICAgIHN0LmIgPSBidCArPSBsLCBzdC5wID0gcG9zID0gdCAqIDgsIHN0LmYgPSBmaW5hbDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gMSlcbiAgICAgICAgICAgICAgICBsbSA9IGZscm0sIGRtID0gZmRybSwgbGJ0ID0gOSwgZGJ0ID0gNTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gMikge1xuICAgICAgICAgICAgICAgIC8vICBsaXRlcmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aHNcbiAgICAgICAgICAgICAgICB2YXIgaExpdCA9IGJpdHMoZGF0LCBwb3MsIDMxKSArIDI1NywgaGNMZW4gPSBiaXRzKGRhdCwgcG9zICsgMTAsIDE1KSArIDQ7XG4gICAgICAgICAgICAgICAgdmFyIHRsID0gaExpdCArIGJpdHMoZGF0LCBwb3MgKyA1LCAzMSkgKyAxO1xuICAgICAgICAgICAgICAgIHBvcyArPSAxNDtcbiAgICAgICAgICAgICAgICAvLyBsZW5ndGgrZGlzdGFuY2UgdHJlZVxuICAgICAgICAgICAgICAgIHZhciBsZHQgPSBuZXcgdTgodGwpO1xuICAgICAgICAgICAgICAgIC8vIGNvZGUgbGVuZ3RoIHRyZWVcbiAgICAgICAgICAgICAgICB2YXIgY2x0ID0gbmV3IHU4KDE5KTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhjTGVuOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdXNlIGluZGV4IG1hcCB0byBnZXQgcmVhbCBjb2RlXG4gICAgICAgICAgICAgICAgICAgIGNsdFtjbGltW2ldXSA9IGJpdHMoZGF0LCBwb3MgKyBpICogMywgNyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBvcyArPSBoY0xlbiAqIDM7XG4gICAgICAgICAgICAgICAgLy8gY29kZSBsZW5ndGhzIGJpdHNcbiAgICAgICAgICAgICAgICB2YXIgY2xiID0gbWF4KGNsdCksIGNsYm1zayA9ICgxIDw8IGNsYikgLSAxO1xuICAgICAgICAgICAgICAgIC8vIGNvZGUgbGVuZ3RocyBtYXBcbiAgICAgICAgICAgICAgICB2YXIgY2xtID0gaE1hcChjbHQsIGNsYiwgMSk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0bDspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBjbG1bYml0cyhkYXQsIHBvcywgY2xibXNrKV07XG4gICAgICAgICAgICAgICAgICAgIC8vIGJpdHMgcmVhZFxuICAgICAgICAgICAgICAgICAgICBwb3MgKz0gciAmIDE1O1xuICAgICAgICAgICAgICAgICAgICAvLyBzeW1ib2xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSByID4+IDQ7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvZGUgbGVuZ3RoIHRvIGNvcHlcbiAgICAgICAgICAgICAgICAgICAgaWYgKHMgPCAxNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGR0W2krK10gPSBzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGNvcHkgICBjb3VudFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSAwLCBuID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID09IDE2KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAzICsgYml0cyhkYXQsIHBvcywgMyksIHBvcyArPSAyLCBjID0gbGR0W2kgLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHMgPT0gMTcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDMgKyBiaXRzKGRhdCwgcG9zLCA3KSwgcG9zICs9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzID09IDE4KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAxMSArIGJpdHMoZGF0LCBwb3MsIDEyNyksIHBvcyArPSA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG4tLSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZHRbaSsrXSA9IGM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gICAgbGVuZ3RoIHRyZWUgICAgICAgICAgICAgICAgIGRpc3RhbmNlIHRyZWVcbiAgICAgICAgICAgICAgICB2YXIgbHQgPSBsZHQuc3ViYXJyYXkoMCwgaExpdCksIGR0ID0gbGR0LnN1YmFycmF5KGhMaXQpO1xuICAgICAgICAgICAgICAgIC8vIG1heCBsZW5ndGggYml0c1xuICAgICAgICAgICAgICAgIGxidCA9IG1heChsdCk7XG4gICAgICAgICAgICAgICAgLy8gbWF4IGRpc3QgYml0c1xuICAgICAgICAgICAgICAgIGRidCA9IG1heChkdCk7XG4gICAgICAgICAgICAgICAgbG0gPSBoTWFwKGx0LCBsYnQsIDEpO1xuICAgICAgICAgICAgICAgIGRtID0gaE1hcChkdCwgZGJ0LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBlcnIoMSk7XG4gICAgICAgICAgICBpZiAocG9zID4gdGJ0cykge1xuICAgICAgICAgICAgICAgIGlmIChub1N0KVxuICAgICAgICAgICAgICAgICAgICBlcnIoMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBidWZmZXIgY2FuIGhvbGQgdGhpcyArIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGFkZGl0aW9uXG4gICAgICAgIC8vIE1heGltdW0gY2h1bmsgc2l6ZSAocHJhY3RpY2FsbHksIHRoZW9yZXRpY2FsbHkgaW5maW5pdGUpIGlzIDJeMTdcbiAgICAgICAgaWYgKHJlc2l6ZSlcbiAgICAgICAgICAgIGNidWYoYnQgKyAxMzEwNzIpO1xuICAgICAgICB2YXIgbG1zID0gKDEgPDwgbGJ0KSAtIDEsIGRtcyA9ICgxIDw8IGRidCkgLSAxO1xuICAgICAgICB2YXIgbHBvcyA9IHBvcztcbiAgICAgICAgZm9yICg7OyBscG9zID0gcG9zKSB7XG4gICAgICAgICAgICAvLyBiaXRzIHJlYWQsIGNvZGVcbiAgICAgICAgICAgIHZhciBjID0gbG1bYml0czE2KGRhdCwgcG9zKSAmIGxtc10sIHN5bSA9IGMgPj4gNDtcbiAgICAgICAgICAgIHBvcyArPSBjICYgMTU7XG4gICAgICAgICAgICBpZiAocG9zID4gdGJ0cykge1xuICAgICAgICAgICAgICAgIGlmIChub1N0KVxuICAgICAgICAgICAgICAgICAgICBlcnIoMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWMpXG4gICAgICAgICAgICAgICAgZXJyKDIpO1xuICAgICAgICAgICAgaWYgKHN5bSA8IDI1NilcbiAgICAgICAgICAgICAgICBidWZbYnQrK10gPSBzeW07XG4gICAgICAgICAgICBlbHNlIGlmIChzeW0gPT0gMjU2KSB7XG4gICAgICAgICAgICAgICAgbHBvcyA9IHBvcywgbG0gPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGFkZCA9IHN5bSAtIDI1NDtcbiAgICAgICAgICAgICAgICAvLyBubyBleHRyYSBiaXRzIG5lZWRlZCBpZiBsZXNzXG4gICAgICAgICAgICAgICAgaWYgKHN5bSA+IDI2NCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpbmRleFxuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHN5bSAtIDI1NywgYiA9IGZsZWJbaV07XG4gICAgICAgICAgICAgICAgICAgIGFkZCA9IGJpdHMoZGF0LCBwb3MsICgxIDw8IGIpIC0gMSkgKyBmbFtpXTtcbiAgICAgICAgICAgICAgICAgICAgcG9zICs9IGI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGRpc3RcbiAgICAgICAgICAgICAgICB2YXIgZCA9IGRtW2JpdHMxNihkYXQsIHBvcykgJiBkbXNdLCBkc3ltID0gZCA+PiA0O1xuICAgICAgICAgICAgICAgIGlmICghZClcbiAgICAgICAgICAgICAgICAgICAgZXJyKDMpO1xuICAgICAgICAgICAgICAgIHBvcyArPSBkICYgMTU7XG4gICAgICAgICAgICAgICAgdmFyIGR0ID0gZmRbZHN5bV07XG4gICAgICAgICAgICAgICAgaWYgKGRzeW0gPiAzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBiID0gZmRlYltkc3ltXTtcbiAgICAgICAgICAgICAgICAgICAgZHQgKz0gYml0czE2KGRhdCwgcG9zKSAmICgxIDw8IGIpIC0gMSwgcG9zICs9IGI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwb3MgPiB0YnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChub1N0KVxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyKDApO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc2l6ZSlcbiAgICAgICAgICAgICAgICAgICAgY2J1ZihidCArIDEzMTA3Mik7XG4gICAgICAgICAgICAgICAgdmFyIGVuZCA9IGJ0ICsgYWRkO1xuICAgICAgICAgICAgICAgIGlmIChidCA8IGR0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaGlmdCA9IGRsIC0gZHQsIGRlbmQgPSBNYXRoLm1pbihkdCwgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNoaWZ0ICsgYnQgPCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyKDMpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgYnQgPCBkZW5kOyArK2J0KVxuICAgICAgICAgICAgICAgICAgICAgICAgYnVmW2J0XSA9IGRpY3Rbc2hpZnQgKyBidF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAoOyBidCA8IGVuZDsgKytidClcbiAgICAgICAgICAgICAgICAgICAgYnVmW2J0XSA9IGJ1ZltidCAtIGR0XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdC5sID0gbG0sIHN0LnAgPSBscG9zLCBzdC5iID0gYnQsIHN0LmYgPSBmaW5hbDtcbiAgICAgICAgaWYgKGxtKVxuICAgICAgICAgICAgZmluYWwgPSAxLCBzdC5tID0gbGJ0LCBzdC5kID0gZG0sIHN0Lm4gPSBkYnQ7XG4gICAgfSB3aGlsZSAoIWZpbmFsKTtcbiAgICAvLyBkb24ndCByZWFsbG9jYXRlIGZvciBzdHJlYW1zIG9yIHVzZXIgYnVmZmVyc1xuICAgIHJldHVybiBidCAhPSBidWYubGVuZ3RoICYmIG5vQnVmID8gc2xjKGJ1ZiwgMCwgYnQpIDogYnVmLnN1YmFycmF5KDAsIGJ0KTtcbn07XG4vLyBzdGFydGluZyBhdCBwLCB3cml0ZSB0aGUgbWluaW11bSBudW1iZXIgb2YgYml0cyB0aGF0IGNhbiBob2xkIHYgdG8gZFxudmFyIHdiaXRzID0gZnVuY3Rpb24gKGQsIHAsIHYpIHtcbiAgICB2IDw8PSBwICYgNztcbiAgICB2YXIgbyA9IChwIC8gOCkgfCAwO1xuICAgIGRbb10gfD0gdjtcbiAgICBkW28gKyAxXSB8PSB2ID4+IDg7XG59O1xuLy8gc3RhcnRpbmcgYXQgcCwgd3JpdGUgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGJpdHMgKD44KSB0aGF0IGNhbiBob2xkIHYgdG8gZFxudmFyIHdiaXRzMTYgPSBmdW5jdGlvbiAoZCwgcCwgdikge1xuICAgIHYgPDw9IHAgJiA3O1xuICAgIHZhciBvID0gKHAgLyA4KSB8IDA7XG4gICAgZFtvXSB8PSB2O1xuICAgIGRbbyArIDFdIHw9IHYgPj4gODtcbiAgICBkW28gKyAyXSB8PSB2ID4+IDE2O1xufTtcbi8vIGNyZWF0ZXMgY29kZSBsZW5ndGhzIGZyb20gYSBmcmVxdWVuY3kgdGFibGVcbnZhciBoVHJlZSA9IGZ1bmN0aW9uIChkLCBtYikge1xuICAgIC8vIE5lZWQgZXh0cmEgaW5mbyB0byBtYWtlIGEgdHJlZVxuICAgIHZhciB0ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChkW2ldKVxuICAgICAgICAgICAgdC5wdXNoKHsgczogaSwgZjogZFtpXSB9KTtcbiAgICB9XG4gICAgdmFyIHMgPSB0Lmxlbmd0aDtcbiAgICB2YXIgdDIgPSB0LnNsaWNlKCk7XG4gICAgaWYgKCFzKVxuICAgICAgICByZXR1cm4geyB0OiBldCwgbDogMCB9O1xuICAgIGlmIChzID09IDEpIHtcbiAgICAgICAgdmFyIHYgPSBuZXcgdTgodFswXS5zICsgMSk7XG4gICAgICAgIHZbdFswXS5zXSA9IDE7XG4gICAgICAgIHJldHVybiB7IHQ6IHYsIGw6IDEgfTtcbiAgICB9XG4gICAgdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLmYgLSBiLmY7IH0pO1xuICAgIC8vIGFmdGVyIGkyIHJlYWNoZXMgbGFzdCBpbmQsIHdpbGwgYmUgc3RvcHBlZFxuICAgIC8vIGZyZXEgbXVzdCBiZSBncmVhdGVyIHRoYW4gbGFyZ2VzdCBwb3NzaWJsZSBudW1iZXIgb2Ygc3ltYm9sc1xuICAgIHQucHVzaCh7IHM6IC0xLCBmOiAyNTAwMSB9KTtcbiAgICB2YXIgbCA9IHRbMF0sIHIgPSB0WzFdLCBpMCA9IDAsIGkxID0gMSwgaTIgPSAyO1xuICAgIHRbMF0gPSB7IHM6IC0xLCBmOiBsLmYgKyByLmYsIGw6IGwsIHI6IHIgfTtcbiAgICAvLyBlZmZpY2llbnQgYWxnb3JpdGhtIGZyb20gVVpJUC5qc1xuICAgIC8vIGkwIGlzIGxvb2tiZWhpbmQsIGkyIGlzIGxvb2thaGVhZCAtIGFmdGVyIHByb2Nlc3NpbmcgdHdvIGxvdy1mcmVxXG4gICAgLy8gc3ltYm9scyB0aGF0IGNvbWJpbmVkIGhhdmUgaGlnaCBmcmVxLCB3aWxsIHN0YXJ0IHByb2Nlc3NpbmcgaTIgKGhpZ2gtZnJlcSxcbiAgICAvLyBub24tY29tcG9zaXRlKSBzeW1ib2xzIGluc3RlYWRcbiAgICAvLyBzZWUgaHR0cHM6Ly9yZWRkaXQuY29tL3IvcGhvdG9wZWEvY29tbWVudHMvaWtla2h0L3V6aXBqc19xdWVzdGlvbnMvXG4gICAgd2hpbGUgKGkxICE9IHMgLSAxKSB7XG4gICAgICAgIGwgPSB0W3RbaTBdLmYgPCB0W2kyXS5mID8gaTArKyA6IGkyKytdO1xuICAgICAgICByID0gdFtpMCAhPSBpMSAmJiB0W2kwXS5mIDwgdFtpMl0uZiA/IGkwKysgOiBpMisrXTtcbiAgICAgICAgdFtpMSsrXSA9IHsgczogLTEsIGY6IGwuZiArIHIuZiwgbDogbCwgcjogciB9O1xuICAgIH1cbiAgICB2YXIgbWF4U3ltID0gdDJbMF0ucztcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHM7ICsraSkge1xuICAgICAgICBpZiAodDJbaV0ucyA+IG1heFN5bSlcbiAgICAgICAgICAgIG1heFN5bSA9IHQyW2ldLnM7XG4gICAgfVxuICAgIC8vIGNvZGUgbGVuZ3Roc1xuICAgIHZhciB0ciA9IG5ldyB1MTYobWF4U3ltICsgMSk7XG4gICAgLy8gbWF4IGJpdHMgaW4gdHJlZVxuICAgIHZhciBtYnQgPSBsbih0W2kxIC0gMV0sIHRyLCAwKTtcbiAgICBpZiAobWJ0ID4gbWIpIHtcbiAgICAgICAgLy8gbW9yZSBhbGdvcml0aG1zIGZyb20gVVpJUC5qc1xuICAgICAgICAvLyBUT0RPOiBmaW5kIG91dCBob3cgdGhpcyBjb2RlIHdvcmtzIChkZWJ0KVxuICAgICAgICAvLyAgaW5kICAgIGRlYnRcbiAgICAgICAgdmFyIGkgPSAwLCBkdCA9IDA7XG4gICAgICAgIC8vICAgIGxlZnQgICAgICAgICAgICBjb3N0XG4gICAgICAgIHZhciBsZnQgPSBtYnQgLSBtYiwgY3N0ID0gMSA8PCBsZnQ7XG4gICAgICAgIHQyLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIHRyW2Iuc10gLSB0clthLnNdIHx8IGEuZiAtIGIuZjsgfSk7XG4gICAgICAgIGZvciAoOyBpIDwgczsgKytpKSB7XG4gICAgICAgICAgICB2YXIgaTJfMSA9IHQyW2ldLnM7XG4gICAgICAgICAgICBpZiAodHJbaTJfMV0gPiBtYikge1xuICAgICAgICAgICAgICAgIGR0ICs9IGNzdCAtICgxIDw8IChtYnQgLSB0cltpMl8xXSkpO1xuICAgICAgICAgICAgICAgIHRyW2kyXzFdID0gbWI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZHQgPj49IGxmdDtcbiAgICAgICAgd2hpbGUgKGR0ID4gMCkge1xuICAgICAgICAgICAgdmFyIGkyXzIgPSB0MltpXS5zO1xuICAgICAgICAgICAgaWYgKHRyW2kyXzJdIDwgbWIpXG4gICAgICAgICAgICAgICAgZHQgLT0gMSA8PCAobWIgLSB0cltpMl8yXSsrIC0gMSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgKytpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoOyBpID49IDAgJiYgZHQ7IC0taSkge1xuICAgICAgICAgICAgdmFyIGkyXzMgPSB0MltpXS5zO1xuICAgICAgICAgICAgaWYgKHRyW2kyXzNdID09IG1iKSB7XG4gICAgICAgICAgICAgICAgLS10cltpMl8zXTtcbiAgICAgICAgICAgICAgICArK2R0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG1idCA9IG1iO1xuICAgIH1cbiAgICByZXR1cm4geyB0OiBuZXcgdTgodHIpLCBsOiBtYnQgfTtcbn07XG4vLyBnZXQgdGhlIG1heCBsZW5ndGggYW5kIGFzc2lnbiBsZW5ndGggY29kZXNcbnZhciBsbiA9IGZ1bmN0aW9uIChuLCBsLCBkKSB7XG4gICAgcmV0dXJuIG4ucyA9PSAtMVxuICAgICAgICA/IE1hdGgubWF4KGxuKG4ubCwgbCwgZCArIDEpLCBsbihuLnIsIGwsIGQgKyAxKSlcbiAgICAgICAgOiAobFtuLnNdID0gZCk7XG59O1xuLy8gbGVuZ3RoIGNvZGVzIGdlbmVyYXRpb25cbnZhciBsYyA9IGZ1bmN0aW9uIChjKSB7XG4gICAgdmFyIHMgPSBjLmxlbmd0aDtcbiAgICAvLyBOb3RlIHRoYXQgdGhlIHNlbWljb2xvbiB3YXMgaW50ZW50aW9uYWxcbiAgICB3aGlsZSAocyAmJiAhY1stLXNdKVxuICAgICAgICA7XG4gICAgdmFyIGNsID0gbmV3IHUxNigrK3MpO1xuICAgIC8vICBpbmQgICAgICBudW0gICAgICAgICBzdHJlYWtcbiAgICB2YXIgY2xpID0gMCwgY2xuID0gY1swXSwgY2xzID0gMTtcbiAgICB2YXIgdyA9IGZ1bmN0aW9uICh2KSB7IGNsW2NsaSsrXSA9IHY7IH07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gczsgKytpKSB7XG4gICAgICAgIGlmIChjW2ldID09IGNsbiAmJiBpICE9IHMpXG4gICAgICAgICAgICArK2NscztcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWNsbiAmJiBjbHMgPiAyKSB7XG4gICAgICAgICAgICAgICAgZm9yICg7IGNscyA+IDEzODsgY2xzIC09IDEzOClcbiAgICAgICAgICAgICAgICAgICAgdygzMjc1NCk7XG4gICAgICAgICAgICAgICAgaWYgKGNscyA+IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgdyhjbHMgPiAxMCA/ICgoY2xzIC0gMTEpIDw8IDUpIHwgMjg2OTAgOiAoKGNscyAtIDMpIDw8IDUpIHwgMTIzMDUpO1xuICAgICAgICAgICAgICAgICAgICBjbHMgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNscyA+IDMpIHtcbiAgICAgICAgICAgICAgICB3KGNsbiksIC0tY2xzO1xuICAgICAgICAgICAgICAgIGZvciAoOyBjbHMgPiA2OyBjbHMgLT0gNilcbiAgICAgICAgICAgICAgICAgICAgdyg4MzA0KTtcbiAgICAgICAgICAgICAgICBpZiAoY2xzID4gMilcbiAgICAgICAgICAgICAgICAgICAgdygoKGNscyAtIDMpIDw8IDUpIHwgODIwOCksIGNscyA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoY2xzLS0pXG4gICAgICAgICAgICAgICAgdyhjbG4pO1xuICAgICAgICAgICAgY2xzID0gMTtcbiAgICAgICAgICAgIGNsbiA9IGNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgYzogY2wuc3ViYXJyYXkoMCwgY2xpKSwgbjogcyB9O1xufTtcbi8vIGNhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIG91dHB1dCBmcm9tIHRyZWUsIGNvZGUgbGVuZ3Roc1xudmFyIGNsZW4gPSBmdW5jdGlvbiAoY2YsIGNsKSB7XG4gICAgdmFyIGwgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2wubGVuZ3RoOyArK2kpXG4gICAgICAgIGwgKz0gY2ZbaV0gKiBjbFtpXTtcbiAgICByZXR1cm4gbDtcbn07XG4vLyB3cml0ZXMgYSBmaXhlZCBibG9ja1xuLy8gcmV0dXJucyB0aGUgbmV3IGJpdCBwb3NcbnZhciB3ZmJsayA9IGZ1bmN0aW9uIChvdXQsIHBvcywgZGF0KSB7XG4gICAgLy8gbm8gbmVlZCB0byB3cml0ZSAwMCBhcyB0eXBlOiBUeXBlZEFycmF5IGRlZmF1bHRzIHRvIDBcbiAgICB2YXIgcyA9IGRhdC5sZW5ndGg7XG4gICAgdmFyIG8gPSBzaGZ0KHBvcyArIDIpO1xuICAgIG91dFtvXSA9IHMgJiAyNTU7XG4gICAgb3V0W28gKyAxXSA9IHMgPj4gODtcbiAgICBvdXRbbyArIDJdID0gb3V0W29dIF4gMjU1O1xuICAgIG91dFtvICsgM10gPSBvdXRbbyArIDFdIF4gMjU1O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgczsgKytpKVxuICAgICAgICBvdXRbbyArIGkgKyA0XSA9IGRhdFtpXTtcbiAgICByZXR1cm4gKG8gKyA0ICsgcykgKiA4O1xufTtcbi8vIHdyaXRlcyBhIGJsb2NrXG52YXIgd2JsayA9IGZ1bmN0aW9uIChkYXQsIG91dCwgZmluYWwsIHN5bXMsIGxmLCBkZiwgZWIsIGxpLCBicywgYmwsIHApIHtcbiAgICB3Yml0cyhvdXQsIHArKywgZmluYWwpO1xuICAgICsrbGZbMjU2XTtcbiAgICB2YXIgX2EgPSBoVHJlZShsZiwgMTUpLCBkbHQgPSBfYS50LCBtbGIgPSBfYS5sO1xuICAgIHZhciBfYiA9IGhUcmVlKGRmLCAxNSksIGRkdCA9IF9iLnQsIG1kYiA9IF9iLmw7XG4gICAgdmFyIF9jID0gbGMoZGx0KSwgbGNsdCA9IF9jLmMsIG5sYyA9IF9jLm47XG4gICAgdmFyIF9kID0gbGMoZGR0KSwgbGNkdCA9IF9kLmMsIG5kYyA9IF9kLm47XG4gICAgdmFyIGxjZnJlcSA9IG5ldyB1MTYoMTkpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGNsdC5sZW5ndGg7ICsraSlcbiAgICAgICAgKytsY2ZyZXFbbGNsdFtpXSAmIDMxXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxjZHQubGVuZ3RoOyArK2kpXG4gICAgICAgICsrbGNmcmVxW2xjZHRbaV0gJiAzMV07XG4gICAgdmFyIF9lID0gaFRyZWUobGNmcmVxLCA3KSwgbGN0ID0gX2UudCwgbWxjYiA9IF9lLmw7XG4gICAgdmFyIG5sY2MgPSAxOTtcbiAgICBmb3IgKDsgbmxjYyA+IDQgJiYgIWxjdFtjbGltW25sY2MgLSAxXV07IC0tbmxjYylcbiAgICAgICAgO1xuICAgIHZhciBmbGVuID0gKGJsICsgNSkgPDwgMztcbiAgICB2YXIgZnRsZW4gPSBjbGVuKGxmLCBmbHQpICsgY2xlbihkZiwgZmR0KSArIGViO1xuICAgIHZhciBkdGxlbiA9IGNsZW4obGYsIGRsdCkgKyBjbGVuKGRmLCBkZHQpICsgZWIgKyAxNCArIDMgKiBubGNjICsgY2xlbihsY2ZyZXEsIGxjdCkgKyAyICogbGNmcmVxWzE2XSArIDMgKiBsY2ZyZXFbMTddICsgNyAqIGxjZnJlcVsxOF07XG4gICAgaWYgKGJzID49IDAgJiYgZmxlbiA8PSBmdGxlbiAmJiBmbGVuIDw9IGR0bGVuKVxuICAgICAgICByZXR1cm4gd2ZibGsob3V0LCBwLCBkYXQuc3ViYXJyYXkoYnMsIGJzICsgYmwpKTtcbiAgICB2YXIgbG0sIGxsLCBkbSwgZGw7XG4gICAgd2JpdHMob3V0LCBwLCAxICsgKGR0bGVuIDwgZnRsZW4pKSwgcCArPSAyO1xuICAgIGlmIChkdGxlbiA8IGZ0bGVuKSB7XG4gICAgICAgIGxtID0gaE1hcChkbHQsIG1sYiwgMCksIGxsID0gZGx0LCBkbSA9IGhNYXAoZGR0LCBtZGIsIDApLCBkbCA9IGRkdDtcbiAgICAgICAgdmFyIGxsbSA9IGhNYXAobGN0LCBtbGNiLCAwKTtcbiAgICAgICAgd2JpdHMob3V0LCBwLCBubGMgLSAyNTcpO1xuICAgICAgICB3Yml0cyhvdXQsIHAgKyA1LCBuZGMgLSAxKTtcbiAgICAgICAgd2JpdHMob3V0LCBwICsgMTAsIG5sY2MgLSA0KTtcbiAgICAgICAgcCArPSAxNDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBubGNjOyArK2kpXG4gICAgICAgICAgICB3Yml0cyhvdXQsIHAgKyAzICogaSwgbGN0W2NsaW1baV1dKTtcbiAgICAgICAgcCArPSAzICogbmxjYztcbiAgICAgICAgdmFyIGxjdHMgPSBbbGNsdCwgbGNkdF07XG4gICAgICAgIGZvciAodmFyIGl0ID0gMDsgaXQgPCAyOyArK2l0KSB7XG4gICAgICAgICAgICB2YXIgY2xjdCA9IGxjdHNbaXRdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxlbiA9IGNsY3RbaV0gJiAzMTtcbiAgICAgICAgICAgICAgICB3Yml0cyhvdXQsIHAsIGxsbVtsZW5dKSwgcCArPSBsY3RbbGVuXTtcbiAgICAgICAgICAgICAgICBpZiAobGVuID4gMTUpXG4gICAgICAgICAgICAgICAgICAgIHdiaXRzKG91dCwgcCwgKGNsY3RbaV0gPj4gNSkgJiAxMjcpLCBwICs9IGNsY3RbaV0gPj4gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxtID0gZmxtLCBsbCA9IGZsdCwgZG0gPSBmZG0sIGRsID0gZmR0O1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpOyArK2kpIHtcbiAgICAgICAgdmFyIHN5bSA9IHN5bXNbaV07XG4gICAgICAgIGlmIChzeW0gPiAyNTUpIHtcbiAgICAgICAgICAgIHZhciBsZW4gPSAoc3ltID4+IDE4KSAmIDMxO1xuICAgICAgICAgICAgd2JpdHMxNihvdXQsIHAsIGxtW2xlbiArIDI1N10pLCBwICs9IGxsW2xlbiArIDI1N107XG4gICAgICAgICAgICBpZiAobGVuID4gNylcbiAgICAgICAgICAgICAgICB3Yml0cyhvdXQsIHAsIChzeW0gPj4gMjMpICYgMzEpLCBwICs9IGZsZWJbbGVuXTtcbiAgICAgICAgICAgIHZhciBkc3QgPSBzeW0gJiAzMTtcbiAgICAgICAgICAgIHdiaXRzMTYob3V0LCBwLCBkbVtkc3RdKSwgcCArPSBkbFtkc3RdO1xuICAgICAgICAgICAgaWYgKGRzdCA+IDMpXG4gICAgICAgICAgICAgICAgd2JpdHMxNihvdXQsIHAsIChzeW0gPj4gNSkgJiA4MTkxKSwgcCArPSBmZGViW2RzdF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB3Yml0czE2KG91dCwgcCwgbG1bc3ltXSksIHAgKz0gbGxbc3ltXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB3Yml0czE2KG91dCwgcCwgbG1bMjU2XSk7XG4gICAgcmV0dXJuIHAgKyBsbFsyNTZdO1xufTtcbi8vIGRlZmxhdGUgb3B0aW9ucyAobmljZSA8PCAxMykgfCBjaGFpblxudmFyIGRlbyA9IC8qI19fUFVSRV9fKi8gbmV3IGkzMihbNjU1NDAsIDEzMTA4MCwgMTMxMDg4LCAxMzExMDQsIDI2MjE3NiwgMTA0ODcwNCwgMTA0ODgzMiwgMjExNDU2MCwgMjExNzYzMl0pO1xuLy8gZW1wdHlcbnZhciBldCA9IC8qI19fUFVSRV9fKi8gbmV3IHU4KDApO1xuLy8gY29tcHJlc3NlcyBkYXRhIGludG8gYSByYXcgREVGTEFURSBidWZmZXJcbnZhciBkZmx0ID0gZnVuY3Rpb24gKGRhdCwgbHZsLCBwbHZsLCBwcmUsIHBvc3QsIHN0KSB7XG4gICAgdmFyIHMgPSBzdC56IHx8IGRhdC5sZW5ndGg7XG4gICAgdmFyIG8gPSBuZXcgdTgocHJlICsgcyArIDUgKiAoMSArIE1hdGguY2VpbChzIC8gNzAwMCkpICsgcG9zdCk7XG4gICAgLy8gd3JpdGluZyB0byB0aGlzIHdyaXRlcyB0byB0aGUgb3V0cHV0IGJ1ZmZlclxuICAgIHZhciB3ID0gby5zdWJhcnJheShwcmUsIG8ubGVuZ3RoIC0gcG9zdCk7XG4gICAgdmFyIGxzdCA9IHN0Lmw7XG4gICAgdmFyIHBvcyA9IChzdC5yIHx8IDApICYgNztcbiAgICBpZiAobHZsKSB7XG4gICAgICAgIGlmIChwb3MpXG4gICAgICAgICAgICB3WzBdID0gc3QuciA+PiAzO1xuICAgICAgICB2YXIgb3B0ID0gZGVvW2x2bCAtIDFdO1xuICAgICAgICB2YXIgbiA9IG9wdCA+PiAxMywgYyA9IG9wdCAmIDgxOTE7XG4gICAgICAgIHZhciBtc2tfMSA9ICgxIDw8IHBsdmwpIC0gMTtcbiAgICAgICAgLy8gICAgcHJldiAyLWJ5dGUgdmFsIG1hcCAgICBjdXJyIDItYnl0ZSB2YWwgbWFwXG4gICAgICAgIHZhciBwcmV2ID0gc3QucCB8fCBuZXcgdTE2KDMyNzY4KSwgaGVhZCA9IHN0LmggfHwgbmV3IHUxNihtc2tfMSArIDEpO1xuICAgICAgICB2YXIgYnMxXzEgPSBNYXRoLmNlaWwocGx2bCAvIDMpLCBiczJfMSA9IDIgKiBiczFfMTtcbiAgICAgICAgdmFyIGhzaCA9IGZ1bmN0aW9uIChpKSB7IHJldHVybiAoZGF0W2ldIF4gKGRhdFtpICsgMV0gPDwgYnMxXzEpIF4gKGRhdFtpICsgMl0gPDwgYnMyXzEpKSAmIG1za18xOyB9O1xuICAgICAgICAvLyAyNDU3NiBpcyBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIG1heGltdW0gc3ltYm9scyBwZXIgYmxvY2tcbiAgICAgICAgLy8gNDI0IGJ1ZmZlciBmb3IgbGFzdCBibG9ja1xuICAgICAgICB2YXIgc3ltcyA9IG5ldyBpMzIoMjUwMDApO1xuICAgICAgICAvLyBsZW5ndGgvbGl0ZXJhbCBmcmVxICAgZGlzdGFuY2UgZnJlcVxuICAgICAgICB2YXIgbGYgPSBuZXcgdTE2KDI4OCksIGRmID0gbmV3IHUxNigzMik7XG4gICAgICAgIC8vICBsL2xjbnQgIGV4Yml0cyAgaW5kZXggICAgICAgICAgbC9saW5kICB3YWl0ZHggICAgICAgICAgYmxrcG9zXG4gICAgICAgIHZhciBsY18xID0gMCwgZWIgPSAwLCBpID0gc3QuaSB8fCAwLCBsaSA9IDAsIHdpID0gc3QudyB8fCAwLCBicyA9IDA7XG4gICAgICAgIGZvciAoOyBpICsgMiA8IHM7ICsraSkge1xuICAgICAgICAgICAgLy8gaGFzaCB2YWx1ZVxuICAgICAgICAgICAgdmFyIGh2ID0gaHNoKGkpO1xuICAgICAgICAgICAgLy8gaW5kZXggbW9kIDMyNzY4ICAgIHByZXZpb3VzIGluZGV4IG1vZFxuICAgICAgICAgICAgdmFyIGltb2QgPSBpICYgMzI3NjcsIHBpbW9kID0gaGVhZFtodl07XG4gICAgICAgICAgICBwcmV2W2ltb2RdID0gcGltb2Q7XG4gICAgICAgICAgICBoZWFkW2h2XSA9IGltb2Q7XG4gICAgICAgICAgICAvLyBXZSBhbHdheXMgc2hvdWxkIG1vZGlmeSBoZWFkIGFuZCBwcmV2LCBidXQgb25seSBhZGQgc3ltYm9scyBpZlxuICAgICAgICAgICAgLy8gdGhpcyBkYXRhIGlzIG5vdCB5ZXQgcHJvY2Vzc2VkIChcIndhaXRcIiBmb3Igd2FpdCBpbmRleClcbiAgICAgICAgICAgIGlmICh3aSA8PSBpKSB7XG4gICAgICAgICAgICAgICAgLy8gYnl0ZXMgcmVtYWluaW5nXG4gICAgICAgICAgICAgICAgdmFyIHJlbSA9IHMgLSBpO1xuICAgICAgICAgICAgICAgIGlmICgobGNfMSA+IDcwMDAgfHwgbGkgPiAyNDU3NikgJiYgKHJlbSA+IDQyMyB8fCAhbHN0KSkge1xuICAgICAgICAgICAgICAgICAgICBwb3MgPSB3YmxrKGRhdCwgdywgMCwgc3ltcywgbGYsIGRmLCBlYiwgbGksIGJzLCBpIC0gYnMsIHBvcyk7XG4gICAgICAgICAgICAgICAgICAgIGxpID0gbGNfMSA9IGViID0gMCwgYnMgPSBpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDI4NjsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgbGZbal0gPSAwO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDMwOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICBkZltqXSA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vICBsZW4gICAgZGlzdCAgIGNoYWluXG4gICAgICAgICAgICAgICAgdmFyIGwgPSAyLCBkID0gMCwgY2hfMSA9IGMsIGRpZiA9IGltb2QgLSBwaW1vZCAmIDMyNzY3O1xuICAgICAgICAgICAgICAgIGlmIChyZW0gPiAyICYmIGh2ID09IGhzaChpIC0gZGlmKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF4biA9IE1hdGgubWluKG4sIHJlbSkgLSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF4ZCA9IE1hdGgubWluKDMyNzY3LCBpKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gbWF4IHBvc3NpYmxlIGxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAvLyBub3QgY2FwcGVkIGF0IGRpZiBiZWNhdXNlIGRlY29tcHJlc3NvcnMgaW1wbGVtZW50IFwicm9sbGluZ1wiIGluZGV4IHBvcHVsYXRpb25cbiAgICAgICAgICAgICAgICAgICAgdmFyIG1sID0gTWF0aC5taW4oMjU4LCByZW0pO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZGlmIDw9IG1heGQgJiYgLS1jaF8xICYmIGltb2QgIT0gcGltb2QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRbaSArIGxdID09IGRhdFtpICsgbCAtIGRpZl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmwgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBubCA8IG1sICYmIGRhdFtpICsgbmxdID09IGRhdFtpICsgbmwgLSBkaWZdOyArK25sKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5sID4gbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gbmwsIGQgPSBkaWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJyZWFrIG91dCBlYXJseSB3aGVuIHdlIHJlYWNoIFwibmljZVwiICh3ZSBhcmUgc2F0aXNmaWVkIGVub3VnaClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5sID4gbWF4bilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3csIGZpbmQgdGhlIHJhcmVzdCAyLWJ5dGUgc2VxdWVuY2Ugd2l0aGluIHRoaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGVuZ3RoIG9mIGxpdGVyYWxzIGFuZCBzZWFyY2ggZm9yIHRoYXQgaW5zdGVhZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTXVjaCBmYXN0ZXIgdGhhbiBqdXN0IHVzaW5nIHRoZSBzdGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW1kID0gTWF0aC5taW4oZGlmLCBubCAtIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1tZDsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGkgPSBpIC0gZGlmICsgaiAmIDMyNzY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB0aSA9IHByZXZbdGldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNkID0gdGkgLSBwdGkgJiAzMjc2NztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZCA+IG1kKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kID0gY2QsIHBpbW9kID0gdGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayB0aGUgcHJldmlvdXMgbWF0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgIGltb2QgPSBwaW1vZCwgcGltb2QgPSBwcmV2W2ltb2RdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlmICs9IGltb2QgLSBwaW1vZCAmIDMyNzY3O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGQgd2lsbCBiZSBub256ZXJvIG9ubHkgd2hlbiBhIG1hdGNoIHdhcyBmb3VuZFxuICAgICAgICAgICAgICAgIGlmIChkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlIGJvdGggZGlzdCBhbmQgbGVuIGRhdGEgaW4gb25lIGludDMyXG4gICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGlzIGlzIHJlY29nbml6ZWQgYXMgYSBsZW4vZGlzdCB3aXRoIDI4dGggYml0ICgyXjI4KVxuICAgICAgICAgICAgICAgICAgICBzeW1zW2xpKytdID0gMjY4NDM1NDU2IHwgKHJldmZsW2xdIDw8IDE4KSB8IHJldmZkW2RdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGluID0gcmV2ZmxbbF0gJiAzMSwgZGluID0gcmV2ZmRbZF0gJiAzMTtcbiAgICAgICAgICAgICAgICAgICAgZWIgKz0gZmxlYltsaW5dICsgZmRlYltkaW5dO1xuICAgICAgICAgICAgICAgICAgICArK2xmWzI1NyArIGxpbl07XG4gICAgICAgICAgICAgICAgICAgICsrZGZbZGluXTtcbiAgICAgICAgICAgICAgICAgICAgd2kgPSBpICsgbDtcbiAgICAgICAgICAgICAgICAgICAgKytsY18xO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3ltc1tsaSsrXSA9IGRhdFtpXTtcbiAgICAgICAgICAgICAgICAgICAgKytsZltkYXRbaV1dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSBNYXRoLm1heChpLCB3aSk7IGkgPCBzOyArK2kpIHtcbiAgICAgICAgICAgIHN5bXNbbGkrK10gPSBkYXRbaV07XG4gICAgICAgICAgICArK2xmW2RhdFtpXV07XG4gICAgICAgIH1cbiAgICAgICAgcG9zID0gd2JsayhkYXQsIHcsIGxzdCwgc3ltcywgbGYsIGRmLCBlYiwgbGksIGJzLCBpIC0gYnMsIHBvcyk7XG4gICAgICAgIGlmICghbHN0KSB7XG4gICAgICAgICAgICBzdC5yID0gKHBvcyAmIDcpIHwgd1socG9zIC8gOCkgfCAwXSA8PCAzO1xuICAgICAgICAgICAgLy8gc2hmdChwb3MpIG5vdyAxIGxlc3MgaWYgcG9zICYgNyAhPSAwXG4gICAgICAgICAgICBwb3MgLT0gNztcbiAgICAgICAgICAgIHN0LmggPSBoZWFkLCBzdC5wID0gcHJldiwgc3QuaSA9IGksIHN0LncgPSB3aTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IHN0LncgfHwgMDsgaSA8IHMgKyBsc3Q7IGkgKz0gNjU1MzUpIHtcbiAgICAgICAgICAgIC8vIGVuZFxuICAgICAgICAgICAgdmFyIGUgPSBpICsgNjU1MzU7XG4gICAgICAgICAgICBpZiAoZSA+PSBzKSB7XG4gICAgICAgICAgICAgICAgLy8gd3JpdGUgZmluYWwgYmxvY2tcbiAgICAgICAgICAgICAgICB3Wyhwb3MgLyA4KSB8IDBdID0gbHN0O1xuICAgICAgICAgICAgICAgIGUgPSBzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcG9zID0gd2ZibGsodywgcG9zICsgMSwgZGF0LnN1YmFycmF5KGksIGUpKTtcbiAgICAgICAgfVxuICAgICAgICBzdC5pID0gcztcbiAgICB9XG4gICAgcmV0dXJuIHNsYyhvLCAwLCBwcmUgKyBzaGZ0KHBvcykgKyBwb3N0KTtcbn07XG4vLyBDUkMzMiB0YWJsZVxudmFyIGNyY3QgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHQgPSBuZXcgSW50MzJBcnJheSgyNTYpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgICAgICAgdmFyIGMgPSBpLCBrID0gOTtcbiAgICAgICAgd2hpbGUgKC0taylcbiAgICAgICAgICAgIGMgPSAoKGMgJiAxKSAmJiAtMzA2Njc0OTEyKSBeIChjID4+PiAxKTtcbiAgICAgICAgdFtpXSA9IGM7XG4gICAgfVxuICAgIHJldHVybiB0O1xufSkoKTtcbi8vIENSQzMyXG52YXIgY3JjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjID0gLTE7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcDogZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgIC8vIGNsb3N1cmVzIGhhdmUgYXdmdWwgcGVyZm9ybWFuY2VcbiAgICAgICAgICAgIHZhciBjciA9IGM7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGQubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgY3IgPSBjcmN0WyhjciAmIDI1NSkgXiBkW2ldXSBeIChjciA+Pj4gOCk7XG4gICAgICAgICAgICBjID0gY3I7XG4gICAgICAgIH0sXG4gICAgICAgIGQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIH5jOyB9XG4gICAgfTtcbn07XG4vLyBBZGxlcjMyXG52YXIgYWRsZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGEgPSAxLCBiID0gMDtcbiAgICByZXR1cm4ge1xuICAgICAgICBwOiBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgLy8gY2xvc3VyZXMgaGF2ZSBhd2Z1bCBwZXJmb3JtYW5jZVxuICAgICAgICAgICAgdmFyIG4gPSBhLCBtID0gYjtcbiAgICAgICAgICAgIHZhciBsID0gZC5sZW5ndGggfCAwO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgIT0gbDspIHtcbiAgICAgICAgICAgICAgICB2YXIgZSA9IE1hdGgubWluKGkgKyAyNjU1LCBsKTtcbiAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGU7ICsraSlcbiAgICAgICAgICAgICAgICAgICAgbSArPSBuICs9IGRbaV07XG4gICAgICAgICAgICAgICAgbiA9IChuICYgNjU1MzUpICsgMTUgKiAobiA+PiAxNiksIG0gPSAobSAmIDY1NTM1KSArIDE1ICogKG0gPj4gMTYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYSA9IG4sIGIgPSBtO1xuICAgICAgICB9LFxuICAgICAgICBkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBhICU9IDY1NTIxLCBiICU9IDY1NTIxO1xuICAgICAgICAgICAgcmV0dXJuIChhICYgMjU1KSA8PCAyNCB8IChhICYgMHhGRjAwKSA8PCA4IHwgKGIgJiAyNTUpIDw8IDggfCAoYiA+PiA4KTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuO1xuLy8gZGVmbGF0ZSB3aXRoIG9wdHNcbnZhciBkb3B0ID0gZnVuY3Rpb24gKGRhdCwgb3B0LCBwcmUsIHBvc3QsIHN0KSB7XG4gICAgaWYgKCFzdCkge1xuICAgICAgICBzdCA9IHsgbDogMSB9O1xuICAgICAgICBpZiAob3B0LmRpY3Rpb25hcnkpIHtcbiAgICAgICAgICAgIHZhciBkaWN0ID0gb3B0LmRpY3Rpb25hcnkuc3ViYXJyYXkoLTMyNzY4KTtcbiAgICAgICAgICAgIHZhciBuZXdEYXQgPSBuZXcgdTgoZGljdC5sZW5ndGggKyBkYXQubGVuZ3RoKTtcbiAgICAgICAgICAgIG5ld0RhdC5zZXQoZGljdCk7XG4gICAgICAgICAgICBuZXdEYXQuc2V0KGRhdCwgZGljdC5sZW5ndGgpO1xuICAgICAgICAgICAgZGF0ID0gbmV3RGF0O1xuICAgICAgICAgICAgc3QudyA9IGRpY3QubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkZmx0KGRhdCwgb3B0LmxldmVsID09IG51bGwgPyA2IDogb3B0LmxldmVsLCBvcHQubWVtID09IG51bGwgPyAoc3QubCA/IE1hdGguY2VpbChNYXRoLm1heCg4LCBNYXRoLm1pbigxMywgTWF0aC5sb2coZGF0Lmxlbmd0aCkpKSAqIDEuNSkgOiAyMCkgOiAoMTIgKyBvcHQubWVtKSwgcHJlLCBwb3N0LCBzdCk7XG59O1xuLy8gV2FsbWFydCBvYmplY3Qgc3ByZWFkXG52YXIgbXJnID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgbyA9IHt9O1xuICAgIGZvciAodmFyIGsgaW4gYSlcbiAgICAgICAgb1trXSA9IGFba107XG4gICAgZm9yICh2YXIgayBpbiBiKVxuICAgICAgICBvW2tdID0gYltrXTtcbiAgICByZXR1cm4gbztcbn07XG4vLyB3b3JrZXIgY2xvbmVcbi8vIFRoaXMgaXMgcG9zc2libHkgdGhlIGNyYXppZXN0IHBhcnQgb2YgdGhlIGVudGlyZSBjb2RlYmFzZSwgZGVzcGl0ZSBob3cgc2ltcGxlIGl0IG1heSBzZWVtLlxuLy8gVGhlIG9ubHkgcGFyYW1ldGVyIHRvIHRoaXMgZnVuY3Rpb24gaXMgYSBjbG9zdXJlIHRoYXQgcmV0dXJucyBhbiBhcnJheSBvZiB2YXJpYWJsZXMgb3V0c2lkZSBvZiB0aGUgZnVuY3Rpb24gc2NvcGUuXG4vLyBXZSdyZSBnb2luZyB0byB0cnkgdG8gZmlndXJlIG91dCB0aGUgdmFyaWFibGUgbmFtZXMgdXNlZCBpbiB0aGUgY2xvc3VyZSBhcyBzdHJpbmdzIGJlY2F1c2UgdGhhdCBpcyBjcnVjaWFsIGZvciB3b3JrZXJpemF0aW9uLlxuLy8gV2Ugd2lsbCByZXR1cm4gYW4gb2JqZWN0IG1hcHBpbmcgb2YgdHJ1ZSB2YXJpYWJsZSBuYW1lIHRvIHZhbHVlIChiYXNpY2FsbHksIHRoZSBjdXJyZW50IHNjb3BlIGFzIGEgSlMgb2JqZWN0KS5cbi8vIFRoZSByZWFzb24gd2UgY2FuJ3QganVzdCB1c2UgdGhlIG9yaWdpbmFsIHZhcmlhYmxlIG5hbWVzIGlzIG1pbmlmaWVycyBtYW5nbGluZyB0aGUgdG9wbGV2ZWwgc2NvcGUuXG4vLyBUaGlzIHRvb2sgbWUgdGhyZWUgd2Vla3MgdG8gZmlndXJlIG91dCBob3cgdG8gZG8uXG52YXIgd2NsbiA9IGZ1bmN0aW9uIChmbiwgZm5TdHIsIHRkKSB7XG4gICAgdmFyIGR0ID0gZm4oKTtcbiAgICB2YXIgc3QgPSBmbi50b1N0cmluZygpO1xuICAgIHZhciBrcyA9IHN0LnNsaWNlKHN0LmluZGV4T2YoJ1snKSArIDEsIHN0Lmxhc3RJbmRleE9mKCddJykpLnJlcGxhY2UoL1xccysvZywgJycpLnNwbGl0KCcsJyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkdC5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgdiA9IGR0W2ldLCBrID0ga3NbaV07XG4gICAgICAgIGlmICh0eXBlb2YgdiA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBmblN0ciArPSAnOycgKyBrICsgJz0nO1xuICAgICAgICAgICAgdmFyIHN0XzEgPSB2LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAodi5wcm90b3R5cGUpIHtcbiAgICAgICAgICAgICAgICAvLyBmb3IgZ2xvYmFsIG9iamVjdHNcbiAgICAgICAgICAgICAgICBpZiAoc3RfMS5pbmRleE9mKCdbbmF0aXZlIGNvZGVdJykgIT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNwSW5kID0gc3RfMS5pbmRleE9mKCcgJywgOCkgKyAxO1xuICAgICAgICAgICAgICAgICAgICBmblN0ciArPSBzdF8xLnNsaWNlKHNwSW5kLCBzdF8xLmluZGV4T2YoJygnLCBzcEluZCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm5TdHIgKz0gc3RfMTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgdCBpbiB2LnByb3RvdHlwZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuU3RyICs9ICc7JyArIGsgKyAnLnByb3RvdHlwZS4nICsgdCArICc9JyArIHYucHJvdG90eXBlW3RdLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGZuU3RyICs9IHN0XzE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGRba10gPSB2O1xuICAgIH1cbiAgICByZXR1cm4gZm5TdHI7XG59O1xudmFyIGNoID0gW107XG4vLyBjbG9uZSBidWZzXG52YXIgY2JmcyA9IGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIHRsID0gW107XG4gICAgZm9yICh2YXIgayBpbiB2KSB7XG4gICAgICAgIGlmICh2W2tdLmJ1ZmZlcikge1xuICAgICAgICAgICAgdGwucHVzaCgodltrXSA9IG5ldyB2W2tdLmNvbnN0cnVjdG9yKHZba10pKS5idWZmZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0bDtcbn07XG4vLyB1c2UgYSB3b3JrZXIgdG8gZXhlY3V0ZSBjb2RlXG52YXIgd3JrciA9IGZ1bmN0aW9uIChmbnMsIGluaXQsIGlkLCBjYikge1xuICAgIGlmICghY2hbaWRdKSB7XG4gICAgICAgIHZhciBmblN0ciA9ICcnLCB0ZF8xID0ge30sIG0gPSBmbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtOyArK2kpXG4gICAgICAgICAgICBmblN0ciA9IHdjbG4oZm5zW2ldLCBmblN0ciwgdGRfMSk7XG4gICAgICAgIGNoW2lkXSA9IHsgYzogd2NsbihmbnNbbV0sIGZuU3RyLCB0ZF8xKSwgZTogdGRfMSB9O1xuICAgIH1cbiAgICB2YXIgdGQgPSBtcmcoe30sIGNoW2lkXS5lKTtcbiAgICByZXR1cm4gd2soY2hbaWRdLmMgKyAnO29ubWVzc2FnZT1mdW5jdGlvbihlKXtmb3IodmFyIGsgaW4gZS5kYXRhKXNlbGZba109ZS5kYXRhW2tdO29ubWVzc2FnZT0nICsgaW5pdC50b1N0cmluZygpICsgJ30nLCBpZCwgdGQsIGNiZnModGQpLCBjYik7XG59O1xuLy8gYmFzZSBhc3luYyBpbmZsYXRlIGZuXG52YXIgYkluZmx0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW3U4LCB1MTYsIGkzMiwgZmxlYiwgZmRlYiwgY2xpbSwgZmwsIGZkLCBmbHJtLCBmZHJtLCByZXYsIGVjLCBoTWFwLCBtYXgsIGJpdHMsIGJpdHMxNiwgc2hmdCwgc2xjLCBlcnIsIGluZmx0LCBpbmZsYXRlU3luYywgcGJmLCBnb3B0XTsgfTtcbnZhciBiRGZsdCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFt1OCwgdTE2LCBpMzIsIGZsZWIsIGZkZWIsIGNsaW0sIHJldmZsLCByZXZmZCwgZmxtLCBmbHQsIGZkbSwgZmR0LCByZXYsIGRlbywgZXQsIGhNYXAsIHdiaXRzLCB3Yml0czE2LCBoVHJlZSwgbG4sIGxjLCBjbGVuLCB3ZmJsaywgd2Jsaywgc2hmdCwgc2xjLCBkZmx0LCBkb3B0LCBkZWZsYXRlU3luYywgcGJmXTsgfTtcbi8vIGd6aXAgZXh0cmFcbnZhciBnemUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbZ3poLCBnemhsLCB3Ynl0ZXMsIGNyYywgY3JjdF07IH07XG4vLyBndW56aXAgZXh0cmFcbnZhciBndXplID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW2d6cywgZ3psXTsgfTtcbi8vIHpsaWIgZXh0cmFcbnZhciB6bGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbemxoLCB3Ynl0ZXMsIGFkbGVyXTsgfTtcbi8vIHVuemxpYiBleHRyYVxudmFyIHp1bGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbemxzXTsgfTtcbi8vIHBvc3QgYnVmXG52YXIgcGJmID0gZnVuY3Rpb24gKG1zZykgeyByZXR1cm4gcG9zdE1lc3NhZ2UobXNnLCBbbXNnLmJ1ZmZlcl0pOyB9O1xuLy8gZ2V0IG9wdHNcbnZhciBnb3B0ID0gZnVuY3Rpb24gKG8pIHsgcmV0dXJuIG8gJiYge1xuICAgIG91dDogby5zaXplICYmIG5ldyB1OChvLnNpemUpLFxuICAgIGRpY3Rpb25hcnk6IG8uZGljdGlvbmFyeVxufTsgfTtcbi8vIGFzeW5jIGhlbHBlclxudmFyIGNiaWZ5ID0gZnVuY3Rpb24gKGRhdCwgb3B0cywgZm5zLCBpbml0LCBpZCwgY2IpIHtcbiAgICB2YXIgdyA9IHdya3IoZm5zLCBpbml0LCBpZCwgZnVuY3Rpb24gKGVyciwgZGF0KSB7XG4gICAgICAgIHcudGVybWluYXRlKCk7XG4gICAgICAgIGNiKGVyciwgZGF0KTtcbiAgICB9KTtcbiAgICB3LnBvc3RNZXNzYWdlKFtkYXQsIG9wdHNdLCBvcHRzLmNvbnN1bWUgPyBbZGF0LmJ1ZmZlcl0gOiBbXSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdy50ZXJtaW5hdGUoKTsgfTtcbn07XG4vLyBhdXRvIHN0cmVhbVxudmFyIGFzdHJtID0gZnVuY3Rpb24gKHN0cm0pIHtcbiAgICBzdHJtLm9uZGF0YSA9IGZ1bmN0aW9uIChkYXQsIGZpbmFsKSB7IHJldHVybiBwb3N0TWVzc2FnZShbZGF0LCBmaW5hbF0sIFtkYXQuYnVmZmVyXSk7IH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChldikge1xuICAgICAgICBpZiAoZXYuZGF0YVswXSkge1xuICAgICAgICAgICAgc3RybS5wdXNoKGV2LmRhdGFbMF0sIGV2LmRhdGFbMV0pO1xuICAgICAgICAgICAgcG9zdE1lc3NhZ2UoW2V2LmRhdGFbMF0ubGVuZ3RoXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3RybS5mbHVzaChldi5kYXRhWzFdKTtcbiAgICB9O1xufTtcbi8vIGFzeW5jIHN0cmVhbSBhdHRhY2hcbnZhciBhc3RybWlmeSA9IGZ1bmN0aW9uIChmbnMsIHN0cm0sIG9wdHMsIGluaXQsIGlkLCBmbHVzaCwgZXh0KSB7XG4gICAgdmFyIHQ7XG4gICAgdmFyIHcgPSB3cmtyKGZucywgaW5pdCwgaWQsIGZ1bmN0aW9uIChlcnIsIGRhdCkge1xuICAgICAgICBpZiAoZXJyKVxuICAgICAgICAgICAgdy50ZXJtaW5hdGUoKSwgc3RybS5vbmRhdGEuY2FsbChzdHJtLCBlcnIpO1xuICAgICAgICBlbHNlIGlmICghQXJyYXkuaXNBcnJheShkYXQpKVxuICAgICAgICAgICAgZXh0KGRhdCk7XG4gICAgICAgIGVsc2UgaWYgKGRhdC5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgc3RybS5xdWV1ZWRTaXplIC09IGRhdFswXTtcbiAgICAgICAgICAgIGlmIChzdHJtLm9uZHJhaW4pXG4gICAgICAgICAgICAgICAgc3RybS5vbmRyYWluKGRhdFswXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZGF0WzFdKVxuICAgICAgICAgICAgICAgIHcudGVybWluYXRlKCk7XG4gICAgICAgICAgICBzdHJtLm9uZGF0YS5jYWxsKHN0cm0sIGVyciwgZGF0WzBdLCBkYXRbMV0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgdy5wb3N0TWVzc2FnZShvcHRzKTtcbiAgICBzdHJtLnF1ZXVlZFNpemUgPSAwO1xuICAgIHN0cm0ucHVzaCA9IGZ1bmN0aW9uIChkLCBmKSB7XG4gICAgICAgIGlmICghc3RybS5vbmRhdGEpXG4gICAgICAgICAgICBlcnIoNSk7XG4gICAgICAgIGlmICh0KVxuICAgICAgICAgICAgc3RybS5vbmRhdGEoZXJyKDQsIDAsIDEpLCBudWxsLCAhIWYpO1xuICAgICAgICBzdHJtLnF1ZXVlZFNpemUgKz0gZC5sZW5ndGg7XG4gICAgICAgIC8vIGNhbiBmYWlsIGZvciBjcm9zcy1yZWFsbSBVaW50OEFycmF5LCBidXQgb2sgLSBvbmx5IGEgc21hbGwgcGVyZm9ybWFuY2UgcGVuYWx0eVxuICAgICAgICB3LnBvc3RNZXNzYWdlKFtkLCB0ID0gZl0sIGQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgPyBbZC5idWZmZXJdIDogW10pO1xuICAgIH07XG4gICAgc3RybS50ZXJtaW5hdGUgPSBmdW5jdGlvbiAoKSB7IHcudGVybWluYXRlKCk7IH07XG4gICAgaWYgKGZsdXNoKSB7XG4gICAgICAgIHN0cm0uZmx1c2ggPSBmdW5jdGlvbiAoc3luYykgeyB3LnBvc3RNZXNzYWdlKFswLCBzeW5jXSk7IH07XG4gICAgfVxufTtcbi8vIHJlYWQgMiBieXRlc1xudmFyIGIyID0gZnVuY3Rpb24gKGQsIGIpIHsgcmV0dXJuIGRbYl0gfCAoZFtiICsgMV0gPDwgOCk7IH07XG4vLyByZWFkIDQgYnl0ZXNcbnZhciBiNCA9IGZ1bmN0aW9uIChkLCBiKSB7IHJldHVybiAoZFtiXSB8IChkW2IgKyAxXSA8PCA4KSB8IChkW2IgKyAyXSA8PCAxNikgfCAoZFtiICsgM10gPDwgMjQpKSA+Pj4gMDsgfTtcbi8vIHJlYWQgOCBieXRlc1xudmFyIGI4ID0gZnVuY3Rpb24gKGQsIGIpIHsgcmV0dXJuIGI0KGQsIGIpICsgKGI0KGQsIGIgKyA0KSAqIDQyOTQ5NjcyOTYpOyB9O1xuLy8gd3JpdGUgYnl0ZXNcbnZhciB3Ynl0ZXMgPSBmdW5jdGlvbiAoZCwgYiwgdikge1xuICAgIGZvciAoOyB2OyArK2IpXG4gICAgICAgIGRbYl0gPSB2LCB2ID4+Pj0gODtcbn07XG4vLyBnemlwIGhlYWRlclxudmFyIGd6aCA9IGZ1bmN0aW9uIChjLCBvKSB7XG4gICAgdmFyIGZuID0gby5maWxlbmFtZTtcbiAgICBjWzBdID0gMzEsIGNbMV0gPSAxMzksIGNbMl0gPSA4LCBjWzhdID0gby5sZXZlbCA8IDIgPyA0IDogby5sZXZlbCA9PSA5ID8gMiA6IDAsIGNbOV0gPSAzOyAvLyBhc3N1bWUgVW5peFxuICAgIGlmIChvLm10aW1lICE9IDApXG4gICAgICAgIHdieXRlcyhjLCA0LCBNYXRoLmZsb29yKG5ldyBEYXRlKG8ubXRpbWUgfHwgRGF0ZS5ub3coKSkgLyAxMDAwKSk7XG4gICAgaWYgKGZuKSB7XG4gICAgICAgIGNbM10gPSA4O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBmbi5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIGNbaSArIDEwXSA9IGZuLmNoYXJDb2RlQXQoaSk7XG4gICAgfVxufTtcbi8vIGd6aXAgZm9vdGVyOiAtOCB0byAtNCA9IENSQywgLTQgdG8gLTAgaXMgbGVuZ3RoXG4vLyBnemlwIHN0YXJ0XG52YXIgZ3pzID0gZnVuY3Rpb24gKGQpIHtcbiAgICBpZiAoZFswXSAhPSAzMSB8fCBkWzFdICE9IDEzOSB8fCBkWzJdICE9IDgpXG4gICAgICAgIGVycig2LCAnaW52YWxpZCBnemlwIGRhdGEnKTtcbiAgICB2YXIgZmxnID0gZFszXTtcbiAgICB2YXIgc3QgPSAxMDtcbiAgICBpZiAoZmxnICYgNClcbiAgICAgICAgc3QgKz0gKGRbMTBdIHwgZFsxMV0gPDwgOCkgKyAyO1xuICAgIGZvciAodmFyIHpzID0gKGZsZyA+PiAzICYgMSkgKyAoZmxnID4+IDQgJiAxKTsgenMgPiAwOyB6cyAtPSAhZFtzdCsrXSlcbiAgICAgICAgO1xuICAgIHJldHVybiBzdCArIChmbGcgJiAyKTtcbn07XG4vLyBnemlwIGxlbmd0aFxudmFyIGd6bCA9IGZ1bmN0aW9uIChkKSB7XG4gICAgdmFyIGwgPSBkLmxlbmd0aDtcbiAgICByZXR1cm4gKGRbbCAtIDRdIHwgZFtsIC0gM10gPDwgOCB8IGRbbCAtIDJdIDw8IDE2IHwgZFtsIC0gMV0gPDwgMjQpID4+PiAwO1xufTtcbi8vIGd6aXAgaGVhZGVyIGxlbmd0aFxudmFyIGd6aGwgPSBmdW5jdGlvbiAobykgeyByZXR1cm4gMTAgKyAoby5maWxlbmFtZSA/IG8uZmlsZW5hbWUubGVuZ3RoICsgMSA6IDApOyB9O1xuLy8gemxpYiBoZWFkZXJcbnZhciB6bGggPSBmdW5jdGlvbiAoYywgbykge1xuICAgIHZhciBsdiA9IG8ubGV2ZWwsIGZsID0gbHYgPT0gMCA/IDAgOiBsdiA8IDYgPyAxIDogbHYgPT0gOSA/IDMgOiAyO1xuICAgIGNbMF0gPSAxMjAsIGNbMV0gPSAoZmwgPDwgNikgfCAoby5kaWN0aW9uYXJ5ICYmIDMyKTtcbiAgICBjWzFdIHw9IDMxIC0gKChjWzBdIDw8IDgpIHwgY1sxXSkgJSAzMTtcbiAgICBpZiAoby5kaWN0aW9uYXJ5KSB7XG4gICAgICAgIHZhciBoID0gYWRsZXIoKTtcbiAgICAgICAgaC5wKG8uZGljdGlvbmFyeSk7XG4gICAgICAgIHdieXRlcyhjLCAyLCBoLmQoKSk7XG4gICAgfVxufTtcbi8vIHpsaWIgc3RhcnRcbnZhciB6bHMgPSBmdW5jdGlvbiAoZCwgZGljdCkge1xuICAgIGlmICgoZFswXSAmIDE1KSAhPSA4IHx8IChkWzBdID4+IDQpID4gNyB8fCAoKGRbMF0gPDwgOCB8IGRbMV0pICUgMzEpKVxuICAgICAgICBlcnIoNiwgJ2ludmFsaWQgemxpYiBkYXRhJyk7XG4gICAgaWYgKChkWzFdID4+IDUgJiAxKSA9PSArIWRpY3QpXG4gICAgICAgIGVycig2LCAnaW52YWxpZCB6bGliIGRhdGE6ICcgKyAoZFsxXSAmIDMyID8gJ25lZWQnIDogJ3VuZXhwZWN0ZWQnKSArICcgZGljdGlvbmFyeScpO1xuICAgIHJldHVybiAoZFsxXSA+PiAzICYgNCkgKyAyO1xufTtcbmZ1bmN0aW9uIFN0cm1PcHQob3B0cywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdHMgPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgY2IgPSBvcHRzLCBvcHRzID0ge307XG4gICAgdGhpcy5vbmRhdGEgPSBjYjtcbiAgICByZXR1cm4gb3B0cztcbn1cbi8qKlxuICogU3RyZWFtaW5nIERFRkxBVEUgY29tcHJlc3Npb25cbiAqL1xudmFyIERlZmxhdGUgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGVmbGF0ZShvcHRzLCBjYikge1xuICAgICAgICBpZiAodHlwZW9mIG9wdHMgPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiID0gb3B0cywgb3B0cyA9IHt9O1xuICAgICAgICB0aGlzLm9uZGF0YSA9IGNiO1xuICAgICAgICB0aGlzLm8gPSBvcHRzIHx8IHt9O1xuICAgICAgICB0aGlzLnMgPSB7IGw6IDAsIGk6IDMyNzY4LCB3OiAzMjc2OCwgejogMzI3NjggfTtcbiAgICAgICAgLy8gQnVmZmVyIGxlbmd0aCBtdXN0IGFsd2F5cyBiZSAwIG1vZCAzMjc2OCBmb3IgaW5kZXggY2FsY3VsYXRpb25zIHRvIGJlIGNvcnJlY3Qgd2hlbiBtb2RpZnlpbmcgaGVhZCBhbmQgcHJldlxuICAgICAgICAvLyA5ODMwNCA9IDMyNzY4IChsb29rYmFjaykgKyA2NTUzNiAoY29tbW9uIGNodW5rIHNpemUpXG4gICAgICAgIHRoaXMuYiA9IG5ldyB1OCg5ODMwNCk7XG4gICAgICAgIGlmICh0aGlzLm8uZGljdGlvbmFyeSkge1xuICAgICAgICAgICAgdmFyIGRpY3QgPSB0aGlzLm8uZGljdGlvbmFyeS5zdWJhcnJheSgtMzI3NjgpO1xuICAgICAgICAgICAgdGhpcy5iLnNldChkaWN0LCAzMjc2OCAtIGRpY3QubGVuZ3RoKTtcbiAgICAgICAgICAgIHRoaXMucy5pID0gMzI3NjggLSBkaWN0Lmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBEZWZsYXRlLnByb3RvdHlwZS5wID0gZnVuY3Rpb24gKGMsIGYpIHtcbiAgICAgICAgdGhpcy5vbmRhdGEoZG9wdChjLCB0aGlzLm8sIDAsIDAsIHRoaXMucyksIGYpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUHVzaGVzIGEgY2h1bmsgdG8gYmUgZGVmbGF0ZWRcbiAgICAgKiBAcGFyYW0gY2h1bmsgVGhlIGNodW5rIHRvIHB1c2hcbiAgICAgKiBAcGFyYW0gZmluYWwgV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNodW5rXG4gICAgICovXG4gICAgRGVmbGF0ZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9uZGF0YSlcbiAgICAgICAgICAgIGVycig1KTtcbiAgICAgICAgaWYgKHRoaXMucy5sKVxuICAgICAgICAgICAgZXJyKDQpO1xuICAgICAgICB2YXIgZW5kTGVuID0gY2h1bmsubGVuZ3RoICsgdGhpcy5zLno7XG4gICAgICAgIGlmIChlbmRMZW4gPiB0aGlzLmIubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoZW5kTGVuID4gMiAqIHRoaXMuYi5sZW5ndGggLSAzMjc2OCkge1xuICAgICAgICAgICAgICAgIHZhciBuZXdCdWYgPSBuZXcgdTgoZW5kTGVuICYgLTMyNzY4KTtcbiAgICAgICAgICAgICAgICBuZXdCdWYuc2V0KHRoaXMuYi5zdWJhcnJheSgwLCB0aGlzLnMueikpO1xuICAgICAgICAgICAgICAgIHRoaXMuYiA9IG5ld0J1ZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBzcGxpdCA9IHRoaXMuYi5sZW5ndGggLSB0aGlzLnMuejtcbiAgICAgICAgICAgIHRoaXMuYi5zZXQoY2h1bmsuc3ViYXJyYXkoMCwgc3BsaXQpLCB0aGlzLnMueik7XG4gICAgICAgICAgICB0aGlzLnMueiA9IHRoaXMuYi5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLnAodGhpcy5iLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmIuc2V0KHRoaXMuYi5zdWJhcnJheSgtMzI3NjgpKTtcbiAgICAgICAgICAgIHRoaXMuYi5zZXQoY2h1bmsuc3ViYXJyYXkoc3BsaXQpLCAzMjc2OCk7XG4gICAgICAgICAgICB0aGlzLnMueiA9IGNodW5rLmxlbmd0aCAtIHNwbGl0ICsgMzI3Njg7XG4gICAgICAgICAgICB0aGlzLnMuaSA9IDMyNzY2LCB0aGlzLnMudyA9IDMyNzY4O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5iLnNldChjaHVuaywgdGhpcy5zLnopO1xuICAgICAgICAgICAgdGhpcy5zLnogKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucy5sID0gZmluYWwgJiAxO1xuICAgICAgICBpZiAodGhpcy5zLnogPiB0aGlzLnMudyArIDgxOTEgfHwgZmluYWwpIHtcbiAgICAgICAgICAgIHRoaXMucCh0aGlzLmIsIGZpbmFsIHx8IGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMucy53ID0gdGhpcy5zLmksIHRoaXMucy5pIC09IDI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbmFsKSB7XG4gICAgICAgICAgICAvLyBjbGVhbnVwIHVubmVlZGVkIGJ1ZmZlcnMvc3RhdGUgdG8gcmVkdWNlIG1lbW9yeSB1c2FnZVxuICAgICAgICAgICAgdGhpcy5zID0gdGhpcy5vID0ge307XG4gICAgICAgICAgICB0aGlzLmIgPSBldDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogRmx1c2hlcyBidWZmZXJlZCB1bmNvbXByZXNzZWQgZGF0YS4gVXNlZnVsIHRvIGltbWVkaWF0ZWx5IHJldHJpZXZlIHRoZVxuICAgICAqIGRlZmxhdGVkIG91dHB1dCBmb3Igc21hbGwgaW5wdXRzLlxuICAgICAqIEBwYXJhbSBzeW5jIFdoZXRoZXIgdG8gZmx1c2ggdG8gYSBieXRlIGJvdW5kYXJ5LiBBIHN5bmMgZmx1c2ggdGFrZXMgNC01XG4gICAgICogICAgICAgICAgICAgZXh0cmEgYnl0ZXMsIGJ1dCBndWFyYW50ZWVzIGFsbCBwdXNoZWQgZGF0YSBpcyBpbW1lZGlhdGVseVxuICAgICAqICAgICAgICAgICAgIGRlY29tcHJlc3NpYmxlLiBBIHNlcGFyYXRlIERFRkxBVEUgc3RyZWFtIG1heSBiZSBjb25jYXRlbmF0ZWRcbiAgICAgKiAgICAgICAgICAgICB3aXRoIHRoZSBjdXJyZW50IG91dHB1dCBhZnRlciBhIHN5bmMgZmx1c2guXG4gICAgICovXG4gICAgRGVmbGF0ZS5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoc3luYykge1xuICAgICAgICBpZiAoIXRoaXMub25kYXRhKVxuICAgICAgICAgICAgZXJyKDUpO1xuICAgICAgICBpZiAodGhpcy5zLmwpXG4gICAgICAgICAgICBlcnIoNCk7XG4gICAgICAgIHRoaXMucCh0aGlzLmIsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5zLncgPSB0aGlzLnMuaSwgdGhpcy5zLmkgLT0gMjtcbiAgICAgICAgLy8gY291bGQgdGVjaG5pY2FsbHkgc2tpcCB3cml0aW5nIHRoZSB0eXBlLTAgYmxvY2sgZm9yICh0aGlzLnMuciAmIDcpID09IDAsXG4gICAgICAgIC8vIGJ1dCB0aGUgZGV0ZXJtaW5pc3RpYyB0cmFpbGVyICgwMCAwMCBGRiBGRikgaXMgdXNlZnVsIGluIHNvbWUgc2l0dWF0aW9uc1xuICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgICAgdmFyIGMgPSBuZXcgdTgoNik7XG4gICAgICAgICAgICBjWzBdID0gdGhpcy5zLnIgPj4gMztcbiAgICAgICAgICAgIC8vIHdyaXRlIGVtcHR5LCBub24tZmluYWwgdHlwZS0wIGJsb2NrXG4gICAgICAgICAgICB2YXIgZXAgPSB3ZmJsayhjLCB0aGlzLnMuciwgZXQpO1xuICAgICAgICAgICAgdGhpcy5zLnIgPSAwO1xuICAgICAgICAgICAgdGhpcy5vbmRhdGEoYy5zdWJhcnJheSgwLCBlcCA+PiAzKSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gRGVmbGF0ZTtcbn0oKSk7XG5leHBvcnQgeyBEZWZsYXRlIH07XG4vKipcbiAqIEFzeW5jaHJvbm91cyBzdHJlYW1pbmcgREVGTEFURSBjb21wcmVzc2lvblxuICovXG52YXIgQXN5bmNEZWZsYXRlID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEFzeW5jRGVmbGF0ZShvcHRzLCBjYikge1xuICAgICAgICBhc3RybWlmeShbXG4gICAgICAgICAgICBiRGZsdCxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIFthc3RybSwgRGVmbGF0ZV07IH1cbiAgICAgICAgXSwgdGhpcywgU3RybU9wdC5jYWxsKHRoaXMsIG9wdHMsIGNiKSwgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgICB2YXIgc3RybSA9IG5ldyBEZWZsYXRlKGV2LmRhdGEpO1xuICAgICAgICAgICAgb25tZXNzYWdlID0gYXN0cm0oc3RybSk7XG4gICAgICAgIH0sIDYsIDEpO1xuICAgIH1cbiAgICByZXR1cm4gQXN5bmNEZWZsYXRlO1xufSgpKTtcbmV4cG9ydCB7IEFzeW5jRGVmbGF0ZSB9O1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmxhdGUoZGF0YSwgb3B0cywgY2IpIHtcbiAgICBpZiAoIWNiKVxuICAgICAgICBjYiA9IG9wdHMsIG9wdHMgPSB7fTtcbiAgICBpZiAodHlwZW9mIGNiICE9ICdmdW5jdGlvbicpXG4gICAgICAgIGVycig3KTtcbiAgICByZXR1cm4gY2JpZnkoZGF0YSwgb3B0cywgW1xuICAgICAgICBiRGZsdCxcbiAgICBdLCBmdW5jdGlvbiAoZXYpIHsgcmV0dXJuIHBiZihkZWZsYXRlU3luYyhldi5kYXRhWzBdLCBldi5kYXRhWzFdKSk7IH0sIDAsIGNiKTtcbn1cbi8qKlxuICogQ29tcHJlc3NlcyBkYXRhIHdpdGggREVGTEFURSB3aXRob3V0IGFueSB3cmFwcGVyXG4gKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byBjb21wcmVzc1xuICogQHBhcmFtIG9wdHMgVGhlIGNvbXByZXNzaW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBkZWZsYXRlZCB2ZXJzaW9uIG9mIHRoZSBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZsYXRlU3luYyhkYXRhLCBvcHRzKSB7XG4gICAgcmV0dXJuIGRvcHQoZGF0YSwgb3B0cyB8fCB7fSwgMCwgMCk7XG59XG4vKipcbiAqIFN0cmVhbWluZyBERUZMQVRFIGRlY29tcHJlc3Npb25cbiAqL1xudmFyIEluZmxhdGUgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gSW5mbGF0ZShvcHRzLCBjYikge1xuICAgICAgICAvLyBubyBTdHJtT3B0IGhlcmUgdG8gYXZvaWQgYWRkaW5nIHRvIHdvcmtlcml6ZXJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRzID09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYiA9IG9wdHMsIG9wdHMgPSB7fTtcbiAgICAgICAgdGhpcy5vbmRhdGEgPSBjYjtcbiAgICAgICAgdmFyIGRpY3QgPSBvcHRzICYmIG9wdHMuZGljdGlvbmFyeSAmJiBvcHRzLmRpY3Rpb25hcnkuc3ViYXJyYXkoLTMyNzY4KTtcbiAgICAgICAgdGhpcy5zID0geyBpOiAwLCBiOiBkaWN0ID8gZGljdC5sZW5ndGggOiAwIH07XG4gICAgICAgIHRoaXMubyA9IG5ldyB1OCgzMjc2OCk7XG4gICAgICAgIHRoaXMucCA9IG5ldyB1OCgwKTtcbiAgICAgICAgaWYgKGRpY3QpXG4gICAgICAgICAgICB0aGlzLm8uc2V0KGRpY3QpO1xuICAgIH1cbiAgICBJbmZsYXRlLnByb3RvdHlwZS5lID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9uZGF0YSlcbiAgICAgICAgICAgIGVycig1KTtcbiAgICAgICAgaWYgKHRoaXMuZClcbiAgICAgICAgICAgIGVycig0KTtcbiAgICAgICAgaWYgKCF0aGlzLnAubGVuZ3RoKVxuICAgICAgICAgICAgdGhpcy5wID0gYztcbiAgICAgICAgZWxzZSBpZiAoYy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBuID0gbmV3IHU4KHRoaXMucC5sZW5ndGggKyBjLmxlbmd0aCk7XG4gICAgICAgICAgICBuLnNldCh0aGlzLnApLCBuLnNldChjLCB0aGlzLnAubGVuZ3RoKSwgdGhpcy5wID0gbjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgSW5mbGF0ZS5wcm90b3R5cGUuYyA9IGZ1bmN0aW9uIChmaW5hbCkge1xuICAgICAgICB0aGlzLnMuaSA9ICsodGhpcy5kID0gZmluYWwgfHwgZmFsc2UpO1xuICAgICAgICB2YXIgYnRzID0gdGhpcy5zLmI7XG4gICAgICAgIHZhciBkdCA9IGluZmx0KHRoaXMucCwgdGhpcy5zLCB0aGlzLm8pO1xuICAgICAgICB0aGlzLm9uZGF0YShzbGMoZHQsIGJ0cywgdGhpcy5zLmIpLCB0aGlzLmQpO1xuICAgICAgICB0aGlzLm8gPSBzbGMoZHQsIHRoaXMucy5iIC0gMzI3NjgpLCB0aGlzLnMuYiA9IHRoaXMuby5sZW5ndGg7XG4gICAgICAgIHRoaXMucCA9IHNsYyh0aGlzLnAsICh0aGlzLnMucCAvIDgpIHwgMCksIHRoaXMucy5wICY9IDc7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBQdXNoZXMgYSBjaHVuayB0byBiZSBpbmZsYXRlZFxuICAgICAqIEBwYXJhbSBjaHVuayBUaGUgY2h1bmsgdG8gcHVzaFxuICAgICAqIEBwYXJhbSBmaW5hbCBXaGV0aGVyIHRoaXMgaXMgdGhlIGZpbmFsIGNodW5rXG4gICAgICovXG4gICAgSW5mbGF0ZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgdGhpcy5lKGNodW5rKSwgdGhpcy5jKGZpbmFsKTtcbiAgICB9O1xuICAgIHJldHVybiBJbmZsYXRlO1xufSgpKTtcbmV4cG9ydCB7IEluZmxhdGUgfTtcbi8qKlxuICogQXN5bmNocm9ub3VzIHN0cmVhbWluZyBERUZMQVRFIGRlY29tcHJlc3Npb25cbiAqL1xudmFyIEFzeW5jSW5mbGF0ZSA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBBc3luY0luZmxhdGUob3B0cywgY2IpIHtcbiAgICAgICAgYXN0cm1pZnkoW1xuICAgICAgICAgICAgYkluZmx0LFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gW2FzdHJtLCBJbmZsYXRlXTsgfVxuICAgICAgICBdLCB0aGlzLCBTdHJtT3B0LmNhbGwodGhpcywgb3B0cywgY2IpLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICAgIHZhciBzdHJtID0gbmV3IEluZmxhdGUoZXYuZGF0YSk7XG4gICAgICAgICAgICBvbm1lc3NhZ2UgPSBhc3RybShzdHJtKTtcbiAgICAgICAgfSwgNywgMCk7XG4gICAgfVxuICAgIHJldHVybiBBc3luY0luZmxhdGU7XG59KCkpO1xuZXhwb3J0IHsgQXN5bmNJbmZsYXRlIH07XG5leHBvcnQgZnVuY3Rpb24gaW5mbGF0ZShkYXRhLCBvcHRzLCBjYikge1xuICAgIGlmICghY2IpXG4gICAgICAgIGNiID0gb3B0cywgb3B0cyA9IHt9O1xuICAgIGlmICh0eXBlb2YgY2IgIT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgZXJyKDcpO1xuICAgIHJldHVybiBjYmlmeShkYXRhLCBvcHRzLCBbXG4gICAgICAgIGJJbmZsdFxuICAgIF0sIGZ1bmN0aW9uIChldikgeyByZXR1cm4gcGJmKGluZmxhdGVTeW5jKGV2LmRhdGFbMF0sIGdvcHQoZXYuZGF0YVsxXSkpKTsgfSwgMSwgY2IpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGluZmxhdGVTeW5jKGRhdGEsIG9wdHMpIHtcbiAgICByZXR1cm4gaW5mbHQoZGF0YSwgeyBpOiAyIH0sIG9wdHMgJiYgb3B0cy5vdXQsIG9wdHMgJiYgb3B0cy5kaWN0aW9uYXJ5KTtcbn1cbi8vIGJlZm9yZSB5b3UgeWVsbCBhdCBtZSBmb3Igbm90IGp1c3QgdXNpbmcgZXh0ZW5kcywgbXkgcmVhc29uIGlzIHRoYXQgVFMgaW5oZXJpdGFuY2UgaXMgaGFyZCB0byB3b3JrZXJpemUuXG4vKipcbiAqIFN0cmVhbWluZyBHWklQIGNvbXByZXNzaW9uXG4gKi9cbnZhciBHemlwID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEd6aXAob3B0cywgY2IpIHtcbiAgICAgICAgdGhpcy5jID0gY3JjKCk7XG4gICAgICAgIHRoaXMubCA9IDA7XG4gICAgICAgIHRoaXMudiA9IDE7XG4gICAgICAgIERlZmxhdGUuY2FsbCh0aGlzLCBvcHRzLCBjYik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFB1c2hlcyBhIGNodW5rIHRvIGJlIEdaSVBwZWRcbiAgICAgKiBAcGFyYW0gY2h1bmsgVGhlIGNodW5rIHRvIHB1c2hcbiAgICAgKiBAcGFyYW0gZmluYWwgV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNodW5rXG4gICAgICovXG4gICAgR3ppcC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgdGhpcy5jLnAoY2h1bmspO1xuICAgICAgICB0aGlzLmwgKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICBEZWZsYXRlLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcywgY2h1bmssIGZpbmFsKTtcbiAgICB9O1xuICAgIEd6aXAucHJvdG90eXBlLnAgPSBmdW5jdGlvbiAoYywgZikge1xuICAgICAgICB2YXIgcmF3ID0gZG9wdChjLCB0aGlzLm8sIHRoaXMudiAmJiBnemhsKHRoaXMubyksIGYgJiYgOCwgdGhpcy5zKTtcbiAgICAgICAgaWYgKHRoaXMudilcbiAgICAgICAgICAgIGd6aChyYXcsIHRoaXMubyksIHRoaXMudiA9IDA7XG4gICAgICAgIGlmIChmKVxuICAgICAgICAgICAgd2J5dGVzKHJhdywgcmF3Lmxlbmd0aCAtIDgsIHRoaXMuYy5kKCkpLCB3Ynl0ZXMocmF3LCByYXcubGVuZ3RoIC0gNCwgdGhpcy5sKTtcbiAgICAgICAgdGhpcy5vbmRhdGEocmF3LCBmKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEZsdXNoZXMgYnVmZmVyZWQgdW5jb21wcmVzc2VkIGRhdGEuIFVzZWZ1bCB0byBpbW1lZGlhdGVseSByZXRyaWV2ZSB0aGVcbiAgICAgKiBHWklQcGVkIG91dHB1dCBmb3Igc21hbGwgaW5wdXRzLlxuICAgICAqIEBwYXJhbSBzeW5jIFdoZXRoZXIgdG8gZmx1c2ggdG8gYSBieXRlIGJvdW5kYXJ5LiBBIHN5bmMgZmx1c2ggdGFrZXMgNC01XG4gICAgICogICAgICAgICAgICAgZXh0cmEgYnl0ZXMsIGJ1dCBndWFyYW50ZWVzIGFsbCBwdXNoZWQgZGF0YSBpcyBpbW1lZGlhdGVseVxuICAgICAqICAgICAgICAgICAgIGRlY29tcHJlc3NpYmxlLlxuICAgICAqL1xuICAgIEd6aXAucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKHN5bmMpIHtcbiAgICAgICAgRGVmbGF0ZS5wcm90b3R5cGUuZmx1c2guY2FsbCh0aGlzLCBzeW5jKTtcbiAgICB9O1xuICAgIHJldHVybiBHemlwO1xufSgpKTtcbmV4cG9ydCB7IEd6aXAgfTtcbi8qKlxuICogQXN5bmNocm9ub3VzIHN0cmVhbWluZyBHWklQIGNvbXByZXNzaW9uXG4gKi9cbnZhciBBc3luY0d6aXAgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQXN5bmNHemlwKG9wdHMsIGNiKSB7XG4gICAgICAgIGFzdHJtaWZ5KFtcbiAgICAgICAgICAgIGJEZmx0LFxuICAgICAgICAgICAgZ3plLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyByZXR1cm4gW2FzdHJtLCBEZWZsYXRlLCBHemlwXTsgfVxuICAgICAgICBdLCB0aGlzLCBTdHJtT3B0LmNhbGwodGhpcywgb3B0cywgY2IpLCBmdW5jdGlvbiAoZXYpIHtcbiAgICAgICAgICAgIHZhciBzdHJtID0gbmV3IEd6aXAoZXYuZGF0YSk7XG4gICAgICAgICAgICBvbm1lc3NhZ2UgPSBhc3RybShzdHJtKTtcbiAgICAgICAgfSwgOCwgMSk7XG4gICAgfVxuICAgIHJldHVybiBBc3luY0d6aXA7XG59KCkpO1xuZXhwb3J0IHsgQXN5bmNHemlwIH07XG5leHBvcnQgZnVuY3Rpb24gZ3ppcChkYXRhLCBvcHRzLCBjYikge1xuICAgIGlmICghY2IpXG4gICAgICAgIGNiID0gb3B0cywgb3B0cyA9IHt9O1xuICAgIGlmICh0eXBlb2YgY2IgIT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgZXJyKDcpO1xuICAgIHJldHVybiBjYmlmeShkYXRhLCBvcHRzLCBbXG4gICAgICAgIGJEZmx0LFxuICAgICAgICBnemUsXG4gICAgICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIFtnemlwU3luY107IH1cbiAgICBdLCBmdW5jdGlvbiAoZXYpIHsgcmV0dXJuIHBiZihnemlwU3luYyhldi5kYXRhWzBdLCBldi5kYXRhWzFdKSk7IH0sIDIsIGNiKTtcbn1cbi8qKlxuICogQ29tcHJlc3NlcyBkYXRhIHdpdGggR1pJUFxuICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgdG8gY29tcHJlc3NcbiAqIEBwYXJhbSBvcHRzIFRoZSBjb21wcmVzc2lvbiBvcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgZ3ppcHBlZCB2ZXJzaW9uIG9mIHRoZSBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnemlwU3luYyhkYXRhLCBvcHRzKSB7XG4gICAgaWYgKCFvcHRzKVxuICAgICAgICBvcHRzID0ge307XG4gICAgdmFyIGMgPSBjcmMoKSwgbCA9IGRhdGEubGVuZ3RoO1xuICAgIGMucChkYXRhKTtcbiAgICB2YXIgZCA9IGRvcHQoZGF0YSwgb3B0cywgZ3pobChvcHRzKSwgOCksIHMgPSBkLmxlbmd0aDtcbiAgICByZXR1cm4gZ3poKGQsIG9wdHMpLCB3Ynl0ZXMoZCwgcyAtIDgsIGMuZCgpKSwgd2J5dGVzKGQsIHMgLSA0LCBsKSwgZDtcbn1cbi8qKlxuICogU3RyZWFtaW5nIHNpbmdsZSBvciBtdWx0aS1tZW1iZXIgR1pJUCBkZWNvbXByZXNzaW9uXG4gKi9cbnZhciBHdW56aXAgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gR3VuemlwKG9wdHMsIGNiKSB7XG4gICAgICAgIHRoaXMudiA9IDE7XG4gICAgICAgIHRoaXMuciA9IDA7XG4gICAgICAgIEluZmxhdGUuY2FsbCh0aGlzLCBvcHRzLCBjYik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFB1c2hlcyBhIGNodW5rIHRvIGJlIEdVTlpJUHBlZFxuICAgICAqIEBwYXJhbSBjaHVuayBUaGUgY2h1bmsgdG8gcHVzaFxuICAgICAqIEBwYXJhbSBmaW5hbCBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgY2h1bmtcbiAgICAgKi9cbiAgICBHdW56aXAucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGZpbmFsKSB7XG4gICAgICAgIEluZmxhdGUucHJvdG90eXBlLmUuY2FsbCh0aGlzLCBjaHVuayk7XG4gICAgICAgIHRoaXMuciArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLnYpIHtcbiAgICAgICAgICAgIHZhciBwID0gdGhpcy5wLnN1YmFycmF5KHRoaXMudiAtIDEpO1xuICAgICAgICAgICAgdmFyIHMgPSBwLmxlbmd0aCA+IDMgPyBnenMocCkgOiA0O1xuICAgICAgICAgICAgaWYgKHMgPiBwLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmICghZmluYWwpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudiA+IDEgJiYgdGhpcy5vbm1lbWJlcikge1xuICAgICAgICAgICAgICAgIHRoaXMub25tZW1iZXIodGhpcy5yIC0gcC5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wID0gcC5zdWJhcnJheShzKSwgdGhpcy52ID0gMDtcbiAgICAgICAgfVxuICAgICAgICAvLyBuZWNlc3NhcnkgdG8gcHJldmVudCBUUyBmcm9tIHVzaW5nIHRoZSBjbG9zdXJlIHZhbHVlXG4gICAgICAgIC8vIFRoaXMgYWxsb3dzIGZvciB3b3JrZXJpemF0aW9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseVxuICAgICAgICBJbmZsYXRlLnByb3RvdHlwZS5jLmNhbGwodGhpcywgMCk7XG4gICAgICAgIC8vIHByb2Nlc3MgY29uY2F0ZW5hdGVkIEdaSVBcbiAgICAgICAgaWYgKHRoaXMucy5mICYmICF0aGlzLnMubCkge1xuICAgICAgICAgICAgdGhpcy52ID0gc2hmdCh0aGlzLnMucCkgKyA5O1xuICAgICAgICAgICAgdGhpcy5zID0geyBpOiAwIH07XG4gICAgICAgICAgICB0aGlzLm8gPSBuZXcgdTgoMCk7XG4gICAgICAgICAgICB0aGlzLnB1c2gobmV3IHU4KDApLCBmaW5hbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZmluYWwpIHtcbiAgICAgICAgICAgIEluZmxhdGUucHJvdG90eXBlLmMuY2FsbCh0aGlzLCBmaW5hbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBHdW56aXA7XG59KCkpO1xuZXhwb3J0IHsgR3VuemlwIH07XG4vKipcbiAqIEFzeW5jaHJvbm91cyBzdHJlYW1pbmcgc2luZ2xlIG9yIG11bHRpLW1lbWJlciBHWklQIGRlY29tcHJlc3Npb25cbiAqL1xudmFyIEFzeW5jR3VuemlwID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEFzeW5jR3VuemlwKG9wdHMsIGNiKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGFzdHJtaWZ5KFtcbiAgICAgICAgICAgIGJJbmZsdCxcbiAgICAgICAgICAgIGd1emUsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBbYXN0cm0sIEluZmxhdGUsIEd1bnppcF07IH1cbiAgICAgICAgXSwgdGhpcywgU3RybU9wdC5jYWxsKHRoaXMsIG9wdHMsIGNiKSwgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgICB2YXIgc3RybSA9IG5ldyBHdW56aXAoZXYuZGF0YSk7XG4gICAgICAgICAgICBzdHJtLm9ubWVtYmVyID0gZnVuY3Rpb24gKG9mZnNldCkgeyByZXR1cm4gcG9zdE1lc3NhZ2Uob2Zmc2V0KTsgfTtcbiAgICAgICAgICAgIG9ubWVzc2FnZSA9IGFzdHJtKHN0cm0pO1xuICAgICAgICB9LCA5LCAwLCBmdW5jdGlvbiAob2Zmc2V0KSB7IHJldHVybiBfdGhpcy5vbm1lbWJlciAmJiBfdGhpcy5vbm1lbWJlcihvZmZzZXQpOyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIEFzeW5jR3VuemlwO1xufSgpKTtcbmV4cG9ydCB7IEFzeW5jR3VuemlwIH07XG5leHBvcnQgZnVuY3Rpb24gZ3VuemlwKGRhdGEsIG9wdHMsIGNiKSB7XG4gICAgaWYgKCFjYilcbiAgICAgICAgY2IgPSBvcHRzLCBvcHRzID0ge307XG4gICAgaWYgKHR5cGVvZiBjYiAhPSAnZnVuY3Rpb24nKVxuICAgICAgICBlcnIoNyk7XG4gICAgcmV0dXJuIGNiaWZ5KGRhdGEsIG9wdHMsIFtcbiAgICAgICAgYkluZmx0LFxuICAgICAgICBndXplLFxuICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBbZ3VuemlwU3luY107IH1cbiAgICBdLCBmdW5jdGlvbiAoZXYpIHsgcmV0dXJuIHBiZihndW56aXBTeW5jKGV2LmRhdGFbMF0sIGV2LmRhdGFbMV0pKTsgfSwgMywgY2IpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGd1bnppcFN5bmMoZGF0YSwgb3B0cykge1xuICAgIHZhciBzdCA9IGd6cyhkYXRhKTtcbiAgICBpZiAoc3QgKyA4ID4gZGF0YS5sZW5ndGgpXG4gICAgICAgIGVycig2LCAnaW52YWxpZCBnemlwIGRhdGEnKTtcbiAgICByZXR1cm4gaW5mbHQoZGF0YS5zdWJhcnJheShzdCwgLTgpLCB7IGk6IDIgfSwgb3B0cyAmJiBvcHRzLm91dCB8fCBuZXcgdTgoZ3psKGRhdGEpKSwgb3B0cyAmJiBvcHRzLmRpY3Rpb25hcnkpO1xufVxuLyoqXG4gKiBTdHJlYW1pbmcgWmxpYiBjb21wcmVzc2lvblxuICovXG52YXIgWmxpYiA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBabGliKG9wdHMsIGNiKSB7XG4gICAgICAgIHRoaXMuYyA9IGFkbGVyKCk7XG4gICAgICAgIHRoaXMudiA9IDE7XG4gICAgICAgIERlZmxhdGUuY2FsbCh0aGlzLCBvcHRzLCBjYik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFB1c2hlcyBhIGNodW5rIHRvIGJlIHpsaWJiZWRcbiAgICAgKiBAcGFyYW0gY2h1bmsgVGhlIGNodW5rIHRvIHB1c2hcbiAgICAgKiBAcGFyYW0gZmluYWwgV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNodW5rXG4gICAgICovXG4gICAgWmxpYi5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgdGhpcy5jLnAoY2h1bmspO1xuICAgICAgICBEZWZsYXRlLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcywgY2h1bmssIGZpbmFsKTtcbiAgICB9O1xuICAgIFpsaWIucHJvdG90eXBlLnAgPSBmdW5jdGlvbiAoYywgZikge1xuICAgICAgICB2YXIgcmF3ID0gZG9wdChjLCB0aGlzLm8sIHRoaXMudiAmJiAodGhpcy5vLmRpY3Rpb25hcnkgPyA2IDogMiksIGYgJiYgNCwgdGhpcy5zKTtcbiAgICAgICAgaWYgKHRoaXMudilcbiAgICAgICAgICAgIHpsaChyYXcsIHRoaXMubyksIHRoaXMudiA9IDA7XG4gICAgICAgIGlmIChmKVxuICAgICAgICAgICAgd2J5dGVzKHJhdywgcmF3Lmxlbmd0aCAtIDQsIHRoaXMuYy5kKCkpO1xuICAgICAgICB0aGlzLm9uZGF0YShyYXcsIGYpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogRmx1c2hlcyBidWZmZXJlZCB1bmNvbXByZXNzZWQgZGF0YS4gVXNlZnVsIHRvIGltbWVkaWF0ZWx5IHJldHJpZXZlIHRoZVxuICAgICAqIHpsaWJiZWQgb3V0cHV0IGZvciBzbWFsbCBpbnB1dHMuXG4gICAgICogQHBhcmFtIHN5bmMgV2hldGhlciB0byBmbHVzaCB0byBhIGJ5dGUgYm91bmRhcnkuIEEgc3luYyBmbHVzaCB0YWtlcyA0LTVcbiAgICAgKiAgICAgICAgICAgICBleHRyYSBieXRlcywgYnV0IGd1YXJhbnRlZXMgYWxsIHB1c2hlZCBkYXRhIGlzIGltbWVkaWF0ZWx5XG4gICAgICogICAgICAgICAgICAgZGVjb21wcmVzc2libGUuXG4gICAgICovXG4gICAgWmxpYi5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoc3luYykge1xuICAgICAgICBEZWZsYXRlLnByb3RvdHlwZS5mbHVzaC5jYWxsKHRoaXMsIHN5bmMpO1xuICAgIH07XG4gICAgcmV0dXJuIFpsaWI7XG59KCkpO1xuZXhwb3J0IHsgWmxpYiB9O1xuLyoqXG4gKiBBc3luY2hyb25vdXMgc3RyZWFtaW5nIFpsaWIgY29tcHJlc3Npb25cbiAqL1xudmFyIEFzeW5jWmxpYiA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBBc3luY1psaWIob3B0cywgY2IpIHtcbiAgICAgICAgYXN0cm1pZnkoW1xuICAgICAgICAgICAgYkRmbHQsXG4gICAgICAgICAgICB6bGUsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBbYXN0cm0sIERlZmxhdGUsIFpsaWJdOyB9XG4gICAgICAgIF0sIHRoaXMsIFN0cm1PcHQuY2FsbCh0aGlzLCBvcHRzLCBjYiksIGZ1bmN0aW9uIChldikge1xuICAgICAgICAgICAgdmFyIHN0cm0gPSBuZXcgWmxpYihldi5kYXRhKTtcbiAgICAgICAgICAgIG9ubWVzc2FnZSA9IGFzdHJtKHN0cm0pO1xuICAgICAgICB9LCAxMCwgMSk7XG4gICAgfVxuICAgIHJldHVybiBBc3luY1psaWI7XG59KCkpO1xuZXhwb3J0IHsgQXN5bmNabGliIH07XG5leHBvcnQgZnVuY3Rpb24gemxpYihkYXRhLCBvcHRzLCBjYikge1xuICAgIGlmICghY2IpXG4gICAgICAgIGNiID0gb3B0cywgb3B0cyA9IHt9O1xuICAgIGlmICh0eXBlb2YgY2IgIT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgZXJyKDcpO1xuICAgIHJldHVybiBjYmlmeShkYXRhLCBvcHRzLCBbXG4gICAgICAgIGJEZmx0LFxuICAgICAgICB6bGUsXG4gICAgICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIFt6bGliU3luY107IH1cbiAgICBdLCBmdW5jdGlvbiAoZXYpIHsgcmV0dXJuIHBiZih6bGliU3luYyhldi5kYXRhWzBdLCBldi5kYXRhWzFdKSk7IH0sIDQsIGNiKTtcbn1cbi8qKlxuICogQ29tcHJlc3MgZGF0YSB3aXRoIFpsaWJcbiAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIGNvbXByZXNzXG4gKiBAcGFyYW0gb3B0cyBUaGUgY29tcHJlc3Npb24gb3B0aW9uc1xuICogQHJldHVybnMgVGhlIHpsaWItY29tcHJlc3NlZCB2ZXJzaW9uIG9mIHRoZSBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB6bGliU3luYyhkYXRhLCBvcHRzKSB7XG4gICAgaWYgKCFvcHRzKVxuICAgICAgICBvcHRzID0ge307XG4gICAgdmFyIGEgPSBhZGxlcigpO1xuICAgIGEucChkYXRhKTtcbiAgICB2YXIgZCA9IGRvcHQoZGF0YSwgb3B0cywgb3B0cy5kaWN0aW9uYXJ5ID8gNiA6IDIsIDQpO1xuICAgIHJldHVybiB6bGgoZCwgb3B0cyksIHdieXRlcyhkLCBkLmxlbmd0aCAtIDQsIGEuZCgpKSwgZDtcbn1cbi8qKlxuICogU3RyZWFtaW5nIFpsaWIgZGVjb21wcmVzc2lvblxuICovXG52YXIgVW56bGliID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFVuemxpYihvcHRzLCBjYikge1xuICAgICAgICBJbmZsYXRlLmNhbGwodGhpcywgb3B0cywgY2IpO1xuICAgICAgICB0aGlzLnYgPSBvcHRzICYmIG9wdHMuZGljdGlvbmFyeSA/IDIgOiAxO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQdXNoZXMgYSBjaHVuayB0byBiZSB1bnpsaWJiZWRcbiAgICAgKiBAcGFyYW0gY2h1bmsgVGhlIGNodW5rIHRvIHB1c2hcbiAgICAgKiBAcGFyYW0gZmluYWwgV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNodW5rXG4gICAgICovXG4gICAgVW56bGliLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICBJbmZsYXRlLnByb3RvdHlwZS5lLmNhbGwodGhpcywgY2h1bmspO1xuICAgICAgICBpZiAodGhpcy52KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wLmxlbmd0aCA8IDYgJiYgIWZpbmFsKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMucCA9IHRoaXMucC5zdWJhcnJheSh6bHModGhpcy5wLCB0aGlzLnYgLSAxKSksIHRoaXMudiA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbmFsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wLmxlbmd0aCA8IDQpXG4gICAgICAgICAgICAgICAgZXJyKDYsICdpbnZhbGlkIHpsaWIgZGF0YScpO1xuICAgICAgICAgICAgdGhpcy5wID0gdGhpcy5wLnN1YmFycmF5KDAsIC00KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBuZWNlc3NhcnkgdG8gcHJldmVudCBUUyBmcm9tIHVzaW5nIHRoZSBjbG9zdXJlIHZhbHVlXG4gICAgICAgIC8vIFRoaXMgYWxsb3dzIGZvciB3b3JrZXJpemF0aW9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseVxuICAgICAgICBJbmZsYXRlLnByb3RvdHlwZS5jLmNhbGwodGhpcywgZmluYWwpO1xuICAgIH07XG4gICAgcmV0dXJuIFVuemxpYjtcbn0oKSk7XG5leHBvcnQgeyBVbnpsaWIgfTtcbi8qKlxuICogQXN5bmNocm9ub3VzIHN0cmVhbWluZyBabGliIGRlY29tcHJlc3Npb25cbiAqL1xudmFyIEFzeW5jVW56bGliID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEFzeW5jVW56bGliKG9wdHMsIGNiKSB7XG4gICAgICAgIGFzdHJtaWZ5KFtcbiAgICAgICAgICAgIGJJbmZsdCxcbiAgICAgICAgICAgIHp1bGUsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBbYXN0cm0sIEluZmxhdGUsIFVuemxpYl07IH1cbiAgICAgICAgXSwgdGhpcywgU3RybU9wdC5jYWxsKHRoaXMsIG9wdHMsIGNiKSwgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgICB2YXIgc3RybSA9IG5ldyBVbnpsaWIoZXYuZGF0YSk7XG4gICAgICAgICAgICBvbm1lc3NhZ2UgPSBhc3RybShzdHJtKTtcbiAgICAgICAgfSwgMTEsIDApO1xuICAgIH1cbiAgICByZXR1cm4gQXN5bmNVbnpsaWI7XG59KCkpO1xuZXhwb3J0IHsgQXN5bmNVbnpsaWIgfTtcbmV4cG9ydCBmdW5jdGlvbiB1bnpsaWIoZGF0YSwgb3B0cywgY2IpIHtcbiAgICBpZiAoIWNiKVxuICAgICAgICBjYiA9IG9wdHMsIG9wdHMgPSB7fTtcbiAgICBpZiAodHlwZW9mIGNiICE9ICdmdW5jdGlvbicpXG4gICAgICAgIGVycig3KTtcbiAgICByZXR1cm4gY2JpZnkoZGF0YSwgb3B0cywgW1xuICAgICAgICBiSW5mbHQsXG4gICAgICAgIHp1bGUsXG4gICAgICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIFt1bnpsaWJTeW5jXTsgfVxuICAgIF0sIGZ1bmN0aW9uIChldikgeyByZXR1cm4gcGJmKHVuemxpYlN5bmMoZXYuZGF0YVswXSwgZ29wdChldi5kYXRhWzFdKSkpOyB9LCA1LCBjYik7XG59XG5leHBvcnQgZnVuY3Rpb24gdW56bGliU3luYyhkYXRhLCBvcHRzKSB7XG4gICAgcmV0dXJuIGluZmx0KGRhdGEuc3ViYXJyYXkoemxzKGRhdGEsIG9wdHMgJiYgb3B0cy5kaWN0aW9uYXJ5KSwgLTQpLCB7IGk6IDIgfSwgb3B0cyAmJiBvcHRzLm91dCwgb3B0cyAmJiBvcHRzLmRpY3Rpb25hcnkpO1xufVxuLy8gRGVmYXVsdCBhbGdvcml0aG0gZm9yIGNvbXByZXNzaW9uICh1c2VkIGJlY2F1c2UgaGF2aW5nIGEga25vd24gb3V0cHV0IHNpemUgYWxsb3dzIGZhc3RlciBkZWNvbXByZXNzaW9uKVxuZXhwb3J0IHsgZ3ppcCBhcyBjb21wcmVzcywgQXN5bmNHemlwIGFzIEFzeW5jQ29tcHJlc3MgfTtcbmV4cG9ydCB7IGd6aXBTeW5jIGFzIGNvbXByZXNzU3luYywgR3ppcCBhcyBDb21wcmVzcyB9O1xuLyoqXG4gKiBTdHJlYW1pbmcgR1pJUCwgWmxpYiwgb3IgcmF3IERFRkxBVEUgZGVjb21wcmVzc2lvblxuICovXG52YXIgRGVjb21wcmVzcyA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEZWNvbXByZXNzKG9wdHMsIGNiKSB7XG4gICAgICAgIHRoaXMubyA9IFN0cm1PcHQuY2FsbCh0aGlzLCBvcHRzLCBjYikgfHwge307XG4gICAgICAgIHRoaXMuRyA9IEd1bnppcDtcbiAgICAgICAgdGhpcy5JID0gSW5mbGF0ZTtcbiAgICAgICAgdGhpcy5aID0gVW56bGliO1xuICAgIH1cbiAgICAvLyBpbml0IHN1YnN0cmVhbVxuICAgIC8vIG92ZXJyaWRlbiBieSBBc3luY0RlY29tcHJlc3NcbiAgICBEZWNvbXByZXNzLnByb3RvdHlwZS5pID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLnMub25kYXRhID0gZnVuY3Rpb24gKGRhdCwgZmluYWwpIHtcbiAgICAgICAgICAgIF90aGlzLm9uZGF0YShkYXQsIGZpbmFsKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFB1c2hlcyBhIGNodW5rIHRvIGJlIGRlY29tcHJlc3NlZFxuICAgICAqIEBwYXJhbSBjaHVuayBUaGUgY2h1bmsgdG8gcHVzaFxuICAgICAqIEBwYXJhbSBmaW5hbCBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgY2h1bmtcbiAgICAgKi9cbiAgICBEZWNvbXByZXNzLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICBpZiAoIXRoaXMub25kYXRhKVxuICAgICAgICAgICAgZXJyKDUpO1xuICAgICAgICBpZiAoIXRoaXMucykge1xuICAgICAgICAgICAgaWYgKHRoaXMucCAmJiB0aGlzLnAubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG4gPSBuZXcgdTgodGhpcy5wLmxlbmd0aCArIGNodW5rLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgbi5zZXQodGhpcy5wKSwgbi5zZXQoY2h1bmssIHRoaXMucC5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMucCA9IGNodW5rO1xuICAgICAgICAgICAgaWYgKHRoaXMucC5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zID0gKHRoaXMucFswXSA9PSAzMSAmJiB0aGlzLnBbMV0gPT0gMTM5ICYmIHRoaXMucFsyXSA9PSA4KVxuICAgICAgICAgICAgICAgICAgICA/IG5ldyB0aGlzLkcodGhpcy5vKVxuICAgICAgICAgICAgICAgICAgICA6ICgodGhpcy5wWzBdICYgMTUpICE9IDggfHwgKHRoaXMucFswXSA+PiA0KSA+IDcgfHwgKCh0aGlzLnBbMF0gPDwgOCB8IHRoaXMucFsxXSkgJSAzMSkpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyB0aGlzLkkodGhpcy5vKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXcgdGhpcy5aKHRoaXMubyk7XG4gICAgICAgICAgICAgICAgdGhpcy5pKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zLnB1c2godGhpcy5wLCBmaW5hbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnMucHVzaChjaHVuaywgZmluYWwpO1xuICAgIH07XG4gICAgcmV0dXJuIERlY29tcHJlc3M7XG59KCkpO1xuZXhwb3J0IHsgRGVjb21wcmVzcyB9O1xuLyoqXG4gKiBBc3luY2hyb25vdXMgc3RyZWFtaW5nIEdaSVAsIFpsaWIsIG9yIHJhdyBERUZMQVRFIGRlY29tcHJlc3Npb25cbiAqL1xudmFyIEFzeW5jRGVjb21wcmVzcyA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBBc3luY0RlY29tcHJlc3Mob3B0cywgY2IpIHtcbiAgICAgICAgRGVjb21wcmVzcy5jYWxsKHRoaXMsIG9wdHMsIGNiKTtcbiAgICAgICAgdGhpcy5xdWV1ZWRTaXplID0gMDtcbiAgICAgICAgdGhpcy5HID0gQXN5bmNHdW56aXA7XG4gICAgICAgIHRoaXMuSSA9IEFzeW5jSW5mbGF0ZTtcbiAgICAgICAgdGhpcy5aID0gQXN5bmNVbnpsaWI7XG4gICAgfVxuICAgIEFzeW5jRGVjb21wcmVzcy5wcm90b3R5cGUuaSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdGhpcy5zLm9uZGF0YSA9IGZ1bmN0aW9uIChlcnIsIGRhdCwgZmluYWwpIHtcbiAgICAgICAgICAgIF90aGlzLm9uZGF0YShlcnIsIGRhdCwgZmluYWwpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnMub25kcmFpbiA9IGZ1bmN0aW9uIChzaXplKSB7XG4gICAgICAgICAgICBfdGhpcy5xdWV1ZWRTaXplIC09IHNpemU7XG4gICAgICAgICAgICBpZiAoX3RoaXMub25kcmFpbilcbiAgICAgICAgICAgICAgICBfdGhpcy5vbmRyYWluKHNpemUpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUHVzaGVzIGEgY2h1bmsgdG8gYmUgZGVjb21wcmVzc2VkXG4gICAgICogQHBhcmFtIGNodW5rIFRoZSBjaHVuayB0byBwdXNoXG4gICAgICogQHBhcmFtIGZpbmFsIFdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdCBjaHVua1xuICAgICAqL1xuICAgIEFzeW5jRGVjb21wcmVzcy5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgdGhpcy5xdWV1ZWRTaXplICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgRGVjb21wcmVzcy5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIGNodW5rLCBmaW5hbCk7XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNEZWNvbXByZXNzO1xufSgpKTtcbmV4cG9ydCB7IEFzeW5jRGVjb21wcmVzcyB9O1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29tcHJlc3MoZGF0YSwgb3B0cywgY2IpIHtcbiAgICBpZiAoIWNiKVxuICAgICAgICBjYiA9IG9wdHMsIG9wdHMgPSB7fTtcbiAgICBpZiAodHlwZW9mIGNiICE9ICdmdW5jdGlvbicpXG4gICAgICAgIGVycig3KTtcbiAgICByZXR1cm4gKGRhdGFbMF0gPT0gMzEgJiYgZGF0YVsxXSA9PSAxMzkgJiYgZGF0YVsyXSA9PSA4KVxuICAgICAgICA/IGd1bnppcChkYXRhLCBvcHRzLCBjYilcbiAgICAgICAgOiAoKGRhdGFbMF0gJiAxNSkgIT0gOCB8fCAoZGF0YVswXSA+PiA0KSA+IDcgfHwgKChkYXRhWzBdIDw8IDggfCBkYXRhWzFdKSAlIDMxKSlcbiAgICAgICAgICAgID8gaW5mbGF0ZShkYXRhLCBvcHRzLCBjYilcbiAgICAgICAgICAgIDogdW56bGliKGRhdGEsIG9wdHMsIGNiKTtcbn1cbi8qKlxuICogRXhwYW5kcyBjb21wcmVzc2VkIEdaSVAsIFpsaWIsIG9yIHJhdyBERUZMQVRFIGRhdGEsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0aW5nIHRoZSBmb3JtYXRcbiAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIGRlY29tcHJlc3NcbiAqIEBwYXJhbSBvcHRzIFRoZSBkZWNvbXByZXNzaW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBkZWNvbXByZXNzZWQgdmVyc2lvbiBvZiB0aGUgZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb21wcmVzc1N5bmMoZGF0YSwgb3B0cykge1xuICAgIHJldHVybiAoZGF0YVswXSA9PSAzMSAmJiBkYXRhWzFdID09IDEzOSAmJiBkYXRhWzJdID09IDgpXG4gICAgICAgID8gZ3VuemlwU3luYyhkYXRhLCBvcHRzKVxuICAgICAgICA6ICgoZGF0YVswXSAmIDE1KSAhPSA4IHx8IChkYXRhWzBdID4+IDQpID4gNyB8fCAoKGRhdGFbMF0gPDwgOCB8IGRhdGFbMV0pICUgMzEpKVxuICAgICAgICAgICAgPyBpbmZsYXRlU3luYyhkYXRhLCBvcHRzKVxuICAgICAgICAgICAgOiB1bnpsaWJTeW5jKGRhdGEsIG9wdHMpO1xufVxuLy8gZmxhdHRlbiBhIGRpcmVjdG9yeSBzdHJ1Y3R1cmVcbnZhciBmbHRuID0gZnVuY3Rpb24gKGQsIHAsIHQsIG8pIHtcbiAgICBmb3IgKHZhciBrIGluIGQpIHtcbiAgICAgICAgdmFyIHZhbCA9IGRba10sIG4gPSBwICsgaywgb3AgPSBvO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKVxuICAgICAgICAgICAgb3AgPSBtcmcobywgdmFsWzFdKSwgdmFsID0gdmFsWzBdO1xuICAgICAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCkpXG4gICAgICAgICAgICB0W25dID0gW3ZhbCwgb3BdO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRbbiArPSAnLyddID0gW25ldyB1OCgwKSwgb3BdO1xuICAgICAgICAgICAgZmx0bih2YWwsIG4sIHQsIG8pO1xuICAgICAgICB9XG4gICAgfVxufTtcbi8vIHRleHQgZW5jb2RlclxudmFyIHRlID0gdHlwZW9mIFRleHRFbmNvZGVyICE9ICd1bmRlZmluZWQnICYmIC8qI19fUFVSRV9fKi8gbmV3IFRleHRFbmNvZGVyKCk7XG4vLyB0ZXh0IGRlY29kZXJcbnZhciB0ZCA9IHR5cGVvZiBUZXh0RGVjb2RlciAhPSAndW5kZWZpbmVkJyAmJiAvKiNfX1BVUkVfXyovIG5ldyBUZXh0RGVjb2RlcigpO1xuLy8gdGV4dCBkZWNvZGVyIHN0cmVhbVxudmFyIHRkcyA9IDA7XG50cnkge1xuICAgIHRkLmRlY29kZShldCwgeyBzdHJlYW06IHRydWUgfSk7XG4gICAgdGRzID0gMTtcbn1cbmNhdGNoIChlKSB7IH1cbi8vIGRlY29kZSBVVEY4XG52YXIgZHV0ZjggPSBmdW5jdGlvbiAoZCkge1xuICAgIGZvciAodmFyIHIgPSAnJywgaSA9IDA7Oykge1xuICAgICAgICB2YXIgYyA9IGRbaSsrXTtcbiAgICAgICAgdmFyIGViID0gKGMgPiAxMjcpICsgKGMgPiAyMjMpICsgKGMgPiAyMzkpO1xuICAgICAgICBpZiAoaSArIGViID4gZC5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4geyBzOiByLCByOiBzbGMoZCwgaSAtIDEpIH07XG4gICAgICAgIGlmICghZWIpXG4gICAgICAgICAgICByICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gICAgICAgIGVsc2UgaWYgKGViID09IDMpIHtcbiAgICAgICAgICAgIGMgPSAoKGMgJiAxNSkgPDwgMTggfCAoZFtpKytdICYgNjMpIDw8IDEyIHwgKGRbaSsrXSAmIDYzKSA8PCA2IHwgKGRbaSsrXSAmIDYzKSkgLSA2NTUzNixcbiAgICAgICAgICAgICAgICByICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYgfCAoYyA+PiAxMCksIDU2MzIwIHwgKGMgJiAxMDIzKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZWIgJiAxKVxuICAgICAgICAgICAgciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjICYgMzEpIDw8IDYgfCAoZFtpKytdICYgNjMpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjICYgMTUpIDw8IDEyIHwgKGRbaSsrXSAmIDYzKSA8PCA2IHwgKGRbaSsrXSAmIDYzKSk7XG4gICAgfVxufTtcbi8qKlxuICogU3RyZWFtaW5nIFVURi04IGRlY29kaW5nXG4gKi9cbnZhciBEZWNvZGVVVEY4ID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBVVEYtOCBkZWNvZGluZyBzdHJlYW1cbiAgICAgKiBAcGFyYW0gY2IgVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbmV2ZXIgZGF0YSBpcyBkZWNvZGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gRGVjb2RlVVRGOChjYikge1xuICAgICAgICB0aGlzLm9uZGF0YSA9IGNiO1xuICAgICAgICBpZiAodGRzKVxuICAgICAgICAgICAgdGhpcy50ID0gbmV3IFRleHREZWNvZGVyKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMucCA9IGV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQdXNoZXMgYSBjaHVuayB0byBiZSBkZWNvZGVkIGZyb20gVVRGLTggYmluYXJ5XG4gICAgICogQHBhcmFtIGNodW5rIFRoZSBjaHVuayB0byBwdXNoXG4gICAgICogQHBhcmFtIGZpbmFsIFdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdCBjaHVua1xuICAgICAqL1xuICAgIERlY29kZVVURjgucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGZpbmFsKSB7XG4gICAgICAgIGlmICghdGhpcy5vbmRhdGEpXG4gICAgICAgICAgICBlcnIoNSk7XG4gICAgICAgIGZpbmFsID0gISFmaW5hbDtcbiAgICAgICAgaWYgKHRoaXMudCkge1xuICAgICAgICAgICAgdGhpcy5vbmRhdGEodGhpcy50LmRlY29kZShjaHVuaywgeyBzdHJlYW06IHRydWUgfSksIGZpbmFsKTtcbiAgICAgICAgICAgIGlmIChmaW5hbCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnQuZGVjb2RlKCkubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBlcnIoOCk7XG4gICAgICAgICAgICAgICAgdGhpcy50ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMucClcbiAgICAgICAgICAgIGVycig0KTtcbiAgICAgICAgdmFyIGRhdCA9IG5ldyB1OCh0aGlzLnAubGVuZ3RoICsgY2h1bmsubGVuZ3RoKTtcbiAgICAgICAgZGF0LnNldCh0aGlzLnApO1xuICAgICAgICBkYXQuc2V0KGNodW5rLCB0aGlzLnAubGVuZ3RoKTtcbiAgICAgICAgdmFyIF9hID0gZHV0ZjgoZGF0KSwgcyA9IF9hLnMsIHIgPSBfYS5yO1xuICAgICAgICBpZiAoZmluYWwpIHtcbiAgICAgICAgICAgIGlmIChyLmxlbmd0aClcbiAgICAgICAgICAgICAgICBlcnIoOCk7XG4gICAgICAgICAgICB0aGlzLnAgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMucCA9IHI7XG4gICAgICAgIHRoaXMub25kYXRhKHMsIGZpbmFsKTtcbiAgICB9O1xuICAgIHJldHVybiBEZWNvZGVVVEY4O1xufSgpKTtcbmV4cG9ydCB7IERlY29kZVVURjggfTtcbi8qKlxuICogU3RyZWFtaW5nIFVURi04IGVuY29kaW5nXG4gKi9cbnZhciBFbmNvZGVVVEY4ID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBVVEYtOCBkZWNvZGluZyBzdHJlYW1cbiAgICAgKiBAcGFyYW0gY2IgVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbmV2ZXIgZGF0YSBpcyBlbmNvZGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gRW5jb2RlVVRGOChjYikge1xuICAgICAgICB0aGlzLm9uZGF0YSA9IGNiO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQdXNoZXMgYSBjaHVuayB0byBiZSBlbmNvZGVkIHRvIFVURi04XG4gICAgICogQHBhcmFtIGNodW5rIFRoZSBzdHJpbmcgZGF0YSB0byBwdXNoXG4gICAgICogQHBhcmFtIGZpbmFsIFdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdCBjaHVua1xuICAgICAqL1xuICAgIEVuY29kZVVURjgucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGZpbmFsKSB7XG4gICAgICAgIGlmICghdGhpcy5vbmRhdGEpXG4gICAgICAgICAgICBlcnIoNSk7XG4gICAgICAgIGlmICh0aGlzLmQpXG4gICAgICAgICAgICBlcnIoNCk7XG4gICAgICAgIHRoaXMub25kYXRhKHN0clRvVTgoY2h1bmspLCB0aGlzLmQgPSBmaW5hbCB8fCBmYWxzZSk7XG4gICAgfTtcbiAgICByZXR1cm4gRW5jb2RlVVRGODtcbn0oKSk7XG5leHBvcnQgeyBFbmNvZGVVVEY4IH07XG4vKipcbiAqIENvbnZlcnRzIGEgc3RyaW5nIGludG8gYSBVaW50OEFycmF5IGZvciB1c2Ugd2l0aCBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIG1ldGhvZHNcbiAqIEBwYXJhbSBzdHIgVGhlIHN0cmluZyB0byBlbmNvZGVcbiAqIEBwYXJhbSBsYXRpbjEgV2hldGhlciBvciBub3QgdG8gaW50ZXJwcmV0IHRoZSBkYXRhIGFzIExhdGluLTEuIFRoaXMgc2hvdWxkXG4gKiAgICAgICAgICAgICAgIG5vdCBuZWVkIHRvIGJlIHRydWUgdW5sZXNzIGRlY29kaW5nIGEgYmluYXJ5IHN0cmluZy5cbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgZW5jb2RlZCBpbiBVVEYtOC9MYXRpbi0xIGJpbmFyeVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyVG9VOChzdHIsIGxhdGluMSkge1xuICAgIGlmIChsYXRpbjEpIHtcbiAgICAgICAgdmFyIGFyXzEgPSBuZXcgdTgoc3RyLmxlbmd0aCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgYXJfMVtpXSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICByZXR1cm4gYXJfMTtcbiAgICB9XG4gICAgaWYgKHRlKVxuICAgICAgICByZXR1cm4gdGUuZW5jb2RlKHN0cik7XG4gICAgdmFyIGwgPSBzdHIubGVuZ3RoO1xuICAgIHZhciBhciA9IG5ldyB1OChzdHIubGVuZ3RoICsgKHN0ci5sZW5ndGggPj4gMSkpO1xuICAgIHZhciBhaSA9IDA7XG4gICAgdmFyIHcgPSBmdW5jdGlvbiAodikgeyBhclthaSsrXSA9IHY7IH07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgaWYgKGFpICsgNSA+IGFyLmxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIG4gPSBuZXcgdTgoYWkgKyA4ICsgKChsIC0gaSkgPDwgMSkpO1xuICAgICAgICAgICAgbi5zZXQoYXIpO1xuICAgICAgICAgICAgYXIgPSBuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4IHx8IGxhdGluMSlcbiAgICAgICAgICAgIHcoYyk7XG4gICAgICAgIGVsc2UgaWYgKGMgPCAyMDQ4KVxuICAgICAgICAgICAgdygxOTIgfCAoYyA+PiA2KSksIHcoMTI4IHwgKGMgJiA2MykpO1xuICAgICAgICBlbHNlIGlmIChjID4gNTUyOTUgJiYgYyA8IDU3MzQ0KVxuICAgICAgICAgICAgYyA9IDY1NTM2ICsgKGMgJiAxMDIzIDw8IDEwKSB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMTAyMyksXG4gICAgICAgICAgICAgICAgdygyNDAgfCAoYyA+PiAxOCkpLCB3KDEyOCB8ICgoYyA+PiAxMikgJiA2MykpLCB3KDEyOCB8ICgoYyA+PiA2KSAmIDYzKSksIHcoMTI4IHwgKGMgJiA2MykpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB3KDIyNCB8IChjID4+IDEyKSksIHcoMTI4IHwgKChjID4+IDYpICYgNjMpKSwgdygxMjggfCAoYyAmIDYzKSk7XG4gICAgfVxuICAgIHJldHVybiBzbGMoYXIsIDAsIGFpKTtcbn1cbi8qKlxuICogQ29udmVydHMgYSBVaW50OEFycmF5IHRvIGEgc3RyaW5nXG4gKiBAcGFyYW0gZGF0IFRoZSBkYXRhIHRvIGRlY29kZSB0byBzdHJpbmdcbiAqIEBwYXJhbSBsYXRpbjEgV2hldGhlciBvciBub3QgdG8gaW50ZXJwcmV0IHRoZSBkYXRhIGFzIExhdGluLTEuIFRoaXMgc2hvdWxkXG4gKiAgICAgICAgICAgICAgIG5vdCBuZWVkIHRvIGJlIHRydWUgdW5sZXNzIGVuY29kaW5nIHRvIGJpbmFyeSBzdHJpbmcuXG4gKiBAcmV0dXJucyBUaGUgb3JpZ2luYWwgVVRGLTgvTGF0aW4tMSBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0ckZyb21VOChkYXQsIGxhdGluMSkge1xuICAgIGlmIChsYXRpbjEpIHtcbiAgICAgICAgdmFyIHIgPSAnJztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXQubGVuZ3RoOyBpICs9IDE2Mzg0KVxuICAgICAgICAgICAgciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGRhdC5zdWJhcnJheShpLCBpICsgMTYzODQpKTtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRkKSB7XG4gICAgICAgIHJldHVybiB0ZC5kZWNvZGUoZGF0KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBfYSA9IGR1dGY4KGRhdCksIHMgPSBfYS5zLCByID0gX2EucjtcbiAgICAgICAgaWYgKHIubGVuZ3RoKVxuICAgICAgICAgICAgZXJyKDgpO1xuICAgICAgICByZXR1cm4gcztcbiAgICB9XG59XG47XG4vLyBkZWZsYXRlIGJpdCBmbGFnXG52YXIgZGJmID0gZnVuY3Rpb24gKGwpIHsgcmV0dXJuIGwgPT0gMSA/IDMgOiBsIDwgNiA/IDIgOiBsID09IDkgPyAxIDogMDsgfTtcbi8vIHNraXAgbG9jYWwgemlwIGhlYWRlclxudmFyIHNsemggPSBmdW5jdGlvbiAoZCwgYikgeyByZXR1cm4gYiArIDMwICsgYjIoZCwgYiArIDI2KSArIGIyKGQsIGIgKyAyOCk7IH07XG4vLyByZWFkIHppcCBoZWFkZXJcbnZhciB6aCA9IGZ1bmN0aW9uIChkLCBiLCB6KSB7XG4gICAgdmFyIGZubCA9IGIyKGQsIGIgKyAyOCksIGVmbCA9IGIyKGQsIGIgKyAzMCksIGZuID0gc3RyRnJvbVU4KGQuc3ViYXJyYXkoYiArIDQ2LCBiICsgNDYgKyBmbmwpLCAhKGIyKGQsIGIgKyA4KSAmIDIwNDgpKSwgZXMgPSBiICsgNDYgKyBmbmw7XG4gICAgdmFyIF9hID0gejY0aHMoZCwgZXMsIGVmbCwgeiwgYjQoZCwgYiArIDIwKSwgYjQoZCwgYiArIDI0KSwgYjQoZCwgYiArIDQyKSksIHNjID0gX2FbMF0sIHN1ID0gX2FbMV0sIG9mZiA9IF9hWzJdO1xuICAgIHJldHVybiBbYjIoZCwgYiArIDEwKSwgc2MsIHN1LCBmbiwgZXMgKyBlZmwgKyBiMihkLCBiICsgMzIpLCBvZmZdO1xufTtcbi8vIHJlYWQgemlwNjQgaGVhZGVyIHNpemVzXG52YXIgejY0aHMgPSBmdW5jdGlvbiAoZCwgYiwgbCwgeiwgc2MsIHN1LCBvZmYpIHtcbiAgICB2YXIgbnNjID0gc2MgPT0gNDI5NDk2NzI5NSwgbnN1ID0gc3UgPT0gNDI5NDk2NzI5NSwgbm9mZiA9IG9mZiA9PSA0Mjk0OTY3Mjk1LCBlID0gYiArIGw7XG4gICAgdmFyIG5mID0gbnNjICsgbnN1ICsgbm9mZjtcbiAgICBpZiAoeiAmJiBuZikge1xuICAgICAgICBmb3IgKDsgYiArIDQgPCBlOyBiICs9IDQgKyBiMihkLCBiICsgMikpIHtcbiAgICAgICAgICAgIGlmIChiMihkLCBiKSA9PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgbnNjID8gYjgoZCwgYiArIDQgKyA4ICogbnN1KSA6IHNjLFxuICAgICAgICAgICAgICAgICAgICBuc3UgPyBiOChkLCBiICsgNCkgOiBzdSxcbiAgICAgICAgICAgICAgICAgICAgbm9mZiA/IGI4KGQsIGIgKyA0ICsgOCAqIChuc3UgKyBuc2MpKSA6IG9mZixcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8geiA9PSAyIGZvciB1bmtub3duIHdoZXRoZXIgb3Igbm90IHppcDY0XG4gICAgICAgIGlmICh6IDwgMilcbiAgICAgICAgICAgIGVycigxMyk7XG4gICAgfVxuICAgIHJldHVybiBbc2MsIHN1LCBvZmYsIDBdO1xufTtcbi8vIGV4dHJhIGZpZWxkIGxlbmd0aFxudmFyIGV4ZmwgPSBmdW5jdGlvbiAoZXgpIHtcbiAgICB2YXIgbGUgPSAwO1xuICAgIGlmIChleCkge1xuICAgICAgICBmb3IgKHZhciBrIGluIGV4KSB7XG4gICAgICAgICAgICB2YXIgbCA9IGV4W2tdLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChsID4gNjU1MzUpXG4gICAgICAgICAgICAgICAgZXJyKDkpO1xuICAgICAgICAgICAgbGUgKz0gbCArIDQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxlO1xufTtcbi8vIHdyaXRlIHppcCBoZWFkZXJcbnZhciB3emggPSBmdW5jdGlvbiAoZCwgYiwgZiwgZm4sIHUsIGMsIGNlLCBjbykge1xuICAgIHZhciBmbCA9IGZuLmxlbmd0aCwgZXggPSBmLmV4dHJhLCBjb2wgPSBjbyAmJiBjby5sZW5ndGg7XG4gICAgdmFyIGV4bCA9IGV4ZmwoZXgpO1xuICAgIHdieXRlcyhkLCBiLCBjZSAhPSBudWxsID8gMHgyMDE0QjUwIDogMHg0MDM0QjUwKSwgYiArPSA0O1xuICAgIGlmIChjZSAhPSBudWxsKVxuICAgICAgICBkW2IrK10gPSAyMCwgZFtiKytdID0gZi5vcztcbiAgICBkW2JdID0gMjAsIGIgKz0gMjsgLy8gc3BlYyBjb21wbGlhbmNlPyB3aGF0J3MgdGhhdD9cbiAgICBkW2IrK10gPSAoZi5mbGFnIDw8IDEpIHwgKGMgPCAwICYmIDgpLCBkW2IrK10gPSB1ICYmIDg7XG4gICAgZFtiKytdID0gZi5jb21wcmVzc2lvbiAmIDI1NSwgZFtiKytdID0gZi5jb21wcmVzc2lvbiA+PiA4O1xuICAgIHZhciBkdCA9IG5ldyBEYXRlKGYubXRpbWUgPT0gbnVsbCA/IERhdGUubm93KCkgOiBmLm10aW1lKSwgeSA9IGR0LmdldEZ1bGxZZWFyKCkgLSAxOTgwO1xuICAgIGlmICh5IDwgMCB8fCB5ID4gMTE5KVxuICAgICAgICBlcnIoMTApO1xuICAgIHdieXRlcyhkLCBiLCAoeSA8PCAyNSkgfCAoKGR0LmdldE1vbnRoKCkgKyAxKSA8PCAyMSkgfCAoZHQuZ2V0RGF0ZSgpIDw8IDE2KSB8IChkdC5nZXRIb3VycygpIDw8IDExKSB8IChkdC5nZXRNaW51dGVzKCkgPDwgNSkgfCAoZHQuZ2V0U2Vjb25kcygpID4+IDEpKSwgYiArPSA0O1xuICAgIGlmIChjICE9IC0xKSB7XG4gICAgICAgIHdieXRlcyhkLCBiLCBmLmNyYyk7XG4gICAgICAgIHdieXRlcyhkLCBiICsgNCwgYyA8IDAgPyAtYyAtIDIgOiBjKTtcbiAgICAgICAgd2J5dGVzKGQsIGIgKyA4LCBmLnNpemUpO1xuICAgIH1cbiAgICB3Ynl0ZXMoZCwgYiArIDEyLCBmbCk7XG4gICAgd2J5dGVzKGQsIGIgKyAxNCwgZXhsKSwgYiArPSAxNjtcbiAgICBpZiAoY2UgIT0gbnVsbCkge1xuICAgICAgICB3Ynl0ZXMoZCwgYiwgY29sKTtcbiAgICAgICAgd2J5dGVzKGQsIGIgKyA2LCBmLmF0dHJzKTtcbiAgICAgICAgd2J5dGVzKGQsIGIgKyAxMCwgY2UpLCBiICs9IDE0O1xuICAgIH1cbiAgICBkLnNldChmbiwgYik7XG4gICAgYiArPSBmbDtcbiAgICBpZiAoZXhsKSB7XG4gICAgICAgIGZvciAodmFyIGsgaW4gZXgpIHtcbiAgICAgICAgICAgIHZhciBleGYgPSBleFtrXSwgbCA9IGV4Zi5sZW5ndGg7XG4gICAgICAgICAgICB3Ynl0ZXMoZCwgYiwgK2spO1xuICAgICAgICAgICAgd2J5dGVzKGQsIGIgKyAyLCBsKTtcbiAgICAgICAgICAgIGQuc2V0KGV4ZiwgYiArIDQpLCBiICs9IDQgKyBsO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjb2wpXG4gICAgICAgIGQuc2V0KGNvLCBiKSwgYiArPSBjb2w7XG4gICAgcmV0dXJuIGI7XG59O1xuLy8gd3JpdGUgemlwIGZvb3RlciAoZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5KVxudmFyIHd6ZiA9IGZ1bmN0aW9uIChvLCBiLCBjLCBkLCBlKSB7XG4gICAgd2J5dGVzKG8sIGIsIDB4NjA1NEI1MCk7IC8vIHNraXAgZGlza1xuICAgIHdieXRlcyhvLCBiICsgOCwgYyk7XG4gICAgd2J5dGVzKG8sIGIgKyAxMCwgYyk7XG4gICAgd2J5dGVzKG8sIGIgKyAxMiwgZCk7XG4gICAgd2J5dGVzKG8sIGIgKyAxNiwgZSk7XG59O1xuLyoqXG4gKiBBIHBhc3MtdGhyb3VnaCBzdHJlYW0gdG8ga2VlcCBkYXRhIHVuY29tcHJlc3NlZCBpbiBhIFpJUCBhcmNoaXZlLlxuICovXG52YXIgWmlwUGFzc1Rocm91Z2ggPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHBhc3MtdGhyb3VnaCBzdHJlYW0gdGhhdCBjYW4gYmUgYWRkZWQgdG8gWklQIGFyY2hpdmVzXG4gICAgICogQHBhcmFtIGZpbGVuYW1lIFRoZSBmaWxlbmFtZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIGRhdGEgc3RyZWFtXG4gICAgICovXG4gICAgZnVuY3Rpb24gWmlwUGFzc1Rocm91Z2goZmlsZW5hbWUpIHtcbiAgICAgICAgdGhpcy5maWxlbmFtZSA9IGZpbGVuYW1lO1xuICAgICAgICB0aGlzLmMgPSBjcmMoKTtcbiAgICAgICAgdGhpcy5zaXplID0gMDtcbiAgICAgICAgdGhpcy5jb21wcmVzc2lvbiA9IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByb2Nlc3NlcyBhIGNodW5rIGFuZCBwdXNoZXMgdG8gdGhlIG91dHB1dCBzdHJlYW0uIFlvdSBjYW4gb3ZlcnJpZGUgdGhpc1xuICAgICAqIG1ldGhvZCBpbiBhIHN1YmNsYXNzIGZvciBjdXN0b20gYmVoYXZpb3IsIGJ1dCBieSBkZWZhdWx0IHRoaXMgcGFzc2VzXG4gICAgICogdGhlIGRhdGEgdGhyb3VnaC4gWW91IG11c3QgY2FsbCB0aGlzLm9uZGF0YShlcnIsIGNodW5rLCBmaW5hbCkgYXQgc29tZVxuICAgICAqIHBvaW50IGluIHRoaXMgbWV0aG9kLlxuICAgICAqIEBwYXJhbSBjaHVuayBUaGUgY2h1bmsgdG8gcHJvY2Vzc1xuICAgICAqIEBwYXJhbSBmaW5hbCBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgY2h1bmtcbiAgICAgKi9cbiAgICBaaXBQYXNzVGhyb3VnaC5wcm90b3R5cGUucHJvY2VzcyA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgdGhpcy5vbmRhdGEobnVsbCwgY2h1bmssIGZpbmFsKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFB1c2hlcyBhIGNodW5rIHRvIGJlIGFkZGVkLiBJZiB5b3UgYXJlIHN1YmNsYXNzaW5nIHRoaXMgd2l0aCBhIGN1c3RvbVxuICAgICAqIGNvbXByZXNzaW9uIGFsZ29yaXRobSwgbm90ZSB0aGF0IHlvdSBtdXN0IHB1c2ggZGF0YSBmcm9tIHRoZSBzb3VyY2VcbiAgICAgKiBmaWxlIG9ubHksIHByZS1jb21wcmVzc2lvbi5cbiAgICAgKiBAcGFyYW0gY2h1bmsgVGhlIGNodW5rIHRvIHB1c2hcbiAgICAgKiBAcGFyYW0gZmluYWwgV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNodW5rXG4gICAgICovXG4gICAgWmlwUGFzc1Rocm91Z2gucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGZpbmFsKSB7XG4gICAgICAgIGlmICghdGhpcy5vbmRhdGEpXG4gICAgICAgICAgICBlcnIoNSk7XG4gICAgICAgIHRoaXMuYy5wKGNodW5rKTtcbiAgICAgICAgdGhpcy5zaXplICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgaWYgKGZpbmFsKVxuICAgICAgICAgICAgdGhpcy5jcmMgPSB0aGlzLmMuZCgpO1xuICAgICAgICAvLyB3ZSBzaG91bGRuJ3QgcmVhbGx5IGRvIHRoaXMgY2FzdCwgYnV0IHByb3Blcmx5IGhhbmRsaW5nIEFycmF5QnVmZmVyTGlrZVxuICAgICAgICAvLyBtYWtlcyB0aGUgQVBJIHVuZXJnb25vbWljIHdpdGggQnVmZmVyXG4gICAgICAgIHRoaXMucHJvY2VzcyhjaHVuaywgZmluYWwgfHwgZmFsc2UpO1xuICAgIH07XG4gICAgcmV0dXJuIFppcFBhc3NUaHJvdWdoO1xufSgpKTtcbmV4cG9ydCB7IFppcFBhc3NUaHJvdWdoIH07XG4vLyBJIGRvbid0IGV4dGVuZCBiZWNhdXNlIFR5cGVTY3JpcHQgZXh0ZW5zaW9uIGFkZHMgMWtCIG9mIHJ1bnRpbWUgYmxvYXRcbi8qKlxuICogU3RyZWFtaW5nIERFRkxBVEUgY29tcHJlc3Npb24gZm9yIFpJUCBhcmNoaXZlcy4gUHJlZmVyIHVzaW5nIEFzeW5jWmlwRGVmbGF0ZVxuICogZm9yIGJldHRlciBwZXJmb3JtYW5jZVxuICovXG52YXIgWmlwRGVmbGF0ZSA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgREVGTEFURSBzdHJlYW0gdGhhdCBjYW4gYmUgYWRkZWQgdG8gWklQIGFyY2hpdmVzXG4gICAgICogQHBhcmFtIGZpbGVuYW1lIFRoZSBmaWxlbmFtZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIGRhdGEgc3RyZWFtXG4gICAgICogQHBhcmFtIG9wdHMgVGhlIGNvbXByZXNzaW9uIG9wdGlvbnNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBaaXBEZWZsYXRlKGZpbGVuYW1lLCBvcHRzKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICghb3B0cylcbiAgICAgICAgICAgIG9wdHMgPSB7fTtcbiAgICAgICAgWmlwUGFzc1Rocm91Z2guY2FsbCh0aGlzLCBmaWxlbmFtZSk7XG4gICAgICAgIHRoaXMuZCA9IG5ldyBEZWZsYXRlKG9wdHMsIGZ1bmN0aW9uIChkYXQsIGZpbmFsKSB7XG4gICAgICAgICAgICBfdGhpcy5vbmRhdGEobnVsbCwgZGF0LCBmaW5hbCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbXByZXNzaW9uID0gODtcbiAgICAgICAgdGhpcy5mbGFnID0gZGJmKG9wdHMubGV2ZWwpO1xuICAgIH1cbiAgICBaaXBEZWZsYXRlLnByb3RvdHlwZS5wcm9jZXNzID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kLnB1c2goY2h1bmssIGZpbmFsKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5vbmRhdGEoZSwgbnVsbCwgZmluYWwpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBQdXNoZXMgYSBjaHVuayB0byBiZSBkZWZsYXRlZFxuICAgICAqIEBwYXJhbSBjaHVuayBUaGUgY2h1bmsgdG8gcHVzaFxuICAgICAqIEBwYXJhbSBmaW5hbCBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgY2h1bmtcbiAgICAgKi9cbiAgICBaaXBEZWZsYXRlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICBaaXBQYXNzVGhyb3VnaC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIGNodW5rLCBmaW5hbCk7XG4gICAgfTtcbiAgICByZXR1cm4gWmlwRGVmbGF0ZTtcbn0oKSk7XG5leHBvcnQgeyBaaXBEZWZsYXRlIH07XG4vKipcbiAqIEFzeW5jaHJvbm91cyBzdHJlYW1pbmcgREVGTEFURSBjb21wcmVzc2lvbiBmb3IgWklQIGFyY2hpdmVzXG4gKi9cbnZhciBBc3luY1ppcERlZmxhdGUgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhc3luY2hyb25vdXMgREVGTEFURSBzdHJlYW0gdGhhdCBjYW4gYmUgYWRkZWQgdG8gWklQIGFyY2hpdmVzXG4gICAgICogQHBhcmFtIGZpbGVuYW1lIFRoZSBmaWxlbmFtZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIGRhdGEgc3RyZWFtXG4gICAgICogQHBhcmFtIG9wdHMgVGhlIGNvbXByZXNzaW9uIG9wdGlvbnNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBBc3luY1ppcERlZmxhdGUoZmlsZW5hbWUsIG9wdHMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCFvcHRzKVxuICAgICAgICAgICAgb3B0cyA9IHt9O1xuICAgICAgICBaaXBQYXNzVGhyb3VnaC5jYWxsKHRoaXMsIGZpbGVuYW1lKTtcbiAgICAgICAgdGhpcy5kID0gbmV3IEFzeW5jRGVmbGF0ZShvcHRzLCBmdW5jdGlvbiAoZXJyLCBkYXQsIGZpbmFsKSB7XG4gICAgICAgICAgICBfdGhpcy5vbmRhdGEoZXJyLCBkYXQsIGZpbmFsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29tcHJlc3Npb24gPSA4O1xuICAgICAgICB0aGlzLmZsYWcgPSBkYmYob3B0cy5sZXZlbCk7XG4gICAgICAgIHRoaXMudGVybWluYXRlID0gdGhpcy5kLnRlcm1pbmF0ZTtcbiAgICB9XG4gICAgQXN5bmNaaXBEZWZsYXRlLnByb3RvdHlwZS5wcm9jZXNzID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICB0aGlzLmQucHVzaChjaHVuaywgZmluYWwpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUHVzaGVzIGEgY2h1bmsgdG8gYmUgZGVmbGF0ZWRcbiAgICAgKiBAcGFyYW0gY2h1bmsgVGhlIGNodW5rIHRvIHB1c2hcbiAgICAgKiBAcGFyYW0gZmluYWwgV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNodW5rXG4gICAgICovXG4gICAgQXN5bmNaaXBEZWZsYXRlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICBaaXBQYXNzVGhyb3VnaC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIGNodW5rLCBmaW5hbCk7XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNaaXBEZWZsYXRlO1xufSgpKTtcbmV4cG9ydCB7IEFzeW5jWmlwRGVmbGF0ZSB9O1xuLy8gVE9ETzogQmV0dGVyIHRyZWUgc2hha2luZ1xuLyoqXG4gKiBBIHppcHBhYmxlIGFyY2hpdmUgdG8gd2hpY2ggZmlsZXMgY2FuIGluY3JlbWVudGFsbHkgYmUgYWRkZWRcbiAqL1xudmFyIFppcCA9IC8qI19fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGVtcHR5IFpJUCBhcmNoaXZlIHRvIHdoaWNoIGZpbGVzIGNhbiBiZSBhZGRlZFxuICAgICAqIEBwYXJhbSBjYiBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuZXZlciBkYXRhIGZvciB0aGUgZ2VuZXJhdGVkIFpJUCBhcmNoaXZlXG4gICAgICogICAgICAgICAgIGlzIGF2YWlsYWJsZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIFppcChjYikge1xuICAgICAgICB0aGlzLm9uZGF0YSA9IGNiO1xuICAgICAgICB0aGlzLnUgPSBbXTtcbiAgICAgICAgdGhpcy5kID0gMTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGZpbGUgdG8gdGhlIFpJUCBhcmNoaXZlXG4gICAgICogQHBhcmFtIGZpbGUgVGhlIGZpbGUgc3RyZWFtIHRvIGFkZFxuICAgICAqL1xuICAgIFppcC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKGZpbGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCF0aGlzLm9uZGF0YSlcbiAgICAgICAgICAgIGVycig1KTtcbiAgICAgICAgLy8gZmluaXNoaW5nIG9yIGZpbmlzaGVkXG4gICAgICAgIGlmICh0aGlzLmQgJiAyKVxuICAgICAgICAgICAgdGhpcy5vbmRhdGEoZXJyKDQgKyAodGhpcy5kICYgMSkgKiA4LCAwLCAxKSwgbnVsbCwgZmFsc2UpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBmID0gc3RyVG9VOChmaWxlLmZpbGVuYW1lKSwgZmxfMSA9IGYubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGNvbSA9IGZpbGUuY29tbWVudCwgbyA9IGNvbSAmJiBzdHJUb1U4KGNvbSk7XG4gICAgICAgICAgICB2YXIgdSA9IGZsXzEgIT0gZmlsZS5maWxlbmFtZS5sZW5ndGggfHwgKG8gJiYgKGNvbS5sZW5ndGggIT0gby5sZW5ndGgpKTtcbiAgICAgICAgICAgIHZhciBobF8xID0gZmxfMSArIGV4ZmwoZmlsZS5leHRyYSkgKyAzMDtcbiAgICAgICAgICAgIGlmIChmbF8xID4gNjU1MzUpXG4gICAgICAgICAgICAgICAgdGhpcy5vbmRhdGEoZXJyKDExLCAwLCAxKSwgbnVsbCwgZmFsc2UpO1xuICAgICAgICAgICAgdmFyIGhlYWRlciA9IG5ldyB1OChobF8xKTtcbiAgICAgICAgICAgIHd6aChoZWFkZXIsIDAsIGZpbGUsIGYsIHUsIC0xKTtcbiAgICAgICAgICAgIHZhciBjaGtzXzEgPSBbaGVhZGVyXTtcbiAgICAgICAgICAgIHZhciBwQWxsXzEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBjaGtzXzIgPSBjaGtzXzE7IF9pIDwgY2hrc18yLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2hrID0gY2hrc18yW19pXTtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMub25kYXRhKG51bGwsIGNoaywgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjaGtzXzEgPSBbXTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgdHJfMSA9IHRoaXMuZDtcbiAgICAgICAgICAgIHRoaXMuZCA9IDA7XG4gICAgICAgICAgICB2YXIgaW5kXzEgPSB0aGlzLnUubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIHVmXzEgPSBtcmcoZmlsZSwge1xuICAgICAgICAgICAgICAgIGY6IGYsXG4gICAgICAgICAgICAgICAgdTogdSxcbiAgICAgICAgICAgICAgICBvOiBvLFxuICAgICAgICAgICAgICAgIHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGUudGVybWluYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcEFsbF8xKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0cl8xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnh0ID0gX3RoaXMudVtpbmRfMSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG54dClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBueHQucigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmQgPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRyXzEgPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIGNsXzEgPSAwO1xuICAgICAgICAgICAgZmlsZS5vbmRhdGEgPSBmdW5jdGlvbiAoZXJyLCBkYXQsIGZpbmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5vbmRhdGEoZXJyLCBkYXQsIGZpbmFsKTtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjbF8xICs9IGRhdC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGNoa3NfMS5wdXNoKGRhdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRkID0gbmV3IHU4KDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdieXRlcyhkZCwgMCwgMHg4MDc0QjUwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdieXRlcyhkZCwgNCwgZmlsZS5jcmMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2J5dGVzKGRkLCA4LCBjbF8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdieXRlcyhkZCwgMTIsIGZpbGUuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGtzXzEucHVzaChkZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1Zl8xLmMgPSBjbF8xLCB1Zl8xLmIgPSBobF8xICsgY2xfMSArIDE2LCB1Zl8xLmNyYyA9IGZpbGUuY3JjLCB1Zl8xLnNpemUgPSBmaWxlLnNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJfMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Zl8xLnIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyXzEgPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRyXzEpXG4gICAgICAgICAgICAgICAgICAgICAgICBwQWxsXzEoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy51LnB1c2godWZfMSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEVuZHMgdGhlIHByb2Nlc3Mgb2YgYWRkaW5nIGZpbGVzIGFuZCBwcmVwYXJlcyB0byBlbWl0IHRoZSBmaW5hbCBjaHVua3MuXG4gICAgICogVGhpcyAqbXVzdCogYmUgY2FsbGVkIGFmdGVyIGFkZGluZyBhbGwgZGVzaXJlZCBmaWxlcyBmb3IgdGhlIHJlc3VsdGluZ1xuICAgICAqIFpJUCBmaWxlIHRvIHdvcmsgcHJvcGVybHkuXG4gICAgICovXG4gICAgWmlwLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICh0aGlzLmQgJiAyKSB7XG4gICAgICAgICAgICB0aGlzLm9uZGF0YShlcnIoNCArICh0aGlzLmQgJiAxKSAqIDgsIDAsIDEpLCBudWxsLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kKVxuICAgICAgICAgICAgdGhpcy5lKCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMudS5wdXNoKHtcbiAgICAgICAgICAgICAgICByOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKF90aGlzLmQgJiAxKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMudS5zcGxpY2UoLTEsIDEpO1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5lKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0OiBmdW5jdGlvbiAoKSB7IH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLmQgPSAzO1xuICAgIH07XG4gICAgWmlwLnByb3RvdHlwZS5lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYnQgPSAwLCBsID0gMCwgdGwgPSAwO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy51OyBfaSA8IF9hLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgdmFyIGYgPSBfYVtfaV07XG4gICAgICAgICAgICB0bCArPSA0NiArIGYuZi5sZW5ndGggKyBleGZsKGYuZXh0cmEpICsgKGYubyA/IGYuby5sZW5ndGggOiAwKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3V0ID0gbmV3IHU4KHRsICsgMjIpO1xuICAgICAgICBmb3IgKHZhciBfYiA9IDAsIF9jID0gdGhpcy51OyBfYiA8IF9jLmxlbmd0aDsgX2IrKykge1xuICAgICAgICAgICAgdmFyIGYgPSBfY1tfYl07XG4gICAgICAgICAgICB3emgob3V0LCBidCwgZiwgZi5mLCBmLnUsIC1mLmMgLSAyLCBsLCBmLm8pO1xuICAgICAgICAgICAgYnQgKz0gNDYgKyBmLmYubGVuZ3RoICsgZXhmbChmLmV4dHJhKSArIChmLm8gPyBmLm8ubGVuZ3RoIDogMCksIGwgKz0gZi5iO1xuICAgICAgICB9XG4gICAgICAgIHd6ZihvdXQsIGJ0LCB0aGlzLnUubGVuZ3RoLCB0bCwgbCk7XG4gICAgICAgIHRoaXMub25kYXRhKG51bGwsIG91dCwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuZCA9IDI7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBBIG1ldGhvZCB0byB0ZXJtaW5hdGUgYW55IGludGVybmFsIHdvcmtlcnMgdXNlZCBieSB0aGUgc3RyZWFtLiBTdWJzZXF1ZW50XG4gICAgICogY2FsbHMgdG8gYWRkKCkgd2lsbCBmYWlsLlxuICAgICAqL1xuICAgIFppcC5wcm90b3R5cGUudGVybWluYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy51OyBfaSA8IF9hLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgdmFyIGYgPSBfYVtfaV07XG4gICAgICAgICAgICBmLnQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmQgPSAyO1xuICAgIH07XG4gICAgcmV0dXJuIFppcDtcbn0oKSk7XG5leHBvcnQgeyBaaXAgfTtcbmV4cG9ydCBmdW5jdGlvbiB6aXAoZGF0YSwgb3B0cywgY2IpIHtcbiAgICBpZiAoIWNiKVxuICAgICAgICBjYiA9IG9wdHMsIG9wdHMgPSB7fTtcbiAgICBpZiAodHlwZW9mIGNiICE9ICdmdW5jdGlvbicpXG4gICAgICAgIGVycig3KTtcbiAgICB2YXIgciA9IHt9O1xuICAgIGZsdG4oZGF0YSwgJycsIHIsIG9wdHMpO1xuICAgIHZhciBrID0gT2JqZWN0LmtleXMocik7XG4gICAgdmFyIGxmdCA9IGsubGVuZ3RoLCBvID0gMCwgdG90ID0gMDtcbiAgICB2YXIgc2xmdCA9IGxmdCwgZmlsZXMgPSBuZXcgQXJyYXkobGZ0KTtcbiAgICB2YXIgdGVybSA9IFtdO1xuICAgIHZhciB0QWxsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlcm0ubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICB0ZXJtW2ldKCk7XG4gICAgfTtcbiAgICB2YXIgY2JkID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgbXQoZnVuY3Rpb24gKCkgeyBjYihhLCBiKTsgfSk7XG4gICAgfTtcbiAgICBtdChmdW5jdGlvbiAoKSB7IGNiZCA9IGNiOyB9KTtcbiAgICB2YXIgY2JmID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb3V0ID0gbmV3IHU4KHRvdCArIDIyKSwgb2UgPSBvLCBjZGwgPSB0b3QgLSBvO1xuICAgICAgICB0b3QgPSAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsZnQ7ICsraSkge1xuICAgICAgICAgICAgdmFyIGYgPSBmaWxlc1tpXTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIGwgPSBmLmMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHd6aChvdXQsIHRvdCwgZiwgZi5mLCBmLnUsIGwpO1xuICAgICAgICAgICAgICAgIHZhciBiYWRkID0gMzAgKyBmLmYubGVuZ3RoICsgZXhmbChmLmV4dHJhKTtcbiAgICAgICAgICAgICAgICB2YXIgbG9jID0gdG90ICsgYmFkZDtcbiAgICAgICAgICAgICAgICBvdXQuc2V0KGYuYywgbG9jKTtcbiAgICAgICAgICAgICAgICB3emgob3V0LCBvLCBmLCBmLmYsIGYudSwgbCwgdG90LCBmLm0pLCBvICs9IDE2ICsgYmFkZCArIChmLm0gPyBmLm0ubGVuZ3RoIDogMCksIHRvdCA9IGxvYyArIGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYmQoZSwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgd3pmKG91dCwgbywgZmlsZXMubGVuZ3RoLCBjZGwsIG9lKTtcbiAgICAgICAgY2JkKG51bGwsIG91dCk7XG4gICAgfTtcbiAgICBpZiAoIWxmdClcbiAgICAgICAgY2JmKCk7XG4gICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoaSkge1xuICAgICAgICB2YXIgZm4gPSBrW2ldO1xuICAgICAgICB2YXIgX2EgPSByW2ZuXSwgZmlsZSA9IF9hWzBdLCBwID0gX2FbMV07XG4gICAgICAgIHZhciBjID0gY3JjKCksIHNpemUgPSBmaWxlLmxlbmd0aDtcbiAgICAgICAgYy5wKGZpbGUpO1xuICAgICAgICB2YXIgZiA9IHN0clRvVTgoZm4pLCBzID0gZi5sZW5ndGg7XG4gICAgICAgIHZhciBjb20gPSBwLmNvbW1lbnQsIG0gPSBjb20gJiYgc3RyVG9VOChjb20pLCBtcyA9IG0gJiYgbS5sZW5ndGg7XG4gICAgICAgIHZhciBleGwgPSBleGZsKHAuZXh0cmEpO1xuICAgICAgICB2YXIgY29tcHJlc3Npb24gPSBwLmxldmVsID09IDAgPyAwIDogODtcbiAgICAgICAgdmFyIGNibCA9IGZ1bmN0aW9uIChlLCBkKSB7XG4gICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgIHRBbGwoKTtcbiAgICAgICAgICAgICAgICBjYmQoZSwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbCA9IGQubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZpbGVzW2ldID0gbXJnKHAsIHtcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgY3JjOiBjLmQoKSxcbiAgICAgICAgICAgICAgICAgICAgYzogZCxcbiAgICAgICAgICAgICAgICAgICAgZjogZixcbiAgICAgICAgICAgICAgICAgICAgbTogbSxcbiAgICAgICAgICAgICAgICAgICAgdTogcyAhPSBmbi5sZW5ndGggfHwgKG0gJiYgKGNvbS5sZW5ndGggIT0gbXMpKSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb246IGNvbXByZXNzaW9uXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbyArPSAzMCArIHMgKyBleGwgKyBsO1xuICAgICAgICAgICAgICAgIHRvdCArPSA3NiArIDIgKiAocyArIGV4bCkgKyAobXMgfHwgMCkgKyBsO1xuICAgICAgICAgICAgICAgIGlmICghLS1sZnQpXG4gICAgICAgICAgICAgICAgICAgIGNiZigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAocyA+IDY1NTM1KVxuICAgICAgICAgICAgY2JsKGVycigxMSwgMCwgMSksIG51bGwpO1xuICAgICAgICBpZiAoIWNvbXByZXNzaW9uKVxuICAgICAgICAgICAgY2JsKG51bGwsIGZpbGUpO1xuICAgICAgICBlbHNlIGlmIChzaXplIDwgMTYwMDAwKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNibChudWxsLCBkZWZsYXRlU3luYyhmaWxlLCBwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNibChlLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0ZXJtLnB1c2goZGVmbGF0ZShmaWxlLCBwLCBjYmwpKTtcbiAgICB9O1xuICAgIC8vIENhbm5vdCB1c2UgbGZ0IGJlY2F1c2UgaXQgY2FuIGRlY3JlYXNlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGZ0OyArK2kpIHtcbiAgICAgICAgX2xvb3BfMShpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRBbGw7XG59XG4vKipcbiAqIFN5bmNocm9ub3VzbHkgY3JlYXRlcyBhIFpJUCBmaWxlLiBQcmVmZXIgdXNpbmcgYHppcGAgZm9yIGJldHRlciBwZXJmb3JtYW5jZVxuICogd2l0aCBtb3JlIHRoYW4gb25lIGZpbGUuXG4gKiBAcGFyYW0gZGF0YSBUaGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgdGhlIFpJUCBhcmNoaXZlXG4gKiBAcGFyYW0gb3B0cyBUaGUgbWFpbiBvcHRpb25zLCBtZXJnZWQgd2l0aCBwZXItZmlsZSBvcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgZ2VuZXJhdGVkIFpJUCBhcmNoaXZlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB6aXBTeW5jKGRhdGEsIG9wdHMpIHtcbiAgICBpZiAoIW9wdHMpXG4gICAgICAgIG9wdHMgPSB7fTtcbiAgICB2YXIgciA9IHt9O1xuICAgIHZhciBmaWxlcyA9IFtdO1xuICAgIGZsdG4oZGF0YSwgJycsIHIsIG9wdHMpO1xuICAgIHZhciBvID0gMDtcbiAgICB2YXIgdG90ID0gMDtcbiAgICBmb3IgKHZhciBmbiBpbiByKSB7XG4gICAgICAgIHZhciBfYSA9IHJbZm5dLCBmaWxlID0gX2FbMF0sIHAgPSBfYVsxXTtcbiAgICAgICAgdmFyIGNvbXByZXNzaW9uID0gcC5sZXZlbCA9PSAwID8gMCA6IDg7XG4gICAgICAgIHZhciBmID0gc3RyVG9VOChmbiksIHMgPSBmLmxlbmd0aDtcbiAgICAgICAgdmFyIGNvbSA9IHAuY29tbWVudCwgbSA9IGNvbSAmJiBzdHJUb1U4KGNvbSksIG1zID0gbSAmJiBtLmxlbmd0aDtcbiAgICAgICAgdmFyIGV4bCA9IGV4ZmwocC5leHRyYSk7XG4gICAgICAgIGlmIChzID4gNjU1MzUpXG4gICAgICAgICAgICBlcnIoMTEpO1xuICAgICAgICB2YXIgZCA9IGNvbXByZXNzaW9uID8gZGVmbGF0ZVN5bmMoZmlsZSwgcCkgOiBmaWxlLCBsID0gZC5sZW5ndGg7XG4gICAgICAgIHZhciBjID0gY3JjKCk7XG4gICAgICAgIGMucChmaWxlKTtcbiAgICAgICAgZmlsZXMucHVzaChtcmcocCwge1xuICAgICAgICAgICAgc2l6ZTogZmlsZS5sZW5ndGgsXG4gICAgICAgICAgICBjcmM6IGMuZCgpLFxuICAgICAgICAgICAgYzogZCxcbiAgICAgICAgICAgIGY6IGYsXG4gICAgICAgICAgICBtOiBtLFxuICAgICAgICAgICAgdTogcyAhPSBmbi5sZW5ndGggfHwgKG0gJiYgKGNvbS5sZW5ndGggIT0gbXMpKSxcbiAgICAgICAgICAgIG86IG8sXG4gICAgICAgICAgICBjb21wcmVzc2lvbjogY29tcHJlc3Npb25cbiAgICAgICAgfSkpO1xuICAgICAgICBvICs9IDMwICsgcyArIGV4bCArIGw7XG4gICAgICAgIHRvdCArPSA3NiArIDIgKiAocyArIGV4bCkgKyAobXMgfHwgMCkgKyBsO1xuICAgIH1cbiAgICB2YXIgb3V0ID0gbmV3IHU4KHRvdCArIDIyKSwgb2UgPSBvLCBjZGwgPSB0b3QgLSBvO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGYgPSBmaWxlc1tpXTtcbiAgICAgICAgd3poKG91dCwgZi5vLCBmLCBmLmYsIGYudSwgZi5jLmxlbmd0aCk7XG4gICAgICAgIHZhciBiYWRkID0gMzAgKyBmLmYubGVuZ3RoICsgZXhmbChmLmV4dHJhKTtcbiAgICAgICAgb3V0LnNldChmLmMsIGYubyArIGJhZGQpO1xuICAgICAgICB3emgob3V0LCBvLCBmLCBmLmYsIGYudSwgZi5jLmxlbmd0aCwgZi5vLCBmLm0pLCBvICs9IDE2ICsgYmFkZCArIChmLm0gPyBmLm0ubGVuZ3RoIDogMCk7XG4gICAgfVxuICAgIHd6ZihvdXQsIG8sIGZpbGVzLmxlbmd0aCwgY2RsLCBvZSk7XG4gICAgcmV0dXJuIG91dDtcbn1cbi8qKlxuICogU3RyZWFtaW5nIHBhc3MtdGhyb3VnaCBkZWNvbXByZXNzaW9uIGZvciBaSVAgYXJjaGl2ZXNcbiAqL1xudmFyIFVuemlwUGFzc1Rocm91Z2ggPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVW56aXBQYXNzVGhyb3VnaCgpIHtcbiAgICB9XG4gICAgVW56aXBQYXNzVGhyb3VnaC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZmluYWwpIHtcbiAgICAgICAgLy8gc2FtZSBhcyBaaXBQYXNzVGhyb3VnaDogY2FzdCB0byByZXRhaW4gQnVmZmVyIGVyZ29ub21pY3NcbiAgICAgICAgdGhpcy5vbmRhdGEobnVsbCwgY2h1bmssIGZpbmFsKTtcbiAgICB9O1xuICAgIFVuemlwUGFzc1Rocm91Z2guY29tcHJlc3Npb24gPSAwO1xuICAgIHJldHVybiBVbnppcFBhc3NUaHJvdWdoO1xufSgpKTtcbmV4cG9ydCB7IFVuemlwUGFzc1Rocm91Z2ggfTtcbi8qKlxuICogU3RyZWFtaW5nIERFRkxBVEUgZGVjb21wcmVzc2lvbiBmb3IgWklQIGFyY2hpdmVzLiBQcmVmZXIgQXN5bmNaaXBJbmZsYXRlIGZvclxuICogYmV0dGVyIHBlcmZvcm1hbmNlLlxuICovXG52YXIgVW56aXBJbmZsYXRlID0gLyojX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBERUZMQVRFIGRlY29tcHJlc3Npb24gdGhhdCBjYW4gYmUgdXNlZCBpbiBaSVAgYXJjaGl2ZXNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBVbnppcEluZmxhdGUoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHRoaXMuaSA9IG5ldyBJbmZsYXRlKGZ1bmN0aW9uIChkYXQsIGZpbmFsKSB7XG4gICAgICAgICAgICBfdGhpcy5vbmRhdGEobnVsbCwgZGF0LCBmaW5hbCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBVbnppcEluZmxhdGUucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGZpbmFsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmkucHVzaChjaHVuaywgZmluYWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLm9uZGF0YShlLCBudWxsLCBmaW5hbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFVuemlwSW5mbGF0ZS5jb21wcmVzc2lvbiA9IDg7XG4gICAgcmV0dXJuIFVuemlwSW5mbGF0ZTtcbn0oKSk7XG5leHBvcnQgeyBVbnppcEluZmxhdGUgfTtcbi8qKlxuICogQXN5bmNocm9ub3VzIHN0cmVhbWluZyBERUZMQVRFIGRlY29tcHJlc3Npb24gZm9yIFpJUCBhcmNoaXZlc1xuICovXG52YXIgQXN5bmNVbnppcEluZmxhdGUgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIERFRkxBVEUgZGVjb21wcmVzc2lvbiB0aGF0IGNhbiBiZSB1c2VkIGluIFpJUCBhcmNoaXZlc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIEFzeW5jVW56aXBJbmZsYXRlKF8sIHN6KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmIChzeiA8IDMyMDAwMCkge1xuICAgICAgICAgICAgdGhpcy5pID0gbmV3IEluZmxhdGUoZnVuY3Rpb24gKGRhdCwgZmluYWwpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5vbmRhdGEobnVsbCwgZGF0LCBmaW5hbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaSA9IG5ldyBBc3luY0luZmxhdGUoZnVuY3Rpb24gKGVyciwgZGF0LCBmaW5hbCkge1xuICAgICAgICAgICAgICAgIF90aGlzLm9uZGF0YShlcnIsIGRhdCwgZmluYWwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnRlcm1pbmF0ZSA9IHRoaXMuaS50ZXJtaW5hdGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgQXN5bmNVbnppcEluZmxhdGUucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGZpbmFsKSB7XG4gICAgICAgIGlmICh0aGlzLmkudGVybWluYXRlKVxuICAgICAgICAgICAgY2h1bmsgPSBzbGMoY2h1bmssIDApO1xuICAgICAgICB0aGlzLmkucHVzaChjaHVuaywgZmluYWwpO1xuICAgIH07XG4gICAgQXN5bmNVbnppcEluZmxhdGUuY29tcHJlc3Npb24gPSA4O1xuICAgIHJldHVybiBBc3luY1VuemlwSW5mbGF0ZTtcbn0oKSk7XG5leHBvcnQgeyBBc3luY1VuemlwSW5mbGF0ZSB9O1xuLyoqXG4gKiBBIFpJUCBhcmNoaXZlIGRlY29tcHJlc3Npb24gc3RyZWFtIHRoYXQgZW1pdHMgZmlsZXMgYXMgdGhleSBhcmUgZGlzY292ZXJlZFxuICovXG52YXIgVW56aXAgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFpJUCBkZWNvbXByZXNzaW9uIHN0cmVhbVxuICAgICAqIEBwYXJhbSBjYiBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuZXZlciBhIGZpbGUgaW4gdGhlIFpJUCBhcmNoaXZlIGlzIGZvdW5kXG4gICAgICovXG4gICAgZnVuY3Rpb24gVW56aXAoY2IpIHtcbiAgICAgICAgdGhpcy5vbmZpbGUgPSBjYjtcbiAgICAgICAgdGhpcy5rID0gW107XG4gICAgICAgIHRoaXMubyA9IHtcbiAgICAgICAgICAgIDA6IFVuemlwUGFzc1Rocm91Z2hcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5wID0gZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFB1c2hlcyBhIGNodW5rIHRvIGJlIHVuemlwcGVkXG4gICAgICogQHBhcmFtIGNodW5rIFRoZSBjaHVuayB0byBwdXNoXG4gICAgICogQHBhcmFtIGZpbmFsIFdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdCBjaHVua1xuICAgICAqL1xuICAgIFVuemlwLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBmaW5hbCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAoIXRoaXMub25maWxlKVxuICAgICAgICAgICAgZXJyKDUpO1xuICAgICAgICBpZiAoIXRoaXMucClcbiAgICAgICAgICAgIGVycig0KTtcbiAgICAgICAgaWYgKHRoaXMuYyA+IDApIHtcbiAgICAgICAgICAgIHZhciBsZW4gPSBNYXRoLm1pbih0aGlzLmMsIGNodW5rLmxlbmd0aCk7XG4gICAgICAgICAgICB2YXIgdG9BZGQgPSBjaHVuay5zdWJhcnJheSgwLCBsZW4pO1xuICAgICAgICAgICAgdGhpcy5jIC09IGxlbjtcbiAgICAgICAgICAgIGlmICh0aGlzLmQpXG4gICAgICAgICAgICAgICAgdGhpcy5kLnB1c2godG9BZGQsICF0aGlzLmMpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMua1swXS5wdXNoKHRvQWRkKTtcbiAgICAgICAgICAgIGNodW5rID0gY2h1bmsuc3ViYXJyYXkobGVuKTtcbiAgICAgICAgICAgIGlmIChjaHVuay5sZW5ndGgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaChjaHVuaywgZmluYWwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGYgPSAwLCBpID0gMCwgaXMgPSB2b2lkIDAsIGJ1ZiA9IHZvaWQgMDtcbiAgICAgICAgICAgIGlmICghdGhpcy5wLmxlbmd0aClcbiAgICAgICAgICAgICAgICBidWYgPSBjaHVuaztcbiAgICAgICAgICAgIGVsc2UgaWYgKCFjaHVuay5sZW5ndGgpXG4gICAgICAgICAgICAgICAgYnVmID0gdGhpcy5wO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnVmID0gbmV3IHU4KHRoaXMucC5sZW5ndGggKyBjaHVuay5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGJ1Zi5zZXQodGhpcy5wKSwgYnVmLnNldChjaHVuaywgdGhpcy5wLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbCA9IGJ1Zi5sZW5ndGgsIG9jID0gdGhpcy5jLCBhZGQgPSBvYyAmJiB0aGlzLmQ7XG4gICAgICAgICAgICB2YXIgX2xvb3BfMiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2lnID0gYjQoYnVmLCBpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2lnID09IDB4NDAzNEI1MCkge1xuICAgICAgICAgICAgICAgICAgICBmID0gMSwgaXMgPSBpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzXzEuZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNfMS5jID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJmID0gYjIoYnVmLCBpICsgNiksIGNtcF8xID0gYjIoYnVmLCBpICsgOCksIHUgPSBiZiAmIDIwNDgsIGRkID0gYmYgJiA4LCBmbmwgPSBiMihidWYsIGkgKyAyNiksIGVzID0gYjIoYnVmLCBpICsgMjgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobCA+IGkgKyAzMCArIGZubCArIGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hrc18zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzXzEuay51bnNoaWZ0KGNoa3NfMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsc2MgPSBiNChidWYsIGkgKyAxOCksIGxzdSA9IGI0KGJ1ZiwgaSArIDIyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbl8xID0gc3RyRnJvbVU4KGJ1Zi5zdWJhcnJheShpICsgMzAsIGkgKz0gMzAgKyBmbmwpLCAhdSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2EgPSB6NjRocyhidWYsIGksIGVzLCAyLCBsc2MsIGxzdSwgMCksIHNjXzEgPSBfYVswXSwgc3VfMSA9IF9hWzFdLCB6NjQgPSBfYVszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY18xID0gLTEgLSB6NjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpICs9IGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc18xLmMgPSBzY18xO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRfMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxlXzEgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZm5fMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbjogY21wXzEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWxlXzEub25kYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyKDUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNjXzEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlXzEub25kYXRhKG51bGwsIGV0LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3RyID0gX3RoaXMub1tjbXBfMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN0cilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlXzEub25kYXRhKGVycigxNCwgJ3Vua25vd24gY29tcHJlc3Npb24gdHlwZSAnICsgY21wXzEsIDEpLCBudWxsLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkXzEgPSBzY18xIDwgMCA/IG5ldyBjdHIoZm5fMSkgOiBuZXcgY3RyKGZuXzEsIHNjXzEsIHN1XzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZF8xLm9uZGF0YSA9IGZ1bmN0aW9uIChlcnIsIGRhdCwgZmluYWwpIHsgZmlsZV8xLm9uZGF0YShlcnIsIGRhdCwgZmluYWwpOyB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBjaGtzXzQgPSBjaGtzXzM7IF9pIDwgY2hrc180Lmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXQgPSBjaGtzXzRbX2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfMS5wdXNoKGRhdCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLmtbMF0gPT0gY2hrc18zICYmIF90aGlzLmMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuZCA9IGRfMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkXzEucHVzaChldCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZF8xICYmIGRfMS50ZXJtaW5hdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkXzEudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY18xID49IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV8xLnNpemUgPSBzY18xLCBmaWxlXzEub3JpZ2luYWxTaXplID0gc3VfMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfMS5vbmZpbGUoZmlsZV8xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJicmVha1wiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChvYykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2lnID09IDB4ODA3NEI1MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXMgPSBpICs9IDEyICsgKG9jID09IC0yICYmIDgpLCBmID0gMywgdGhpc18xLmMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzaWcgPT0gMHgyMDE0QjUwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpcyA9IGkgLT0gNCwgZiA9IDMsIHRoaXNfMS5jID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImJyZWFrXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHRoaXNfMSA9IHRoaXM7XG4gICAgICAgICAgICBmb3IgKDsgaSA8IGwgLSA0OyArK2kpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RhdGVfMSA9IF9sb29wXzIoKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVfMSA9PT0gXCJicmVha1wiKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucCA9IGV0O1xuICAgICAgICAgICAgaWYgKG9jIDwgMCkge1xuICAgICAgICAgICAgICAgIHZhciBkYXQgPSBmID8gYnVmLnN1YmFycmF5KDAsIGlzIC0gMTIgLSAob2MgPT0gLTIgJiYgOCkgLSAoYjQoYnVmLCBpcyAtIDE2KSA9PSAweDgwNzRCNTAgJiYgNCkpIDogYnVmLnN1YmFycmF5KDAsIGkpO1xuICAgICAgICAgICAgICAgIGlmIChhZGQpXG4gICAgICAgICAgICAgICAgICAgIGFkZC5wdXNoKGRhdCwgISFmKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMua1srKGYgPT0gMildLnB1c2goZGF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmICYgMilcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoKGJ1Zi5zdWJhcnJheShpKSwgZmluYWwpO1xuICAgICAgICAgICAgdGhpcy5wID0gYnVmLnN1YmFycmF5KGkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaW5hbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYylcbiAgICAgICAgICAgICAgICBlcnIoMTMpO1xuICAgICAgICAgICAgdGhpcy5wID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXJzIGEgZGVjb2RlciB3aXRoIHRoZSBzdHJlYW0sIGFsbG93aW5nIGZvciBmaWxlcyBjb21wcmVzc2VkIHdpdGhcbiAgICAgKiB0aGUgY29tcHJlc3Npb24gdHlwZSBwcm92aWRlZCB0byBiZSBleHBhbmRlZCBjb3JyZWN0bHlcbiAgICAgKiBAcGFyYW0gZGVjb2RlciBUaGUgZGVjb2RlciBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIFVuemlwLnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uIChkZWNvZGVyKSB7XG4gICAgICAgIHRoaXMub1tkZWNvZGVyLmNvbXByZXNzaW9uXSA9IGRlY29kZXI7XG4gICAgfTtcbiAgICByZXR1cm4gVW56aXA7XG59KCkpO1xuZXhwb3J0IHsgVW56aXAgfTtcbnZhciBtdCA9IHR5cGVvZiBxdWV1ZU1pY3JvdGFzayA9PSAnZnVuY3Rpb24nID8gcXVldWVNaWNyb3Rhc2sgOiB0eXBlb2Ygc2V0VGltZW91dCA9PSAnZnVuY3Rpb24nID8gc2V0VGltZW91dCA6IGZ1bmN0aW9uIChmbikgeyBmbigpOyB9O1xuZXhwb3J0IGZ1bmN0aW9uIHVuemlwKGRhdGEsIG9wdHMsIGNiKSB7XG4gICAgaWYgKCFjYilcbiAgICAgICAgY2IgPSBvcHRzLCBvcHRzID0ge307XG4gICAgaWYgKHR5cGVvZiBjYiAhPSAnZnVuY3Rpb24nKVxuICAgICAgICBlcnIoNyk7XG4gICAgdmFyIHRlcm0gPSBbXTtcbiAgICB2YXIgdEFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXJtLmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgdGVybVtpXSgpO1xuICAgIH07XG4gICAgdmFyIGZpbGVzID0ge307XG4gICAgdmFyIGNiZCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIG10KGZ1bmN0aW9uICgpIHsgY2IoYSwgYik7IH0pO1xuICAgIH07XG4gICAgbXQoZnVuY3Rpb24gKCkgeyBjYmQgPSBjYjsgfSk7XG4gICAgdmFyIGUgPSBkYXRhLmxlbmd0aCAtIDIyO1xuICAgIGZvciAoOyBiNChkYXRhLCBlKSAhPSAweDYwNTRCNTA7IC0tZSkge1xuICAgICAgICBpZiAoIWUgfHwgZGF0YS5sZW5ndGggLSBlID4gNjU1NTgpIHtcbiAgICAgICAgICAgIGNiZChlcnIoMTMsIDAsIDEpLCBudWxsKTtcbiAgICAgICAgICAgIHJldHVybiB0QWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIDtcbiAgICB2YXIgbGZ0ID0gYjIoZGF0YSwgZSArIDgpO1xuICAgIGlmIChsZnQpIHtcbiAgICAgICAgdmFyIGMgPSBsZnQ7XG4gICAgICAgIHZhciBvID0gYjQoZGF0YSwgZSArIDE2KTtcbiAgICAgICAgdmFyIHogPSBiNChkYXRhLCBlIC0gMjApID09IDB4NzA2NEI1MDtcbiAgICAgICAgaWYgKHopIHtcbiAgICAgICAgICAgIHZhciB6ZSA9IGI0KGRhdGEsIGUgLSAxMik7XG4gICAgICAgICAgICB6ID0gYjQoZGF0YSwgemUpID09IDB4NjA2NEI1MDtcbiAgICAgICAgICAgIGlmICh6KSB7XG4gICAgICAgICAgICAgICAgYyA9IGxmdCA9IGI0KGRhdGEsIHplICsgMzIpO1xuICAgICAgICAgICAgICAgIG8gPSBiNChkYXRhLCB6ZSArIDQ4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgZmx0ciA9IG9wdHMgJiYgb3B0cy5maWx0ZXI7XG4gICAgICAgIHZhciBfbG9vcF8zID0gZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHpoKGRhdGEsIG8sIHopLCBjXzEgPSBfYVswXSwgc2MgPSBfYVsxXSwgc3UgPSBfYVsyXSwgZm4gPSBfYVszXSwgbm8gPSBfYVs0XSwgb2ZmID0gX2FbNV0sIGIgPSBzbHpoKGRhdGEsIG9mZik7XG4gICAgICAgICAgICBvID0gbm87XG4gICAgICAgICAgICB2YXIgY2JsID0gZnVuY3Rpb24gKGUsIGQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgICAgICB0QWxsKCk7XG4gICAgICAgICAgICAgICAgICAgIGNiZChlLCBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNbZm5dID0gZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEtLWxmdClcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiZChudWxsLCBmaWxlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICghZmx0ciB8fCBmbHRyKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBmbixcbiAgICAgICAgICAgICAgICBzaXplOiBzYyxcbiAgICAgICAgICAgICAgICBvcmlnaW5hbFNpemU6IHN1LFxuICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uOiBjXzFcbiAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjXzEpXG4gICAgICAgICAgICAgICAgICAgIGNibChudWxsLCBzbGMoZGF0YSwgYiwgYiArIHNjKSk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY18xID09IDgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZmwgPSBkYXRhLnN1YmFycmF5KGIsIGIgKyBzYyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFN5bmNocm9ub3VzbHkgZGVjb21wcmVzcyB1bmRlciA1MTJLQiwgb3IgYmFyZWx5LWNvbXByZXNzZWQgZGF0YVxuICAgICAgICAgICAgICAgICAgICBpZiAoc3UgPCA1MjQyODggfHwgc2MgPiAwLjggKiBzdSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYmwobnVsbCwgaW5mbGF0ZVN5bmMoaW5mbCwgeyBvdXQ6IG5ldyB1OChzdSkgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYmwoZSwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGVybS5wdXNoKGluZmxhdGUoaW5mbCwgeyBzaXplOiBzdSB9LCBjYmwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBjYmwoZXJyKDE0LCAndW5rbm93biBjb21wcmVzc2lvbiB0eXBlICcgKyBjXzEsIDEpLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBjYmwobnVsbCwgbnVsbCk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYzsgKytpKSB7XG4gICAgICAgICAgICBfbG9vcF8zKGkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgY2JkKG51bGwsIHt9KTtcbiAgICByZXR1cm4gdEFsbDtcbn1cbi8qKlxuICogU3luY2hyb25vdXNseSBkZWNvbXByZXNzZXMgYSBaSVAgYXJjaGl2ZS4gUHJlZmVyIHVzaW5nIGB1bnppcGAgZm9yIGJldHRlclxuICogcGVyZm9ybWFuY2Ugd2l0aCBtb3JlIHRoYW4gb25lIGZpbGUuXG4gKiBAcGFyYW0gZGF0YSBUaGUgcmF3IGNvbXByZXNzZWQgWklQIGZpbGVcbiAqIEBwYXJhbSBvcHRzIFRoZSBaSVAgZXh0cmFjdGlvbiBvcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgZGVjb21wcmVzc2VkIGZpbGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnppcFN5bmMoZGF0YSwgb3B0cykge1xuICAgIHZhciBmaWxlcyA9IHt9O1xuICAgIHZhciBlID0gZGF0YS5sZW5ndGggLSAyMjtcbiAgICBmb3IgKDsgYjQoZGF0YSwgZSkgIT0gMHg2MDU0QjUwOyAtLWUpIHtcbiAgICAgICAgaWYgKCFlIHx8IGRhdGEubGVuZ3RoIC0gZSA+IDY1NTU4KVxuICAgICAgICAgICAgZXJyKDEzKTtcbiAgICB9XG4gICAgO1xuICAgIHZhciBjID0gYjIoZGF0YSwgZSArIDgpO1xuICAgIGlmICghYylcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIHZhciBvID0gYjQoZGF0YSwgZSArIDE2KTtcbiAgICB2YXIgeiA9IGI0KGRhdGEsIGUgLSAyMCkgPT0gMHg3MDY0QjUwO1xuICAgIGlmICh6KSB7XG4gICAgICAgIHZhciB6ZSA9IGI0KGRhdGEsIGUgLSAxMik7XG4gICAgICAgIHogPSBiNChkYXRhLCB6ZSkgPT0gMHg2MDY0QjUwO1xuICAgICAgICBpZiAoeikge1xuICAgICAgICAgICAgYyA9IGI0KGRhdGEsIHplICsgMzIpO1xuICAgICAgICAgICAgbyA9IGI0KGRhdGEsIHplICsgNDgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBmbHRyID0gb3B0cyAmJiBvcHRzLmZpbHRlcjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGM7ICsraSkge1xuICAgICAgICB2YXIgX2EgPSB6aChkYXRhLCBvLCB6KSwgY18yID0gX2FbMF0sIHNjID0gX2FbMV0sIHN1ID0gX2FbMl0sIGZuID0gX2FbM10sIG5vID0gX2FbNF0sIG9mZiA9IF9hWzVdLCBiID0gc2x6aChkYXRhLCBvZmYpO1xuICAgICAgICBvID0gbm87XG4gICAgICAgIGlmICghZmx0ciB8fCBmbHRyKHtcbiAgICAgICAgICAgIG5hbWU6IGZuLFxuICAgICAgICAgICAgc2l6ZTogc2MsXG4gICAgICAgICAgICBvcmlnaW5hbFNpemU6IHN1LFxuICAgICAgICAgICAgY29tcHJlc3Npb246IGNfMlxuICAgICAgICB9KSkge1xuICAgICAgICAgICAgaWYgKCFjXzIpXG4gICAgICAgICAgICAgICAgZmlsZXNbZm5dID0gc2xjKGRhdGEsIGIsIGIgKyBzYyk7XG4gICAgICAgICAgICBlbHNlIGlmIChjXzIgPT0gOClcbiAgICAgICAgICAgICAgICBmaWxlc1tmbl0gPSBpbmZsYXRlU3luYyhkYXRhLnN1YmFycmF5KGIsIGIgKyBzYyksIHsgb3V0OiBuZXcgdTgoc3UpIH0pO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGVycigxNCwgJ3Vua25vd24gY29tcHJlc3Npb24gdHlwZSAnICsgY18yKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmlsZXM7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/fflate/esm/browser.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/iobuffer/lib-esm/IOBuffer.js":
/*!***************************************************!*\
!*** ./node_modules/iobuffer/lib-esm/IOBuffer.js ***!
\***************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ IOBuffer: function() { return /* binding */ IOBuffer; }\n/* harmony export */ });\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./text */ \"(app-pages-browser)/./node_modules/iobuffer/lib-esm/text.js\");\n\nconst defaultByteLength = 1024 * 8;\nconst hostBigEndian = (() => {\n const array = new Uint8Array(4);\n const view = new Uint32Array(array.buffer);\n return !((view[0] = 1) & array[0]);\n})();\nconst typedArrays = {\n int8: globalThis.Int8Array,\n uint8: globalThis.Uint8Array,\n int16: globalThis.Int16Array,\n uint16: globalThis.Uint16Array,\n int32: globalThis.Int32Array,\n uint32: globalThis.Uint32Array,\n uint64: globalThis.BigUint64Array,\n int64: globalThis.BigInt64Array,\n float32: globalThis.Float32Array,\n float64: globalThis.Float64Array,\n};\nclass IOBuffer {\n /**\n * Reference to the internal ArrayBuffer object.\n */\n buffer;\n /**\n * Byte length of the internal ArrayBuffer.\n */\n byteLength;\n /**\n * Byte offset of the internal ArrayBuffer.\n */\n byteOffset;\n /**\n * Byte length of the internal ArrayBuffer.\n */\n length;\n /**\n * The current offset of the buffer's pointer.\n */\n offset;\n lastWrittenByte;\n littleEndian;\n _data;\n _mark;\n _marks;\n /**\n * Create a new IOBuffer.\n * @param data - The data to construct the IOBuffer with.\n * If data is a number, it will be the new buffer's length<br>\n * If data is `undefined`, the buffer will be initialized with a default length of 8Kb<br>\n * If data is an ArrayBuffer, SharedArrayBuffer, an ArrayBufferView (Typed Array), an IOBuffer instance,\n * or a Node.js Buffer, a view will be created over the underlying ArrayBuffer.\n * @param options - An object for the options.\n * @returns A new IOBuffer instance.\n */\n constructor(data = defaultByteLength, options = {}) {\n let dataIsGiven = false;\n if (typeof data === 'number') {\n data = new ArrayBuffer(data);\n }\n else {\n dataIsGiven = true;\n this.lastWrittenByte = data.byteLength;\n }\n const offset = options.offset ? options.offset >>> 0 : 0;\n const byteLength = data.byteLength - offset;\n let dvOffset = offset;\n if (ArrayBuffer.isView(data) || data instanceof IOBuffer) {\n if (data.byteLength !== data.buffer.byteLength) {\n dvOffset = data.byteOffset + offset;\n }\n data = data.buffer;\n }\n if (dataIsGiven) {\n this.lastWrittenByte = byteLength;\n }\n else {\n this.lastWrittenByte = 0;\n }\n this.buffer = data;\n this.length = byteLength;\n this.byteLength = byteLength;\n this.byteOffset = dvOffset;\n this.offset = 0;\n this.littleEndian = true;\n this._data = new DataView(this.buffer, dvOffset, byteLength);\n this._mark = 0;\n this._marks = [];\n }\n /**\n * Checks if the memory allocated to the buffer is sufficient to store more\n * bytes after the offset.\n * @param byteLength - The needed memory in bytes.\n * @returns `true` if there is sufficient space and `false` otherwise.\n */\n available(byteLength = 1) {\n return this.offset + byteLength <= this.length;\n }\n /**\n * Check if little-endian mode is used for reading and writing multi-byte\n * values.\n * @returns `true` if little-endian mode is used, `false` otherwise.\n */\n isLittleEndian() {\n return this.littleEndian;\n }\n /**\n * Set little-endian mode for reading and writing multi-byte values.\n * @returns This.\n */\n setLittleEndian() {\n this.littleEndian = true;\n return this;\n }\n /**\n * Check if big-endian mode is used for reading and writing multi-byte values.\n * @returns `true` if big-endian mode is used, `false` otherwise.\n */\n isBigEndian() {\n return !this.littleEndian;\n }\n /**\n * Switches to big-endian mode for reading and writing multi-byte values.\n * @returns This.\n */\n setBigEndian() {\n this.littleEndian = false;\n return this;\n }\n /**\n * Move the pointer n bytes forward.\n * @param n - Number of bytes to skip.\n * @returns This.\n */\n skip(n = 1) {\n this.offset += n;\n return this;\n }\n /**\n * Move the pointer n bytes backward.\n * @param n - Number of bytes to move back.\n * @returns This.\n */\n back(n = 1) {\n this.offset -= n;\n return this;\n }\n /**\n * Move the pointer to the given offset.\n * @param offset - The offset to move to.\n * @returns This.\n */\n seek(offset) {\n this.offset = offset;\n return this;\n }\n /**\n * Store the current pointer offset.\n * @see {@link IOBuffer#reset}\n * @returns This.\n */\n mark() {\n this._mark = this.offset;\n return this;\n }\n /**\n * Move the pointer back to the last pointer offset set by mark.\n * @see {@link IOBuffer#mark}\n * @returns This.\n */\n reset() {\n this.offset = this._mark;\n return this;\n }\n /**\n * Push the current pointer offset to the mark stack.\n * @see {@link IOBuffer#popMark}\n * @returns This.\n */\n pushMark() {\n this._marks.push(this.offset);\n return this;\n }\n /**\n * Pop the last pointer offset from the mark stack, and set the current\n * pointer offset to the popped value.\n * @see {@link IOBuffer#pushMark}\n * @returns This.\n */\n popMark() {\n const offset = this._marks.pop();\n if (offset === undefined) {\n throw new Error('Mark stack empty');\n }\n this.seek(offset);\n return this;\n }\n /**\n * Move the pointer offset back to 0.\n * @returns This.\n */\n rewind() {\n this.offset = 0;\n return this;\n }\n /**\n * Make sure the buffer has sufficient memory to write a given byteLength at\n * the current pointer offset.\n * If the buffer's memory is insufficient, this method will create a new\n * buffer (a copy) with a length that is twice (byteLength + current offset).\n * @param byteLength - The needed memory in bytes.\n * @returns This.\n */\n ensureAvailable(byteLength = 1) {\n if (!this.available(byteLength)) {\n const lengthNeeded = this.offset + byteLength;\n const newLength = lengthNeeded * 2;\n const newArray = new Uint8Array(newLength);\n newArray.set(new Uint8Array(this.buffer));\n this.buffer = newArray.buffer;\n this.length = newLength;\n this.byteLength = newLength;\n this._data = new DataView(this.buffer);\n }\n return this;\n }\n /**\n * Read a byte and return false if the byte's value is 0, or true otherwise.\n * Moves pointer forward by one byte.\n * @returns The read boolean.\n */\n readBoolean() {\n return this.readUint8() !== 0;\n }\n /**\n * Read a signed 8-bit integer and move pointer forward by 1 byte.\n * @returns The read byte.\n */\n readInt8() {\n return this._data.getInt8(this.offset++);\n }\n /**\n * Read an unsigned 8-bit integer and move pointer forward by 1 byte.\n * @returns The read byte.\n */\n readUint8() {\n return this._data.getUint8(this.offset++);\n }\n /**\n * Alias for {@link IOBuffer#readUint8}.\n * @returns The read byte.\n */\n readByte() {\n return this.readUint8();\n }\n /**\n * Read `n` bytes and move pointer forward by `n` bytes.\n * @param n - Number of bytes to read.\n * @returns The read bytes.\n */\n readBytes(n = 1) {\n return this.readArray(n, 'uint8');\n }\n /**\n * Creates an array of corresponding to the type `type` and size `size`.\n * For example type `uint8` will create a `Uint8Array`.\n * @param size - size of the resulting array\n * @param type - number type of elements to read\n * @returns The read array.\n */\n readArray(size, type) {\n const bytes = typedArrays[type].BYTES_PER_ELEMENT * size;\n const offset = this.byteOffset + this.offset;\n const slice = this.buffer.slice(offset, offset + bytes);\n if (this.littleEndian === hostBigEndian &&\n type !== 'uint8' &&\n type !== 'int8') {\n const slice = new Uint8Array(this.buffer.slice(offset, offset + bytes));\n slice.reverse();\n const returnArray = new typedArrays[type](slice.buffer);\n this.offset += bytes;\n returnArray.reverse();\n return returnArray;\n }\n const returnArray = new typedArrays[type](slice);\n this.offset += bytes;\n return returnArray;\n }\n /**\n * Read a 16-bit signed integer and move pointer forward by 2 bytes.\n * @returns The read value.\n */\n readInt16() {\n const value = this._data.getInt16(this.offset, this.littleEndian);\n this.offset += 2;\n return value;\n }\n /**\n * Read a 16-bit unsigned integer and move pointer forward by 2 bytes.\n * @returns The read value.\n */\n readUint16() {\n const value = this._data.getUint16(this.offset, this.littleEndian);\n this.offset += 2;\n return value;\n }\n /**\n * Read a 32-bit signed integer and move pointer forward by 4 bytes.\n * @returns The read value.\n */\n readInt32() {\n const value = this._data.getInt32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n /**\n * Read a 32-bit unsigned integer and move pointer forward by 4 bytes.\n * @returns The read value.\n */\n readUint32() {\n const value = this._data.getUint32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n /**\n * Read a 32-bit floating number and move pointer forward by 4 bytes.\n * @returns The read value.\n */\n readFloat32() {\n const value = this._data.getFloat32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n /**\n * Read a 64-bit floating number and move pointer forward by 8 bytes.\n * @returns The read value.\n */\n readFloat64() {\n const value = this._data.getFloat64(this.offset, this.littleEndian);\n this.offset += 8;\n return value;\n }\n /**\n * Read a 64-bit signed integer number and move pointer forward by 8 bytes.\n * @returns The read value.\n */\n readBigInt64() {\n const value = this._data.getBigInt64(this.offset, this.littleEndian);\n this.offset += 8;\n return value;\n }\n /**\n * Read a 64-bit unsigned integer number and move pointer forward by 8 bytes.\n * @returns The read value.\n */\n readBigUint64() {\n const value = this._data.getBigUint64(this.offset, this.littleEndian);\n this.offset += 8;\n return value;\n }\n /**\n * Read a 1-byte ASCII character and move pointer forward by 1 byte.\n * @returns The read character.\n */\n readChar() {\n // eslint-disable-next-line unicorn/prefer-code-point\n return String.fromCharCode(this.readInt8());\n }\n /**\n * Read `n` 1-byte ASCII characters and move pointer forward by `n` bytes.\n * @param n - Number of characters to read.\n * @returns The read characters.\n */\n readChars(n = 1) {\n let result = '';\n for (let i = 0; i < n; i++) {\n result += this.readChar();\n }\n return result;\n }\n /**\n * Read the next `n` bytes, return a UTF-8 decoded string and move pointer\n * forward by `n` bytes.\n * @param n - Number of bytes to read.\n * @returns The decoded string.\n */\n readUtf8(n = 1) {\n return (0,_text__WEBPACK_IMPORTED_MODULE_0__.decode)(this.readBytes(n));\n }\n /**\n * Read the next `n` bytes, return a string decoded with `encoding` and move pointer\n * forward by `n` bytes.\n * If no encoding is passed, the function is equivalent to @see {@link IOBuffer#readUtf8}\n * @param n - Number of bytes to read.\n * @param encoding - The encoding to use. Default is 'utf8'.\n * @returns The decoded string.\n */\n decodeText(n = 1, encoding = 'utf8') {\n return (0,_text__WEBPACK_IMPORTED_MODULE_0__.decode)(this.readBytes(n), encoding);\n }\n /**\n * Write 0xff if the passed value is truthy, 0x00 otherwise and move pointer\n * forward by 1 byte.\n * @param value - The value to write.\n * @returns This.\n */\n writeBoolean(value) {\n this.writeUint8(value ? 0xff : 0x00);\n return this;\n }\n /**\n * Write `value` as an 8-bit signed integer and move pointer forward by 1 byte.\n * @param value - The value to write.\n * @returns This.\n */\n writeInt8(value) {\n this.ensureAvailable(1);\n this._data.setInt8(this.offset++, value);\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as an 8-bit unsigned integer and move pointer forward by 1\n * byte.\n * @param value - The value to write.\n * @returns This.\n */\n writeUint8(value) {\n this.ensureAvailable(1);\n this._data.setUint8(this.offset++, value);\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * An alias for {@link IOBuffer#writeUint8}.\n * @param value - The value to write.\n * @returns This.\n */\n writeByte(value) {\n return this.writeUint8(value);\n }\n /**\n * Write all elements of `bytes` as uint8 values and move pointer forward by\n * `bytes.length` bytes.\n * @param bytes - The array of bytes to write.\n * @returns This.\n */\n writeBytes(bytes) {\n this.ensureAvailable(bytes.length);\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < bytes.length; i++) {\n this._data.setUint8(this.offset++, bytes[i]);\n }\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 16-bit signed integer and move pointer forward by 2\n * bytes.\n * @param value - The value to write.\n * @returns This.\n */\n writeInt16(value) {\n this.ensureAvailable(2);\n this._data.setInt16(this.offset, value, this.littleEndian);\n this.offset += 2;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 16-bit unsigned integer and move pointer forward by 2\n * bytes.\n * @param value - The value to write.\n * @returns This.\n */\n writeUint16(value) {\n this.ensureAvailable(2);\n this._data.setUint16(this.offset, value, this.littleEndian);\n this.offset += 2;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 32-bit signed integer and move pointer forward by 4\n * bytes.\n * @param value - The value to write.\n * @returns This.\n */\n writeInt32(value) {\n this.ensureAvailable(4);\n this._data.setInt32(this.offset, value, this.littleEndian);\n this.offset += 4;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 32-bit unsigned integer and move pointer forward by 4\n * bytes.\n * @param value - The value to write.\n * @returns This.\n */\n writeUint32(value) {\n this.ensureAvailable(4);\n this._data.setUint32(this.offset, value, this.littleEndian);\n this.offset += 4;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 32-bit floating number and move pointer forward by 4\n * bytes.\n * @param value - The value to write.\n * @returns This.\n */\n writeFloat32(value) {\n this.ensureAvailable(4);\n this._data.setFloat32(this.offset, value, this.littleEndian);\n this.offset += 4;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 64-bit floating number and move pointer forward by 8\n * bytes.\n * @param value - The value to write.\n * @returns This.\n */\n writeFloat64(value) {\n this.ensureAvailable(8);\n this._data.setFloat64(this.offset, value, this.littleEndian);\n this.offset += 8;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 64-bit signed bigint and move pointer forward by 8\n * bytes.\n * @param value - The value to write.\n * @returns This.\n */\n writeBigInt64(value) {\n this.ensureAvailable(8);\n this._data.setBigInt64(this.offset, value, this.littleEndian);\n this.offset += 8;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write `value` as a 64-bit unsigned bigint and move pointer forward by 8\n * bytes.\n * @param value - The value to write.\n * @returns This.\n */\n writeBigUint64(value) {\n this.ensureAvailable(8);\n this._data.setBigUint64(this.offset, value, this.littleEndian);\n this.offset += 8;\n this._updateLastWrittenByte();\n return this;\n }\n /**\n * Write the charCode of `str`'s first character as an 8-bit unsigned integer\n * and move pointer forward by 1 byte.\n * @param str - The character to write.\n * @returns This.\n */\n writeChar(str) {\n // eslint-disable-next-line unicorn/prefer-code-point\n return this.writeUint8(str.charCodeAt(0));\n }\n /**\n * Write the charCodes of all `str`'s characters as 8-bit unsigned integers\n * and move pointer forward by `str.length` bytes.\n * @param str - The characters to write.\n * @returns This.\n */\n writeChars(str) {\n for (let i = 0; i < str.length; i++) {\n // eslint-disable-next-line unicorn/prefer-code-point\n this.writeUint8(str.charCodeAt(i));\n }\n return this;\n }\n /**\n * UTF-8 encode and write `str` to the current pointer offset and move pointer\n * forward according to the encoded length.\n * @param str - The string to write.\n * @returns This.\n */\n writeUtf8(str) {\n return this.writeBytes((0,_text__WEBPACK_IMPORTED_MODULE_0__.encode)(str));\n }\n /**\n * Export a Uint8Array view of the internal buffer.\n * The view starts at the byte offset and its length\n * is calculated to stop at the last written byte or the original length.\n * @returns A new Uint8Array view.\n */\n toArray() {\n return new Uint8Array(this.buffer, this.byteOffset, this.lastWrittenByte);\n }\n /**\n * Get the total number of bytes written so far, regardless of the current offset.\n * @returns - Total number of bytes.\n */\n getWrittenByteLength() {\n return this.lastWrittenByte - this.byteOffset;\n }\n /**\n * Update the last written byte offset\n * @private\n */\n _updateLastWrittenByte() {\n if (this.offset > this.lastWrittenByte) {\n this.lastWrittenByte = this.offset;\n }\n }\n}\n//# sourceMappingURL=IOBuffer.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb2J1ZmZlci9saWItZXNtL0lPQnVmZmVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IseUJBQXlCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsT0FBTztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw2Q0FBTTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFFQUFxRTtBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw2Q0FBTTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLDBCQUEwQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixnQkFBZ0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLDZDQUFNO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9pb2J1ZmZlci9saWItZXNtL0lPQnVmZmVyLmpzP2MwOTIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVjb2RlLCBlbmNvZGUgfSBmcm9tICcuL3RleHQnO1xuY29uc3QgZGVmYXVsdEJ5dGVMZW5ndGggPSAxMDI0ICogODtcbmNvbnN0IGhvc3RCaWdFbmRpYW4gPSAoKCkgPT4ge1xuICAgIGNvbnN0IGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoNCk7XG4gICAgY29uc3QgdmlldyA9IG5ldyBVaW50MzJBcnJheShhcnJheS5idWZmZXIpO1xuICAgIHJldHVybiAhKCh2aWV3WzBdID0gMSkgJiBhcnJheVswXSk7XG59KSgpO1xuY29uc3QgdHlwZWRBcnJheXMgPSB7XG4gICAgaW50ODogZ2xvYmFsVGhpcy5JbnQ4QXJyYXksXG4gICAgdWludDg6IGdsb2JhbFRoaXMuVWludDhBcnJheSxcbiAgICBpbnQxNjogZ2xvYmFsVGhpcy5JbnQxNkFycmF5LFxuICAgIHVpbnQxNjogZ2xvYmFsVGhpcy5VaW50MTZBcnJheSxcbiAgICBpbnQzMjogZ2xvYmFsVGhpcy5JbnQzMkFycmF5LFxuICAgIHVpbnQzMjogZ2xvYmFsVGhpcy5VaW50MzJBcnJheSxcbiAgICB1aW50NjQ6IGdsb2JhbFRoaXMuQmlnVWludDY0QXJyYXksXG4gICAgaW50NjQ6IGdsb2JhbFRoaXMuQmlnSW50NjRBcnJheSxcbiAgICBmbG9hdDMyOiBnbG9iYWxUaGlzLkZsb2F0MzJBcnJheSxcbiAgICBmbG9hdDY0OiBnbG9iYWxUaGlzLkZsb2F0NjRBcnJheSxcbn07XG5leHBvcnQgY2xhc3MgSU9CdWZmZXIge1xuICAgIC8qKlxuICAgICAqIFJlZmVyZW5jZSB0byB0aGUgaW50ZXJuYWwgQXJyYXlCdWZmZXIgb2JqZWN0LlxuICAgICAqL1xuICAgIGJ1ZmZlcjtcbiAgICAvKipcbiAgICAgKiBCeXRlIGxlbmd0aCBvZiB0aGUgaW50ZXJuYWwgQXJyYXlCdWZmZXIuXG4gICAgICovXG4gICAgYnl0ZUxlbmd0aDtcbiAgICAvKipcbiAgICAgKiBCeXRlIG9mZnNldCBvZiB0aGUgaW50ZXJuYWwgQXJyYXlCdWZmZXIuXG4gICAgICovXG4gICAgYnl0ZU9mZnNldDtcbiAgICAvKipcbiAgICAgKiBCeXRlIGxlbmd0aCBvZiB0aGUgaW50ZXJuYWwgQXJyYXlCdWZmZXIuXG4gICAgICovXG4gICAgbGVuZ3RoO1xuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IG9mZnNldCBvZiB0aGUgYnVmZmVyJ3MgcG9pbnRlci5cbiAgICAgKi9cbiAgICBvZmZzZXQ7XG4gICAgbGFzdFdyaXR0ZW5CeXRlO1xuICAgIGxpdHRsZUVuZGlhbjtcbiAgICBfZGF0YTtcbiAgICBfbWFyaztcbiAgICBfbWFya3M7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IElPQnVmZmVyLlxuICAgICAqIEBwYXJhbSBkYXRhIC0gVGhlIGRhdGEgdG8gY29uc3RydWN0IHRoZSBJT0J1ZmZlciB3aXRoLlxuICAgICAqIElmIGRhdGEgaXMgYSBudW1iZXIsIGl0IHdpbGwgYmUgdGhlIG5ldyBidWZmZXIncyBsZW5ndGg8YnI+XG4gICAgICogSWYgZGF0YSBpcyBgdW5kZWZpbmVkYCwgdGhlIGJ1ZmZlciB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggYSBkZWZhdWx0IGxlbmd0aCBvZiA4S2I8YnI+XG4gICAgICogSWYgZGF0YSBpcyBhbiBBcnJheUJ1ZmZlciwgU2hhcmVkQXJyYXlCdWZmZXIsIGFuIEFycmF5QnVmZmVyVmlldyAoVHlwZWQgQXJyYXkpLCBhbiBJT0J1ZmZlciBpbnN0YW5jZSxcbiAgICAgKiBvciBhIE5vZGUuanMgQnVmZmVyLCBhIHZpZXcgd2lsbCBiZSBjcmVhdGVkIG92ZXIgdGhlIHVuZGVybHlpbmcgQXJyYXlCdWZmZXIuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3QgZm9yIHRoZSBvcHRpb25zLlxuICAgICAqIEByZXR1cm5zIEEgbmV3IElPQnVmZmVyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGRhdGEgPSBkZWZhdWx0Qnl0ZUxlbmd0aCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGxldCBkYXRhSXNHaXZlbiA9IGZhbHNlO1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBkYXRhID0gbmV3IEFycmF5QnVmZmVyKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGF0YUlzR2l2ZW4gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5sYXN0V3JpdHRlbkJ5dGUgPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQgPyBvcHRpb25zLm9mZnNldCA+Pj4gMCA6IDA7XG4gICAgICAgIGNvbnN0IGJ5dGVMZW5ndGggPSBkYXRhLmJ5dGVMZW5ndGggLSBvZmZzZXQ7XG4gICAgICAgIGxldCBkdk9mZnNldCA9IG9mZnNldDtcbiAgICAgICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSB8fCBkYXRhIGluc3RhbmNlb2YgSU9CdWZmZXIpIHtcbiAgICAgICAgICAgIGlmIChkYXRhLmJ5dGVMZW5ndGggIT09IGRhdGEuYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBkdk9mZnNldCA9IGRhdGEuYnl0ZU9mZnNldCArIG9mZnNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGEgPSBkYXRhLmJ1ZmZlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YUlzR2l2ZW4pIHtcbiAgICAgICAgICAgIHRoaXMubGFzdFdyaXR0ZW5CeXRlID0gYnl0ZUxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGFzdFdyaXR0ZW5CeXRlID0gMDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJ1ZmZlciA9IGRhdGE7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gYnl0ZUxlbmd0aDtcbiAgICAgICAgdGhpcy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aDtcbiAgICAgICAgdGhpcy5ieXRlT2Zmc2V0ID0gZHZPZmZzZXQ7XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgdGhpcy5saXR0bGVFbmRpYW4gPSB0cnVlO1xuICAgICAgICB0aGlzLl9kYXRhID0gbmV3IERhdGFWaWV3KHRoaXMuYnVmZmVyLCBkdk9mZnNldCwgYnl0ZUxlbmd0aCk7XG4gICAgICAgIHRoaXMuX21hcmsgPSAwO1xuICAgICAgICB0aGlzLl9tYXJrcyA9IFtdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgdG8gdGhlIGJ1ZmZlciBpcyBzdWZmaWNpZW50IHRvIHN0b3JlIG1vcmVcbiAgICAgKiBieXRlcyBhZnRlciB0aGUgb2Zmc2V0LlxuICAgICAqIEBwYXJhbSBieXRlTGVuZ3RoIC0gVGhlIG5lZWRlZCBtZW1vcnkgaW4gYnl0ZXMuXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZXJlIGlzIHN1ZmZpY2llbnQgc3BhY2UgYW5kIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGF2YWlsYWJsZShieXRlTGVuZ3RoID0gMSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vZmZzZXQgKyBieXRlTGVuZ3RoIDw9IHRoaXMubGVuZ3RoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBsaXR0bGUtZW5kaWFuIG1vZGUgaXMgdXNlZCBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBtdWx0aS1ieXRlXG4gICAgICogdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiBsaXR0bGUtZW5kaWFuIG1vZGUgaXMgdXNlZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAgICovXG4gICAgaXNMaXR0bGVFbmRpYW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxpdHRsZUVuZGlhbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IGxpdHRsZS1lbmRpYW4gbW9kZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBtdWx0aS1ieXRlIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyBUaGlzLlxuICAgICAqL1xuICAgIHNldExpdHRsZUVuZGlhbigpIHtcbiAgICAgICAgdGhpcy5saXR0bGVFbmRpYW4gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYmlnLWVuZGlhbiBtb2RlIGlzIHVzZWQgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgbXVsdGktYnl0ZSB2YWx1ZXMuXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIGJpZy1lbmRpYW4gbW9kZSBpcyB1c2VkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBpc0JpZ0VuZGlhbigpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmxpdHRsZUVuZGlhbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3dpdGNoZXMgdG8gYmlnLWVuZGlhbiBtb2RlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIG11bHRpLWJ5dGUgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIFRoaXMuXG4gICAgICovXG4gICAgc2V0QmlnRW5kaWFuKCkge1xuICAgICAgICB0aGlzLmxpdHRsZUVuZGlhbiA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogTW92ZSB0aGUgcG9pbnRlciBuIGJ5dGVzIGZvcndhcmQuXG4gICAgICogQHBhcmFtIG4gLSBOdW1iZXIgb2YgYnl0ZXMgdG8gc2tpcC5cbiAgICAgKiBAcmV0dXJucyBUaGlzLlxuICAgICAqL1xuICAgIHNraXAobiA9IDEpIHtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1vdmUgdGhlIHBvaW50ZXIgbiBieXRlcyBiYWNrd2FyZC5cbiAgICAgKiBAcGFyYW0gbiAtIE51bWJlciBvZiBieXRlcyB0byBtb3ZlIGJhY2suXG4gICAgICogQHJldHVybnMgVGhpcy5cbiAgICAgKi9cbiAgICBiYWNrKG4gPSAxKSB7XG4gICAgICAgIHRoaXMub2Zmc2V0IC09IG47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNb3ZlIHRoZSBwb2ludGVyIHRvIHRoZSBnaXZlbiBvZmZzZXQuXG4gICAgICogQHBhcmFtIG9mZnNldCAtIFRoZSBvZmZzZXQgdG8gbW92ZSB0by5cbiAgICAgKiBAcmV0dXJucyBUaGlzLlxuICAgICAqL1xuICAgIHNlZWsob2Zmc2V0KSB7XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RvcmUgdGhlIGN1cnJlbnQgcG9pbnRlciBvZmZzZXQuXG4gICAgICogQHNlZSB7QGxpbmsgSU9CdWZmZXIjcmVzZXR9XG4gICAgICogQHJldHVybnMgVGhpcy5cbiAgICAgKi9cbiAgICBtYXJrKCkge1xuICAgICAgICB0aGlzLl9tYXJrID0gdGhpcy5vZmZzZXQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNb3ZlIHRoZSBwb2ludGVyIGJhY2sgdG8gdGhlIGxhc3QgcG9pbnRlciBvZmZzZXQgc2V0IGJ5IG1hcmsuXG4gICAgICogQHNlZSB7QGxpbmsgSU9CdWZmZXIjbWFya31cbiAgICAgKiBAcmV0dXJucyBUaGlzLlxuICAgICAqL1xuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLm9mZnNldCA9IHRoaXMuX21hcms7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQdXNoIHRoZSBjdXJyZW50IHBvaW50ZXIgb2Zmc2V0IHRvIHRoZSBtYXJrIHN0YWNrLlxuICAgICAqIEBzZWUge0BsaW5rIElPQnVmZmVyI3BvcE1hcmt9XG4gICAgICogQHJldHVybnMgVGhpcy5cbiAgICAgKi9cbiAgICBwdXNoTWFyaygpIHtcbiAgICAgICAgdGhpcy5fbWFya3MucHVzaCh0aGlzLm9mZnNldCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQb3AgdGhlIGxhc3QgcG9pbnRlciBvZmZzZXQgZnJvbSB0aGUgbWFyayBzdGFjaywgYW5kIHNldCB0aGUgY3VycmVudFxuICAgICAqIHBvaW50ZXIgb2Zmc2V0IHRvIHRoZSBwb3BwZWQgdmFsdWUuXG4gICAgICogQHNlZSB7QGxpbmsgSU9CdWZmZXIjcHVzaE1hcmt9XG4gICAgICogQHJldHVybnMgVGhpcy5cbiAgICAgKi9cbiAgICBwb3BNYXJrKCkge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLl9tYXJrcy5wb3AoKTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hcmsgc3RhY2sgZW1wdHknKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlZWsob2Zmc2V0KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1vdmUgdGhlIHBvaW50ZXIgb2Zmc2V0IGJhY2sgdG8gMC5cbiAgICAgKiBAcmV0dXJucyBUaGlzLlxuICAgICAqL1xuICAgIHJld2luZCgpIHtcbiAgICAgICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFrZSBzdXJlIHRoZSBidWZmZXIgaGFzIHN1ZmZpY2llbnQgbWVtb3J5IHRvIHdyaXRlIGEgZ2l2ZW4gYnl0ZUxlbmd0aCBhdFxuICAgICAqIHRoZSBjdXJyZW50IHBvaW50ZXIgb2Zmc2V0LlxuICAgICAqIElmIHRoZSBidWZmZXIncyBtZW1vcnkgaXMgaW5zdWZmaWNpZW50LCB0aGlzIG1ldGhvZCB3aWxsIGNyZWF0ZSBhIG5ld1xuICAgICAqIGJ1ZmZlciAoYSBjb3B5KSB3aXRoIGEgbGVuZ3RoIHRoYXQgaXMgdHdpY2UgKGJ5dGVMZW5ndGggKyBjdXJyZW50IG9mZnNldCkuXG4gICAgICogQHBhcmFtIGJ5dGVMZW5ndGggLSBUaGUgbmVlZGVkIG1lbW9yeSBpbiBieXRlcy5cbiAgICAgKiBAcmV0dXJucyBUaGlzLlxuICAgICAqL1xuICAgIGVuc3VyZUF2YWlsYWJsZShieXRlTGVuZ3RoID0gMSkge1xuICAgICAgICBpZiAoIXRoaXMuYXZhaWxhYmxlKGJ5dGVMZW5ndGgpKSB7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGhOZWVkZWQgPSB0aGlzLm9mZnNldCArIGJ5dGVMZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBuZXdMZW5ndGggPSBsZW5ndGhOZWVkZWQgKiAyO1xuICAgICAgICAgICAgY29uc3QgbmV3QXJyYXkgPSBuZXcgVWludDhBcnJheShuZXdMZW5ndGgpO1xuICAgICAgICAgICAgbmV3QXJyYXkuc2V0KG5ldyBVaW50OEFycmF5KHRoaXMuYnVmZmVyKSk7XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ld0FycmF5LmJ1ZmZlcjtcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gbmV3TGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5ieXRlTGVuZ3RoID0gbmV3TGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5fZGF0YSA9IG5ldyBEYXRhVmlldyh0aGlzLmJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBieXRlIGFuZCByZXR1cm4gZmFsc2UgaWYgdGhlIGJ5dGUncyB2YWx1ZSBpcyAwLCBvciB0cnVlIG90aGVyd2lzZS5cbiAgICAgKiBNb3ZlcyBwb2ludGVyIGZvcndhcmQgYnkgb25lIGJ5dGUuXG4gICAgICogQHJldHVybnMgVGhlIHJlYWQgYm9vbGVhbi5cbiAgICAgKi9cbiAgICByZWFkQm9vbGVhbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFVpbnQ4KCkgIT09IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBzaWduZWQgOC1iaXQgaW50ZWdlciBhbmQgbW92ZSBwb2ludGVyIGZvcndhcmQgYnkgMSBieXRlLlxuICAgICAqIEByZXR1cm5zIFRoZSByZWFkIGJ5dGUuXG4gICAgICovXG4gICAgcmVhZEludDgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhLmdldEludDgodGhpcy5vZmZzZXQrKyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYW4gdW5zaWduZWQgOC1iaXQgaW50ZWdlciBhbmQgbW92ZSBwb2ludGVyIGZvcndhcmQgYnkgMSBieXRlLlxuICAgICAqIEByZXR1cm5zIFRoZSByZWFkIGJ5dGUuXG4gICAgICovXG4gICAgcmVhZFVpbnQ4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YS5nZXRVaW50OCh0aGlzLm9mZnNldCsrKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIHtAbGluayBJT0J1ZmZlciNyZWFkVWludDh9LlxuICAgICAqIEByZXR1cm5zIFRoZSByZWFkIGJ5dGUuXG4gICAgICovXG4gICAgcmVhZEJ5dGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRVaW50OCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGBuYCBieXRlcyBhbmQgbW92ZSBwb2ludGVyIGZvcndhcmQgYnkgYG5gIGJ5dGVzLlxuICAgICAqIEBwYXJhbSBuIC0gTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuXG4gICAgICogQHJldHVybnMgVGhlIHJlYWQgYnl0ZXMuXG4gICAgICovXG4gICAgcmVhZEJ5dGVzKG4gPSAxKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRBcnJheShuLCAndWludDgnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBjb3JyZXNwb25kaW5nIHRvIHRoZSB0eXBlIGB0eXBlYCBhbmQgc2l6ZSBgc2l6ZWAuXG4gICAgICogRm9yIGV4YW1wbGUgdHlwZSBgdWludDhgIHdpbGwgY3JlYXRlIGEgYFVpbnQ4QXJyYXlgLlxuICAgICAqIEBwYXJhbSBzaXplIC0gc2l6ZSBvZiB0aGUgcmVzdWx0aW5nIGFycmF5XG4gICAgICogQHBhcmFtIHR5cGUgLSBudW1iZXIgdHlwZSBvZiBlbGVtZW50cyB0byByZWFkXG4gICAgICogQHJldHVybnMgVGhlIHJlYWQgYXJyYXkuXG4gICAgICovXG4gICAgcmVhZEFycmF5KHNpemUsIHR5cGUpIHtcbiAgICAgICAgY29uc3QgYnl0ZXMgPSB0eXBlZEFycmF5c1t0eXBlXS5CWVRFU19QRVJfRUxFTUVOVCAqIHNpemU7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHRoaXMuYnl0ZU9mZnNldCArIHRoaXMub2Zmc2V0O1xuICAgICAgICBjb25zdCBzbGljZSA9IHRoaXMuYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgYnl0ZXMpO1xuICAgICAgICBpZiAodGhpcy5saXR0bGVFbmRpYW4gPT09IGhvc3RCaWdFbmRpYW4gJiZcbiAgICAgICAgICAgIHR5cGUgIT09ICd1aW50OCcgJiZcbiAgICAgICAgICAgIHR5cGUgIT09ICdpbnQ4Jykge1xuICAgICAgICAgICAgY29uc3Qgc2xpY2UgPSBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIGJ5dGVzKSk7XG4gICAgICAgICAgICBzbGljZS5yZXZlcnNlKCk7XG4gICAgICAgICAgICBjb25zdCByZXR1cm5BcnJheSA9IG5ldyB0eXBlZEFycmF5c1t0eXBlXShzbGljZS5idWZmZXIpO1xuICAgICAgICAgICAgdGhpcy5vZmZzZXQgKz0gYnl0ZXM7XG4gICAgICAgICAgICByZXR1cm5BcnJheS5yZXZlcnNlKCk7XG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuQXJyYXk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV0dXJuQXJyYXkgPSBuZXcgdHlwZWRBcnJheXNbdHlwZV0oc2xpY2UpO1xuICAgICAgICB0aGlzLm9mZnNldCArPSBieXRlcztcbiAgICAgICAgcmV0dXJuIHJldHVybkFycmF5O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgMTYtYml0IHNpZ25lZCBpbnRlZ2VyIGFuZCBtb3ZlIHBvaW50ZXIgZm9yd2FyZCBieSAyIGJ5dGVzLlxuICAgICAqIEByZXR1cm5zIFRoZSByZWFkIHZhbHVlLlxuICAgICAqL1xuICAgIHJlYWRJbnQxNigpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9kYXRhLmdldEludDE2KHRoaXMub2Zmc2V0LCB0aGlzLmxpdHRsZUVuZGlhbik7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IDI7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIDE2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGFuZCBtb3ZlIHBvaW50ZXIgZm9yd2FyZCBieSAyIGJ5dGVzLlxuICAgICAqIEByZXR1cm5zIFRoZSByZWFkIHZhbHVlLlxuICAgICAqL1xuICAgIHJlYWRVaW50MTYoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZGF0YS5nZXRVaW50MTYodGhpcy5vZmZzZXQsIHRoaXMubGl0dGxlRW5kaWFuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gMjtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgMzItYml0IHNpZ25lZCBpbnRlZ2VyIGFuZCBtb3ZlIHBvaW50ZXIgZm9yd2FyZCBieSA0IGJ5dGVzLlxuICAgICAqIEByZXR1cm5zIFRoZSByZWFkIHZhbHVlLlxuICAgICAqL1xuICAgIHJlYWRJbnQzMigpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9kYXRhLmdldEludDMyKHRoaXMub2Zmc2V0LCB0aGlzLmxpdHRsZUVuZGlhbik7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IDQ7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVhZCBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGFuZCBtb3ZlIHBvaW50ZXIgZm9yd2FyZCBieSA0IGJ5dGVzLlxuICAgICAqIEByZXR1cm5zIFRoZSByZWFkIHZhbHVlLlxuICAgICAqL1xuICAgIHJlYWRVaW50MzIoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZGF0YS5nZXRVaW50MzIodGhpcy5vZmZzZXQsIHRoaXMubGl0dGxlRW5kaWFuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gNDtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgMzItYml0IGZsb2F0aW5nIG51bWJlciBhbmQgbW92ZSBwb2ludGVyIGZvcndhcmQgYnkgNCBieXRlcy5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVhZCB2YWx1ZS5cbiAgICAgKi9cbiAgICByZWFkRmxvYXQzMigpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9kYXRhLmdldEZsb2F0MzIodGhpcy5vZmZzZXQsIHRoaXMubGl0dGxlRW5kaWFuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gNDtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgNjQtYml0IGZsb2F0aW5nIG51bWJlciBhbmQgbW92ZSBwb2ludGVyIGZvcndhcmQgYnkgOCBieXRlcy5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVhZCB2YWx1ZS5cbiAgICAgKi9cbiAgICByZWFkRmxvYXQ2NCgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9kYXRhLmdldEZsb2F0NjQodGhpcy5vZmZzZXQsIHRoaXMubGl0dGxlRW5kaWFuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gODtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgNjQtYml0IHNpZ25lZCBpbnRlZ2VyIG51bWJlciBhbmQgbW92ZSBwb2ludGVyIGZvcndhcmQgYnkgOCBieXRlcy5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVhZCB2YWx1ZS5cbiAgICAgKi9cbiAgICByZWFkQmlnSW50NjQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZGF0YS5nZXRCaWdJbnQ2NCh0aGlzLm9mZnNldCwgdGhpcy5saXR0bGVFbmRpYW4pO1xuICAgICAgICB0aGlzLm9mZnNldCArPSA4O1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSA2NC1iaXQgdW5zaWduZWQgaW50ZWdlciBudW1iZXIgYW5kIG1vdmUgcG9pbnRlciBmb3J3YXJkIGJ5IDggYnl0ZXMuXG4gICAgICogQHJldHVybnMgVGhlIHJlYWQgdmFsdWUuXG4gICAgICovXG4gICAgcmVhZEJpZ1VpbnQ2NCgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9kYXRhLmdldEJpZ1VpbnQ2NCh0aGlzLm9mZnNldCwgdGhpcy5saXR0bGVFbmRpYW4pO1xuICAgICAgICB0aGlzLm9mZnNldCArPSA4O1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgYSAxLWJ5dGUgQVNDSUkgY2hhcmFjdGVyIGFuZCBtb3ZlIHBvaW50ZXIgZm9yd2FyZCBieSAxIGJ5dGUuXG4gICAgICogQHJldHVybnMgVGhlIHJlYWQgY2hhcmFjdGVyLlxuICAgICAqL1xuICAgIHJlYWRDaGFyKCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItY29kZS1wb2ludFxuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLnJlYWRJbnQ4KCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWFkIGBuYCAxLWJ5dGUgQVNDSUkgY2hhcmFjdGVycyBhbmQgbW92ZSBwb2ludGVyIGZvcndhcmQgYnkgYG5gIGJ5dGVzLlxuICAgICAqIEBwYXJhbSBuIC0gTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gcmVhZC5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVhZCBjaGFyYWN0ZXJzLlxuICAgICAqL1xuICAgIHJlYWRDaGFycyhuID0gMSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gdGhpcy5yZWFkQ2hhcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgdGhlIG5leHQgYG5gIGJ5dGVzLCByZXR1cm4gYSBVVEYtOCBkZWNvZGVkIHN0cmluZyBhbmQgbW92ZSBwb2ludGVyXG4gICAgICogZm9yd2FyZCBieSBgbmAgYnl0ZXMuXG4gICAgICogQHBhcmFtIG4gLSBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC5cbiAgICAgKiBAcmV0dXJucyBUaGUgZGVjb2RlZCBzdHJpbmcuXG4gICAgICovXG4gICAgcmVhZFV0ZjgobiA9IDEpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZSh0aGlzLnJlYWRCeXRlcyhuKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlYWQgdGhlIG5leHQgYG5gIGJ5dGVzLCByZXR1cm4gYSBzdHJpbmcgZGVjb2RlZCB3aXRoIGBlbmNvZGluZ2AgYW5kIG1vdmUgcG9pbnRlclxuICAgICAqIGZvcndhcmQgYnkgYG5gIGJ5dGVzLlxuICAgICAqIElmIG5vIGVuY29kaW5nIGlzIHBhc3NlZCwgdGhlIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gQHNlZSB7QGxpbmsgSU9CdWZmZXIjcmVhZFV0Zjh9XG4gICAgICogQHBhcmFtIG4gLSBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC5cbiAgICAgKiBAcGFyYW0gZW5jb2RpbmcgLSBUaGUgZW5jb2RpbmcgdG8gdXNlLiBEZWZhdWx0IGlzICd1dGY4Jy5cbiAgICAgKiBAcmV0dXJucyBUaGUgZGVjb2RlZCBzdHJpbmcuXG4gICAgICovXG4gICAgZGVjb2RlVGV4dChuID0gMSwgZW5jb2RpbmcgPSAndXRmOCcpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZSh0aGlzLnJlYWRCeXRlcyhuKSwgZW5jb2RpbmcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSAweGZmIGlmIHRoZSBwYXNzZWQgdmFsdWUgaXMgdHJ1dGh5LCAweDAwIG90aGVyd2lzZSBhbmQgbW92ZSBwb2ludGVyXG4gICAgICogZm9yd2FyZCBieSAxIGJ5dGUuXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHdyaXRlLlxuICAgICAqIEByZXR1cm5zIFRoaXMuXG4gICAgICovXG4gICAgd3JpdGVCb29sZWFuKHZhbHVlKSB7XG4gICAgICAgIHRoaXMud3JpdGVVaW50OCh2YWx1ZSA/IDB4ZmYgOiAweDAwKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGB2YWx1ZWAgYXMgYW4gOC1iaXQgc2lnbmVkIGludGVnZXIgYW5kIG1vdmUgcG9pbnRlciBmb3J3YXJkIGJ5IDEgYnl0ZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gd3JpdGUuXG4gICAgICogQHJldHVybnMgVGhpcy5cbiAgICAgKi9cbiAgICB3cml0ZUludDgodmFsdWUpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVBdmFpbGFibGUoMSk7XG4gICAgICAgIHRoaXMuX2RhdGEuc2V0SW50OCh0aGlzLm9mZnNldCsrLCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxhc3RXcml0dGVuQnl0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYHZhbHVlYCBhcyBhbiA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGFuZCBtb3ZlIHBvaW50ZXIgZm9yd2FyZCBieSAxXG4gICAgICogYnl0ZS5cbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gd3JpdGUuXG4gICAgICogQHJldHVybnMgVGhpcy5cbiAgICAgKi9cbiAgICB3cml0ZVVpbnQ4KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlQXZhaWxhYmxlKDEpO1xuICAgICAgICB0aGlzLl9kYXRhLnNldFVpbnQ4KHRoaXMub2Zmc2V0KyssIHZhbHVlKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlTGFzdFdyaXR0ZW5CeXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbiBhbGlhcyBmb3Ige0BsaW5rIElPQnVmZmVyI3dyaXRlVWludDh9LlxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB3cml0ZS5cbiAgICAgKiBAcmV0dXJucyBUaGlzLlxuICAgICAqL1xuICAgIHdyaXRlQnl0ZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy53cml0ZVVpbnQ4KHZhbHVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYWxsIGVsZW1lbnRzIG9mIGBieXRlc2AgYXMgdWludDggdmFsdWVzIGFuZCBtb3ZlIHBvaW50ZXIgZm9yd2FyZCBieVxuICAgICAqIGBieXRlcy5sZW5ndGhgIGJ5dGVzLlxuICAgICAqIEBwYXJhbSBieXRlcyAtIFRoZSBhcnJheSBvZiBieXRlcyB0byB3cml0ZS5cbiAgICAgKiBAcmV0dXJucyBUaGlzLlxuICAgICAqL1xuICAgIHdyaXRlQnl0ZXMoYnl0ZXMpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVBdmFpbGFibGUoYnl0ZXMubGVuZ3RoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItZm9yLW9mXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGEuc2V0VWludDgodGhpcy5vZmZzZXQrKywgYnl0ZXNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxhc3RXcml0dGVuQnl0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYHZhbHVlYCBhcyBhIDE2LWJpdCBzaWduZWQgaW50ZWdlciBhbmQgbW92ZSBwb2ludGVyIGZvcndhcmQgYnkgMlxuICAgICAqIGJ5dGVzLlxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB3cml0ZS5cbiAgICAgKiBAcmV0dXJucyBUaGlzLlxuICAgICAqL1xuICAgIHdyaXRlSW50MTYodmFsdWUpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVBdmFpbGFibGUoMik7XG4gICAgICAgIHRoaXMuX2RhdGEuc2V0SW50MTYodGhpcy5vZmZzZXQsIHZhbHVlLCB0aGlzLmxpdHRsZUVuZGlhbik7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IDI7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxhc3RXcml0dGVuQnl0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYHZhbHVlYCBhcyBhIDE2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGFuZCBtb3ZlIHBvaW50ZXIgZm9yd2FyZCBieSAyXG4gICAgICogYnl0ZXMuXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHdyaXRlLlxuICAgICAqIEByZXR1cm5zIFRoaXMuXG4gICAgICovXG4gICAgd3JpdGVVaW50MTYodmFsdWUpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVBdmFpbGFibGUoMik7XG4gICAgICAgIHRoaXMuX2RhdGEuc2V0VWludDE2KHRoaXMub2Zmc2V0LCB2YWx1ZSwgdGhpcy5saXR0bGVFbmRpYW4pO1xuICAgICAgICB0aGlzLm9mZnNldCArPSAyO1xuICAgICAgICB0aGlzLl91cGRhdGVMYXN0V3JpdHRlbkJ5dGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGB2YWx1ZWAgYXMgYSAzMi1iaXQgc2lnbmVkIGludGVnZXIgYW5kIG1vdmUgcG9pbnRlciBmb3J3YXJkIGJ5IDRcbiAgICAgKiBieXRlcy5cbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gd3JpdGUuXG4gICAgICogQHJldHVybnMgVGhpcy5cbiAgICAgKi9cbiAgICB3cml0ZUludDMyKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlQXZhaWxhYmxlKDQpO1xuICAgICAgICB0aGlzLl9kYXRhLnNldEludDMyKHRoaXMub2Zmc2V0LCB2YWx1ZSwgdGhpcy5saXR0bGVFbmRpYW4pO1xuICAgICAgICB0aGlzLm9mZnNldCArPSA0O1xuICAgICAgICB0aGlzLl91cGRhdGVMYXN0V3JpdHRlbkJ5dGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGB2YWx1ZWAgYXMgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciBhbmQgbW92ZSBwb2ludGVyIGZvcndhcmQgYnkgNFxuICAgICAqIGJ5dGVzLlxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB3cml0ZS5cbiAgICAgKiBAcmV0dXJucyBUaGlzLlxuICAgICAqL1xuICAgIHdyaXRlVWludDMyKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlQXZhaWxhYmxlKDQpO1xuICAgICAgICB0aGlzLl9kYXRhLnNldFVpbnQzMih0aGlzLm9mZnNldCwgdmFsdWUsIHRoaXMubGl0dGxlRW5kaWFuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gNDtcbiAgICAgICAgdGhpcy5fdXBkYXRlTGFzdFdyaXR0ZW5CeXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBgdmFsdWVgIGFzIGEgMzItYml0IGZsb2F0aW5nIG51bWJlciBhbmQgbW92ZSBwb2ludGVyIGZvcndhcmQgYnkgNFxuICAgICAqIGJ5dGVzLlxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB3cml0ZS5cbiAgICAgKiBAcmV0dXJucyBUaGlzLlxuICAgICAqL1xuICAgIHdyaXRlRmxvYXQzMih2YWx1ZSkge1xuICAgICAgICB0aGlzLmVuc3VyZUF2YWlsYWJsZSg0KTtcbiAgICAgICAgdGhpcy5fZGF0YS5zZXRGbG9hdDMyKHRoaXMub2Zmc2V0LCB2YWx1ZSwgdGhpcy5saXR0bGVFbmRpYW4pO1xuICAgICAgICB0aGlzLm9mZnNldCArPSA0O1xuICAgICAgICB0aGlzLl91cGRhdGVMYXN0V3JpdHRlbkJ5dGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdyaXRlIGB2YWx1ZWAgYXMgYSA2NC1iaXQgZmxvYXRpbmcgbnVtYmVyIGFuZCBtb3ZlIHBvaW50ZXIgZm9yd2FyZCBieSA4XG4gICAgICogYnl0ZXMuXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHdyaXRlLlxuICAgICAqIEByZXR1cm5zIFRoaXMuXG4gICAgICovXG4gICAgd3JpdGVGbG9hdDY0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlQXZhaWxhYmxlKDgpO1xuICAgICAgICB0aGlzLl9kYXRhLnNldEZsb2F0NjQodGhpcy5vZmZzZXQsIHZhbHVlLCB0aGlzLmxpdHRsZUVuZGlhbik7XG4gICAgICAgIHRoaXMub2Zmc2V0ICs9IDg7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxhc3RXcml0dGVuQnl0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogV3JpdGUgYHZhbHVlYCBhcyBhIDY0LWJpdCBzaWduZWQgYmlnaW50IGFuZCBtb3ZlIHBvaW50ZXIgZm9yd2FyZCBieSA4XG4gICAgICogYnl0ZXMuXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHdyaXRlLlxuICAgICAqIEByZXR1cm5zIFRoaXMuXG4gICAgICovXG4gICAgd3JpdGVCaWdJbnQ2NCh2YWx1ZSkge1xuICAgICAgICB0aGlzLmVuc3VyZUF2YWlsYWJsZSg4KTtcbiAgICAgICAgdGhpcy5fZGF0YS5zZXRCaWdJbnQ2NCh0aGlzLm9mZnNldCwgdmFsdWUsIHRoaXMubGl0dGxlRW5kaWFuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gODtcbiAgICAgICAgdGhpcy5fdXBkYXRlTGFzdFdyaXR0ZW5CeXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSBgdmFsdWVgIGFzIGEgNjQtYml0IHVuc2lnbmVkIGJpZ2ludCBhbmQgbW92ZSBwb2ludGVyIGZvcndhcmQgYnkgOFxuICAgICAqIGJ5dGVzLlxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB3cml0ZS5cbiAgICAgKiBAcmV0dXJucyBUaGlzLlxuICAgICAqL1xuICAgIHdyaXRlQmlnVWludDY0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlQXZhaWxhYmxlKDgpO1xuICAgICAgICB0aGlzLl9kYXRhLnNldEJpZ1VpbnQ2NCh0aGlzLm9mZnNldCwgdmFsdWUsIHRoaXMubGl0dGxlRW5kaWFuKTtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gODtcbiAgICAgICAgdGhpcy5fdXBkYXRlTGFzdFdyaXR0ZW5CeXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSB0aGUgY2hhckNvZGUgb2YgYHN0cmAncyBmaXJzdCBjaGFyYWN0ZXIgYXMgYW4gOC1iaXQgdW5zaWduZWQgaW50ZWdlclxuICAgICAqIGFuZCBtb3ZlIHBvaW50ZXIgZm9yd2FyZCBieSAxIGJ5dGUuXG4gICAgICogQHBhcmFtIHN0ciAtIFRoZSBjaGFyYWN0ZXIgdG8gd3JpdGUuXG4gICAgICogQHJldHVybnMgVGhpcy5cbiAgICAgKi9cbiAgICB3cml0ZUNoYXIoc3RyKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1jb2RlLXBvaW50XG4gICAgICAgIHJldHVybiB0aGlzLndyaXRlVWludDgoc3RyLmNoYXJDb2RlQXQoMCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXcml0ZSB0aGUgY2hhckNvZGVzIG9mIGFsbCBgc3RyYCdzIGNoYXJhY3RlcnMgYXMgOC1iaXQgdW5zaWduZWQgaW50ZWdlcnNcbiAgICAgKiBhbmQgbW92ZSBwb2ludGVyIGZvcndhcmQgYnkgYHN0ci5sZW5ndGhgIGJ5dGVzLlxuICAgICAqIEBwYXJhbSBzdHIgLSBUaGUgY2hhcmFjdGVycyB0byB3cml0ZS5cbiAgICAgKiBAcmV0dXJucyBUaGlzLlxuICAgICAqL1xuICAgIHdyaXRlQ2hhcnMoc3RyKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItY29kZS1wb2ludFxuICAgICAgICAgICAgdGhpcy53cml0ZVVpbnQ4KHN0ci5jaGFyQ29kZUF0KGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogVVRGLTggZW5jb2RlIGFuZCB3cml0ZSBgc3RyYCB0byB0aGUgY3VycmVudCBwb2ludGVyIG9mZnNldCBhbmQgbW92ZSBwb2ludGVyXG4gICAgICogZm9yd2FyZCBhY2NvcmRpbmcgdG8gdGhlIGVuY29kZWQgbGVuZ3RoLlxuICAgICAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nIHRvIHdyaXRlLlxuICAgICAqIEByZXR1cm5zIFRoaXMuXG4gICAgICovXG4gICAgd3JpdGVVdGY4KHN0cikge1xuICAgICAgICByZXR1cm4gdGhpcy53cml0ZUJ5dGVzKGVuY29kZShzdHIpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhwb3J0IGEgVWludDhBcnJheSB2aWV3IG9mIHRoZSBpbnRlcm5hbCBidWZmZXIuXG4gICAgICogVGhlIHZpZXcgc3RhcnRzIGF0IHRoZSBieXRlIG9mZnNldCBhbmQgaXRzIGxlbmd0aFxuICAgICAqIGlzIGNhbGN1bGF0ZWQgdG8gc3RvcCBhdCB0aGUgbGFzdCB3cml0dGVuIGJ5dGUgb3IgdGhlIG9yaWdpbmFsIGxlbmd0aC5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyBVaW50OEFycmF5IHZpZXcuXG4gICAgICovXG4gICAgdG9BcnJheSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHRoaXMuYnVmZmVyLCB0aGlzLmJ5dGVPZmZzZXQsIHRoaXMubGFzdFdyaXR0ZW5CeXRlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogIEdldCB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gc28gZmFyLCByZWdhcmRsZXNzIG9mIHRoZSBjdXJyZW50IG9mZnNldC5cbiAgICAgKiBAcmV0dXJucyAtIFRvdGFsIG51bWJlciBvZiBieXRlcy5cbiAgICAgKi9cbiAgICBnZXRXcml0dGVuQnl0ZUxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFzdFdyaXR0ZW5CeXRlIC0gdGhpcy5ieXRlT2Zmc2V0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgdGhlIGxhc3Qgd3JpdHRlbiBieXRlIG9mZnNldFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3VwZGF0ZUxhc3RXcml0dGVuQnl0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMub2Zmc2V0ID4gdGhpcy5sYXN0V3JpdHRlbkJ5dGUpIHtcbiAgICAgICAgICAgIHRoaXMubGFzdFdyaXR0ZW5CeXRlID0gdGhpcy5vZmZzZXQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JT0J1ZmZlci5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/iobuffer/lib-esm/IOBuffer.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/iobuffer/lib-esm/text.js":
/*!***********************************************!*\
!*** ./node_modules/iobuffer/lib-esm/text.js ***!
\***********************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ decode: function() { return /* binding */ decode; },\n/* harmony export */ encode: function() { return /* binding */ encode; }\n/* harmony export */ });\nfunction decode(bytes, encoding = 'utf8') {\n const decoder = new TextDecoder(encoding);\n return decoder.decode(bytes);\n}\nconst encoder = new TextEncoder();\nfunction encode(str) {\n return encoder.encode(str);\n}\n//# sourceMappingURL=text.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pb2J1ZmZlci9saWItZXNtL3RleHQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2lvYnVmZmVyL2xpYi1lc20vdGV4dC5qcz9hY2UxIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBkZWNvZGUoYnl0ZXMsIGVuY29kaW5nID0gJ3V0ZjgnKSB7XG4gICAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcihlbmNvZGluZyk7XG4gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlKGJ5dGVzKTtcbn1cbmNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGUoc3RyKSB7XG4gICAgcmV0dXJuIGVuY29kZXIuZW5jb2RlKHN0cik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10ZXh0LmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/iobuffer/lib-esm/text.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/jspdf/dist/jspdf.es.min.js":
/*!*************************************************!*\
!*** ./node_modules/jspdf/dist/jspdf.es.min.js ***!
\*************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AcroForm: function() { return /* binding */ _t; },\n/* harmony export */ AcroFormAppearance: function() { return /* binding */ At; },\n/* harmony export */ AcroFormButton: function() { return /* binding */ vt; },\n/* harmony export */ AcroFormCheckBox: function() { return /* binding */ Nt; },\n/* harmony export */ AcroFormChoiceField: function() { return /* binding */ dt; },\n/* harmony export */ AcroFormComboBox: function() { return /* binding */ gt; },\n/* harmony export */ AcroFormEditBox: function() { return /* binding */ mt; },\n/* harmony export */ AcroFormListBox: function() { return /* binding */ pt; },\n/* harmony export */ AcroFormPasswordField: function() { return /* binding */ xt; },\n/* harmony export */ AcroFormPushButton: function() { return /* binding */ bt; },\n/* harmony export */ AcroFormRadioButton: function() { return /* binding */ yt; },\n/* harmony export */ AcroFormTextField: function() { return /* binding */ Lt; },\n/* harmony export */ GState: function() { return /* binding */ O; },\n/* harmony export */ ShadingPattern: function() { return /* binding */ M; },\n/* harmony export */ TilingPattern: function() { return /* binding */ q; },\n/* harmony export */ \"default\": function() { return /* binding */ E; },\n/* harmony export */ jsPDF: function() { return /* binding */ E; }\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ \"(app-pages-browser)/./node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var fflate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! fflate */ \"(app-pages-browser)/./node_modules/fflate/esm/browser.js\");\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"(app-pages-browser)/./node_modules/@babel/runtime/helpers/esm/slicedToArray.js\");\n/* harmony import */ var fast_png__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! fast-png */ \"(app-pages-browser)/./node_modules/fast-png/lib-esm/index.js\");\n/** @license\n *\n * jsPDF - PDF Document creation from JavaScript\n * Version 4.2.1 Built on 2026-03-17T11:11:27.057Z\n * CommitID 00000000\n *\n * Copyright (c) 2010-2025 James Hall <james@parall.ax>, https://github.com/MrRio/jsPDF\n * 2015-2025 yWorks GmbH, http://www.yworks.com\n * 2015-2025 Lukas Holländer <lukas.hollaender@yworks.com>, https://github.com/HackbrettXXX\n * 2016-2018 Aras Abbasi <aras.abbasi@gmail.com>\n * 2010 Aaron Spike, https://github.com/acspike\n * 2012 Willow Systems Corporation, https://github.com/willowsystems\n * 2012 Pablo Hess, https://github.com/pablohess\n * 2012 Florian Jenett, https://github.com/fjenett\n * 2013 Warren Weckesser, https://github.com/warrenweckesser\n * 2013 Youssef Beddad, https://github.com/lifof\n * 2013 Lee Driscoll, https://github.com/lsdriscoll\n * 2013 Stefan Slonevskiy, https://github.com/stefslon\n * 2013 Jeremy Morel, https://github.com/jmorel\n * 2013 Christoph Hartmann, https://github.com/chris-rock\n * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria\n * 2014 James Makes, https://github.com/dollaruw\n * 2014 Diego Casorran, https://github.com/diegocr\n * 2014 Steven Spungin, https://github.com/Flamenco\n * 2014 Kenneth Glassey, https://github.com/Gavvers\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * Contributor(s):\n * siefkenj, ahwolf, rickygu, Midnith, saintclair, eaparango,\n * kim3er, mfo, alnorth, Flamenco\n */\n\nvar i=function(){return\"undefined\"!=typeof window?window:\"undefined\"!=typeof __webpack_require__.g?__webpack_require__.g:\"undefined\"!=typeof self?self:this}();function a(){i.console&&\"function\"==typeof i.console.log&&i.console.log.apply(i.console,arguments)}var o={log:a,warn:function(t){i.console&&(\"function\"==typeof i.console.warn?i.console.warn.apply(i.console,arguments):a.call(null,arguments))},error:function(t){i.console&&(\"function\"==typeof i.console.error?i.console.error.apply(i.console,arguments):a(t))}};function s(t,e,r){var n=new XMLHttpRequest;n.open(\"GET\",t),n.responseType=\"blob\",n.onload=function(){l(n.response,e,r)},n.onerror=function(){o.error(\"could not download file\")},n.send()}function u(t){var e=new XMLHttpRequest;e.open(\"HEAD\",t,!1);try{e.send()}catch(r){}return e.status>=200&&e.status<=299}function c(t){try{t.dispatchEvent(new MouseEvent(\"click\"))}catch(r){var e=document.createEvent(\"MouseEvents\");e.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),t.dispatchEvent(e)}}var l=i.saveAs||(\"object\"!==(\"undefined\"==typeof window?\"undefined\":(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(window))||window!==i?function(){}:\"undefined\"!=typeof HTMLAnchorElement&&\"download\"in HTMLAnchorElement.prototype?function(t,e,r){var n=i.URL||i.webkitURL,a=document.createElement(\"a\");e=e||t.name||\"download\",a.download=e,a.rel=\"noopener\",\"string\"==typeof t?(a.href=t,a.origin!==location.origin?u(a.href)?s(t,e,r):c(a,a.target=\"_blank\"):c(a)):(a.href=n.createObjectURL(t),setTimeout(function(){n.revokeObjectURL(a.href)},4e4),setTimeout(function(){c(a)},0))}:\"msSaveOrOpenBlob\"in navigator?function(e,r,n){if(r=r||e.name||\"download\",\"string\"==typeof e)if(u(e))s(e,r,n);else{var i=document.createElement(\"a\");i.href=e,i.target=\"_blank\",setTimeout(function(){c(i)})}else navigator.msSaveOrOpenBlob(function(e,r){return void 0===r?r={autoBom:!1}:\"object\"!==(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(r)&&(o.warn(\"Deprecated: Expected third argument to be a object\"),r={autoBom:!r}),r.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(e.type)?new Blob([String.fromCharCode(65279),e],{type:e.type}):e}(e,n),r)}:function(e,r,n,a){if((a=a||open(\"\",\"_blank\"))&&(a.document.title=a.document.body.innerText=\"downloading...\"),\"string\"==typeof e)return s(e,r,n);var o=\"application/octet-stream\"===e.type,u=/constructor/i.test(i.HTMLElement)||i.safari,c=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((c||o&&u)&&\"object\"===(\"undefined\"==typeof FileReader?\"undefined\":(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(FileReader))){var l=new FileReader;l.onloadend=function(){var t=l.result;t=c?t:t.replace(/^data:[^;]*;/,\"data:attachment/file;\"),a?a.location.href=t:location=t,a=null},l.readAsDataURL(e)}else{var h=i.URL||i.webkitURL,f=h.createObjectURL(e);a?a.location=f:location.href=f,a=null,setTimeout(function(){h.revokeObjectURL(f)},4e4)}});\n/**\n * A class to parse color values\n * @author Stoyan Stefanov <sstoo@gmail.com>\n * {@link http://www.phpied.com/rgb-color-parser-in-javascript/}\n * @license Use it if you like it\n */function h(t){var e;t=t||\"\",this.ok=!1,\"#\"==t.charAt(0)&&(t=t.substr(1,6)),t={aliceblue:\"f0f8ff\",antiquewhite:\"faebd7\",aqua:\"00ffff\",aquamarine:\"7fffd4\",azure:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"000000\",blanchedalmond:\"ffebcd\",blue:\"0000ff\",blueviolet:\"8a2be2\",brown:\"a52a2a\",burlywood:\"deb887\",cadetblue:\"5f9ea0\",chartreuse:\"7fff00\",chocolate:\"d2691e\",coral:\"ff7f50\",cornflowerblue:\"6495ed\",cornsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"00ffff\",darkblue:\"00008b\",darkcyan:\"008b8b\",darkgoldenrod:\"b8860b\",darkgray:\"a9a9a9\",darkgreen:\"006400\",darkkhaki:\"bdb76b\",darkmagenta:\"8b008b\",darkolivegreen:\"556b2f\",darkorange:\"ff8c00\",darkorchid:\"9932cc\",darkred:\"8b0000\",darksalmon:\"e9967a\",darkseagreen:\"8fbc8f\",darkslateblue:\"483d8b\",darkslategray:\"2f4f4f\",darkturquoise:\"00ced1\",darkviolet:\"9400d3\",deeppink:\"ff1493\",deepskyblue:\"00bfff\",dimgray:\"696969\",dodgerblue:\"1e90ff\",feldspar:\"d19275\",firebrick:\"b22222\",floralwhite:\"fffaf0\",forestgreen:\"228b22\",fuchsia:\"ff00ff\",gainsboro:\"dcdcdc\",ghostwhite:\"f8f8ff\",gold:\"ffd700\",goldenrod:\"daa520\",gray:\"808080\",green:\"008000\",greenyellow:\"adff2f\",honeydew:\"f0fff0\",hotpink:\"ff69b4\",indianred:\"cd5c5c\",indigo:\"4b0082\",ivory:\"fffff0\",khaki:\"f0e68c\",lavender:\"e6e6fa\",lavenderblush:\"fff0f5\",lawngreen:\"7cfc00\",lemonchiffon:\"fffacd\",lightblue:\"add8e6\",lightcoral:\"f08080\",lightcyan:\"e0ffff\",lightgoldenrodyellow:\"fafad2\",lightgrey:\"d3d3d3\",lightgreen:\"90ee90\",lightpink:\"ffb6c1\",lightsalmon:\"ffa07a\",lightseagreen:\"20b2aa\",lightskyblue:\"87cefa\",lightslateblue:\"8470ff\",lightslategray:\"778899\",lightsteelblue:\"b0c4de\",lightyellow:\"ffffe0\",lime:\"00ff00\",limegreen:\"32cd32\",linen:\"faf0e6\",magenta:\"ff00ff\",maroon:\"800000\",mediumaquamarine:\"66cdaa\",mediumblue:\"0000cd\",mediumorchid:\"ba55d3\",mediumpurple:\"9370d8\",mediumseagreen:\"3cb371\",mediumslateblue:\"7b68ee\",mediumspringgreen:\"00fa9a\",mediumturquoise:\"48d1cc\",mediumvioletred:\"c71585\",midnightblue:\"191970\",mintcream:\"f5fffa\",mistyrose:\"ffe4e1\",moccasin:\"ffe4b5\",navajowhite:\"ffdead\",navy:\"000080\",oldlace:\"fdf5e6\",olive:\"808000\",olivedrab:\"6b8e23\",orange:\"ffa500\",orangered:\"ff4500\",orchid:\"da70d6\",palegoldenrod:\"eee8aa\",palegreen:\"98fb98\",paleturquoise:\"afeeee\",palevioletred:\"d87093\",papayawhip:\"ffefd5\",peachpuff:\"ffdab9\",peru:\"cd853f\",pink:\"ffc0cb\",plum:\"dda0dd\",powderblue:\"b0e0e6\",purple:\"800080\",red:\"ff0000\",rosybrown:\"bc8f8f\",royalblue:\"4169e1\",saddlebrown:\"8b4513\",salmon:\"fa8072\",sandybrown:\"f4a460\",seagreen:\"2e8b57\",seashell:\"fff5ee\",sienna:\"a0522d\",silver:\"c0c0c0\",skyblue:\"87ceeb\",slateblue:\"6a5acd\",slategray:\"708090\",snow:\"fffafa\",springgreen:\"00ff7f\",steelblue:\"4682b4\",tan:\"d2b48c\",teal:\"008080\",thistle:\"d8bfd8\",tomato:\"ff6347\",turquoise:\"40e0d0\",violet:\"ee82ee\",violetred:\"d02090\",wheat:\"f5deb3\",white:\"ffffff\",whitesmoke:\"f5f5f5\",yellow:\"ffff00\",yellowgreen:\"9acd32\"}[t=(t=t.replace(/ /g,\"\")).toLowerCase()]||t;for(var r=[{re:/^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,example:[\"rgb(123, 234, 45)\",\"rgb(255,234,245)\"],process:function(t){return[parseInt(t[1]),parseInt(t[2]),parseInt(t[3])]}},{re:/^(\\w{2})(\\w{2})(\\w{2})$/,example:[\"#00ff00\",\"336699\"],process:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/^(\\w{1})(\\w{1})(\\w{1})$/,example:[\"#fb0\",\"f0f\"],process:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}}],n=0;n<r.length;n++){var i=r[n].re,a=r[n].process,o=i.exec(t);o&&(e=a(o),this.r=e[0],this.g=e[1],this.b=e[2],this.ok=!0)}this.r=this.r<0||isNaN(this.r)?0:this.r>255?255:this.r,this.g=this.g<0||isNaN(this.g)?0:this.g>255?255:this.g,this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b,this.toRGB=function(){return\"rgb(\"+this.r+\", \"+this.g+\", \"+this.b+\")\"},this.toHex=function(){var t=this.r.toString(16),e=this.g.toString(16),r=this.b.toString(16);return 1==t.length&&(t=\"0\"+t),1==e.length&&(e=\"0\"+e),1==r.length&&(r=\"0\"+r),\"#\"+t+e+r}}var f=i.atob.bind(i),d=i.btoa.bind(i);\n/**\n * @license\n * Joseph Myers does not specify a particular license for his work.\n *\n * Author: Joseph Myers\n * Accessed from: http://www.myersdaily.org/joseph/javascript/md5.js\n *\n * Modified by: Owen Leong\n */\nfunction p(t,e){var r=t[0],n=t[1],i=t[2],a=t[3];r=m(r,n,i,a,e[0],7,-680876936),a=m(a,r,n,i,e[1],12,-389564586),i=m(i,a,r,n,e[2],17,606105819),n=m(n,i,a,r,e[3],22,-1044525330),r=m(r,n,i,a,e[4],7,-176418897),a=m(a,r,n,i,e[5],12,1200080426),i=m(i,a,r,n,e[6],17,-1473231341),n=m(n,i,a,r,e[7],22,-45705983),r=m(r,n,i,a,e[8],7,1770035416),a=m(a,r,n,i,e[9],12,-1958414417),i=m(i,a,r,n,e[10],17,-42063),n=m(n,i,a,r,e[11],22,-1990404162),r=m(r,n,i,a,e[12],7,1804603682),a=m(a,r,n,i,e[13],12,-40341101),i=m(i,a,r,n,e[14],17,-1502002290),r=v(r,n=m(n,i,a,r,e[15],22,1236535329),i,a,e[1],5,-165796510),a=v(a,r,n,i,e[6],9,-1069501632),i=v(i,a,r,n,e[11],14,643717713),n=v(n,i,a,r,e[0],20,-373897302),r=v(r,n,i,a,e[5],5,-701558691),a=v(a,r,n,i,e[10],9,38016083),i=v(i,a,r,n,e[15],14,-660478335),n=v(n,i,a,r,e[4],20,-405537848),r=v(r,n,i,a,e[9],5,568446438),a=v(a,r,n,i,e[14],9,-1019803690),i=v(i,a,r,n,e[3],14,-187363961),n=v(n,i,a,r,e[8],20,1163531501),r=v(r,n,i,a,e[13],5,-1444681467),a=v(a,r,n,i,e[2],9,-51403784),i=v(i,a,r,n,e[7],14,1735328473),r=b(r,n=v(n,i,a,r,e[12],20,-1926607734),i,a,e[5],4,-378558),a=b(a,r,n,i,e[8],11,-2022574463),i=b(i,a,r,n,e[11],16,1839030562),n=b(n,i,a,r,e[14],23,-35309556),r=b(r,n,i,a,e[1],4,-1530992060),a=b(a,r,n,i,e[4],11,1272893353),i=b(i,a,r,n,e[7],16,-155497632),n=b(n,i,a,r,e[10],23,-1094730640),r=b(r,n,i,a,e[13],4,681279174),a=b(a,r,n,i,e[0],11,-358537222),i=b(i,a,r,n,e[3],16,-722521979),n=b(n,i,a,r,e[6],23,76029189),r=b(r,n,i,a,e[9],4,-640364487),a=b(a,r,n,i,e[12],11,-421815835),i=b(i,a,r,n,e[15],16,530742520),r=y(r,n=b(n,i,a,r,e[2],23,-995338651),i,a,e[0],6,-198630844),a=y(a,r,n,i,e[7],10,1126891415),i=y(i,a,r,n,e[14],15,-1416354905),n=y(n,i,a,r,e[5],21,-57434055),r=y(r,n,i,a,e[12],6,1700485571),a=y(a,r,n,i,e[3],10,-1894986606),i=y(i,a,r,n,e[10],15,-1051523),n=y(n,i,a,r,e[1],21,-2054922799),r=y(r,n,i,a,e[8],6,1873313359),a=y(a,r,n,i,e[15],10,-30611744),i=y(i,a,r,n,e[6],15,-1560198380),n=y(n,i,a,r,e[13],21,1309151649),r=y(r,n,i,a,e[4],6,-145523070),a=y(a,r,n,i,e[11],10,-1120210379),i=y(i,a,r,n,e[2],15,718787259),n=y(n,i,a,r,e[9],21,-343485551),t[0]=P(r,t[0]),t[1]=P(n,t[1]),t[2]=P(i,t[2]),t[3]=P(a,t[3])}function g(t,e,r,n,i,a){return e=P(P(e,t),P(n,a)),P(e<<i|e>>>32-i,r)}function m(t,e,r,n,i,a,o){return g(e&r|~e&n,t,e,i,a,o)}function v(t,e,r,n,i,a,o){return g(e&n|r&~n,t,e,i,a,o)}function b(t,e,r,n,i,a,o){return g(e^r^n,t,e,i,a,o)}function y(t,e,r,n,i,a,o){return g(r^(e|~n),t,e,i,a,o)}function w(t){var e,r=t.length,n=[1732584193,-271733879,-1732584194,271733878];for(e=64;e<=t.length;e+=64)p(n,N(t.substring(e-64,e)));t=t.substring(e-64);var i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(e=0;e<t.length;e++)i[e>>2]|=t.charCodeAt(e)<<(e%4<<3);if(i[e>>2]|=128<<(e%4<<3),e>55)for(p(n,i),e=0;e<16;e++)i[e]=0;return i[14]=8*r,p(n,i),n}function N(t){var e,r=[];for(e=0;e<64;e+=4)r[e>>2]=t.charCodeAt(e)+(t.charCodeAt(e+1)<<8)+(t.charCodeAt(e+2)<<16)+(t.charCodeAt(e+3)<<24);return r}var L=\"0123456789abcdef\".split(\"\");function x(t){for(var e=\"\",r=0;r<4;r++)e+=L[t>>8*r+4&15]+L[t>>8*r&15];return e}function A(t){return String.fromCharCode(255&t,(65280&t)>>8,(16711680&t)>>16,(4278190080&t)>>24)}function S(t){return w(t).map(A).join(\"\")}var _=\"5d41402abc4b2a76b9719d911017c592\"!=function(t){for(var e=0;e<t.length;e++)t[e]=x(t[e]);return t.join(\"\")}(w(\"hello\"));function P(t,e){if(_){var r=(65535&t)+(65535&e);return(t>>16)+(e>>16)+(r>>16)<<16|65535&r}return t+e&4294967295}\n/**\n * @license\n * FPDF is released under a permissive license: there is no usage restriction.\n * You may embed it freely in your application (commercial or not), with or\n * without modifications.\n *\n * Reference: http://www.fpdf.org/en/script/script37.php\n */function k(t,e){var r,n,i,a;if(t!==r){for(var o=(i=t,a=1+(256/t.length|0),new Array(a+1).join(i)),s=[],u=0;u<256;u++)s[u]=u;var c=0;for(u=0;u<256;u++){var l=s[u];c=(c+l+o.charCodeAt(u))%256,s[u]=s[c],s[c]=l}r=t,n=s}else s=n;var h=e.length,f=0,d=0,p=\"\";for(u=0;u<h;u++)d=(d+(l=s[f=(f+1)%256]))%256,s[f]=s[d],s[d]=l,o=s[(s[f]+s[d])%256],p+=String.fromCharCode(e.charCodeAt(u)^o);return p}\n/**\n * @license\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n * Author: Owen Leong (@owenl131)\n * Date: 15 Oct 2020\n * References:\n * https://www.cs.cmu.edu/~dst/Adobe/Gallery/anon21jul01-pdf-encryption.txt\n * https://github.com/foliojs/pdfkit/blob/master/lib/security.js\n * http://www.fpdf.org/en/script/script37.php\n */var F={print:4,modify:8,copy:16,\"annot-forms\":32};function I(t,e,r,n){this.v=1,this.r=2;var i=192;t.forEach(function(t){if(void 0!==F.perm)throw new Error(\"Invalid permission: \"+t);i+=F[t]}),this.padding=\"(¿N^NuŠAd\\0NVÿú\u0001\\b..\\0¶Ðh>€/\\f©þdSiz\";var a=(e+this.padding).substr(0,32),o=(r+this.padding).substr(0,32);this.O=this.processOwnerPassword(a,o),this.P=-(1+(255^i)),this.encryptionKey=S(a+this.O+this.lsbFirstWord(this.P)+this.hexToBytes(n)).substr(0,5),this.U=k(this.encryptionKey,this.padding)}function C(t){if(/[^\\u0000-\\u00ff]/.test(t))throw new Error(\"Invalid PDF Name Object: \"+t+\", Only accept ASCII characters.\");for(var e=\"\",r=t.length,n=0;n<r;n++){var i=t.charCodeAt(n);e+=i<33||35===i||37===i||40===i||41===i||47===i||60===i||62===i||91===i||93===i||123===i||125===i||i>126?\"#\"+(\"0\"+i.toString(16)).slice(-2):t[n]}return e}function j(e){if(\"object\"!==(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(e))throw new Error(\"Invalid Context passed to initialize PubSub (jsPDF-module)\");var r={};this.subscribe=function(t,e,n){if(n=n||!1,\"string\"!=typeof t||\"function\"!=typeof e||\"boolean\"!=typeof n)throw new Error(\"Invalid arguments passed to PubSub.subscribe (jsPDF-module)\");r.hasOwnProperty(t)||(r[t]={});var i=Math.random().toString(35);return r[t][i]=[e,!!n],i},this.unsubscribe=function(t){for(var e in r)if(r[e][t])return delete r[e][t],0===Object.keys(r[e]).length&&delete r[e],!0;return!1},this.publish=function(t){if(r.hasOwnProperty(t)){var n=Array.prototype.slice.call(arguments,1),a=[];for(var s in r[t]){var u=r[t][s];try{u[0].apply(e,n)}catch(c){i.console&&o.error(\"jsPDF PubSub Error\",c.message,c)}u[1]&&a.push(s)}a.length&&a.forEach(this.unsubscribe)}},this.getTopics=function(){return r}}function O(t){if(!(this instanceof O))return new O(t);var e=\"opacity,stroke-opacity\".split(\",\");for(var r in t)t.hasOwnProperty(r)&&e.indexOf(r)>=0&&(this[r]=t[r]);this.id=\"\",this.objectNumber=-1}function B(t,e){this.gState=t,this.matrix=e,this.id=\"\",this.objectNumber=-1}function M(t,e,r,n,i){if(!(this instanceof M))return new M(t,e,r,n,i);this.type=\"axial\"===t?2:3,this.coords=e,this.colors=r,B.call(this,n,i)}function q(t,e,r,n,i){if(!(this instanceof q))return new q(t,e,r,n,i);this.boundingBox=t,this.xStep=e,this.yStep=r,this.stream=\"\",this.cloneIndex=0,B.call(this,n,i)}function E(e){var r,n=\"string\"==typeof arguments[0]?arguments[0]:\"p\",a=arguments[1],s=arguments[2],u=arguments[3],c=[],f=1,p=16,g=\"S\",m=null;\"object\"===(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(e=e||{})&&(n=e.orientation,a=e.unit||a,s=e.format||s,u=e.compress||e.compressPdf||u,null!==(m=e.encryption||null)&&(m.userPassword=m.userPassword||\"\",m.ownerPassword=m.ownerPassword||\"\",m.userPermissions=m.userPermissions||[]),f=\"number\"==typeof e.userUnit?Math.abs(e.userUnit):1,void 0!==e.precision&&(r=e.precision),void 0!==e.floatPrecision&&(p=e.floatPrecision),g=e.defaultPathOperation||\"S\"),c=e.filters||(!0===u?[\"FlateEncode\"]:c),a=a||\"mm\",n=(\"\"+(n||\"P\")).toLowerCase();var v=e.putOnlyUsedFonts||!1,b={},y={internal:{},__private__:{}};y.__private__.PubSub=j;var w=\"1.3\",N=y.__private__.getPdfVersion=function(){return w};y.__private__.setPdfVersion=function(t){w=t};var L={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],\"government-letter\":[576,756],legal:[612,1008],\"junior-legal\":[576,360],ledger:[1224,792],tabloid:[792,1224],\"credit-card\":[153,243]};y.__private__.getPageFormats=function(){return L};var x=y.__private__.getPageFormat=function(t){return L[t]};s=s||\"a4\";var A=\"compat\",S=\"advanced\",_=A;function P(){this.saveGraphicsState(),lt(new Wt(St,0,0,-St,0,Pr()*St).toString()+\" cm\"),this.setFontSize(this.getFontSize()/St),g=\"n\",_=S}function k(){this.restoreGraphicsState(),g=\"S\",_=A}var F=y.__private__.combineFontStyleAndFontWeight=function(t,e){if(\"bold\"==t&&\"normal\"==e||\"bold\"==t&&400==e||\"normal\"==t&&\"italic\"==e||\"bold\"==t&&\"italic\"==e)throw new Error(\"Invalid Combination of fontweight and fontstyle\");return e&&(t=400==e||\"normal\"===e?\"italic\"===t?\"italic\":\"normal\":700!=e&&\"bold\"!==e||\"normal\"!==t?(700==e?\"bold\":e)+\"\"+t:\"bold\"),t};y.advancedAPI=function(t){var e=_===A;return e&&P.call(this),\"function\"!=typeof t||(t(this),e&&k.call(this)),this},y.compatAPI=function(t){var e=_===S;return e&&k.call(this),\"function\"!=typeof t||(t(this),e&&P.call(this)),this},y.isAdvancedAPI=function(){return _===S};var B,R=function(t){if(_!==S)throw new Error(t+\" is only available in 'advanced' API mode. You need to call advancedAPI() first.\")},D=y.roundToPrecision=y.__private__.roundToPrecision=function(t,e){var n=r||e;if(isNaN(t)||isNaN(n))throw new Error(\"Invalid argument passed to jsPDF.roundToPrecision\");return t.toFixed(n).replace(/0+$/,\"\")};B=y.hpf=y.__private__.hpf=\"number\"==typeof p?function(t){if(isNaN(t))throw new Error(\"Invalid argument passed to jsPDF.hpf\");return D(t,p)}:\"smart\"===p?function(t){if(isNaN(t))throw new Error(\"Invalid argument passed to jsPDF.hpf\");return D(t,t>-1&&t<1?16:5)}:function(t){if(isNaN(t))throw new Error(\"Invalid argument passed to jsPDF.hpf\");return D(t,16)};var T=y.f2=y.__private__.f2=function(t){if(isNaN(t))throw new Error(\"Invalid argument passed to jsPDF.f2\");return D(t,2)},z=y.__private__.f3=function(t){if(isNaN(t))throw new Error(\"Invalid argument passed to jsPDF.f3\");return D(t,3)},U=y.scale=y.__private__.scale=function(t){if(isNaN(t))throw new Error(\"Invalid argument passed to jsPDF.scale\");return _===A?t*St:_===S?t:void 0},H=function(t){return U(function(t){return _===A?Pr()-t:_===S?t:void 0}(t))};y.__private__.setPrecision=y.setPrecision=function(t){\"number\"==typeof parseInt(t,10)&&(r=parseInt(t,10))};var W,V=\"00000000000000000000000000000000\",G=y.__private__.getFileId=function(){return V},Y=y.__private__.setFileId=function(t){return V=void 0!==t&&/^[a-fA-F0-9]{32}$/.test(t)?t.toUpperCase():V.split(\"\").map(function(){return\"ABCDEF0123456789\".charAt(Math.floor(16*Math.random()))}).join(\"\"),null!==m&&(Oe=new I(m.userPermissions,m.userPassword,m.ownerPassword,V)),V};y.setFileId=function(t){return Y(t),this},y.getFileId=function(){return G()};var J=y.__private__.convertDateToPDFDate=function(t){var e=t.getTimezoneOffset(),r=e<0?\"+\":\"-\",n=Math.floor(Math.abs(e/60)),i=Math.abs(e%60),a=[r,Q(n),\"'\",Q(i),\"'\"].join(\"\");return[\"D:\",t.getFullYear(),Q(t.getMonth()+1),Q(t.getDate()),Q(t.getHours()),Q(t.getMinutes()),Q(t.getSeconds()),a].join(\"\")},X=y.__private__.convertPDFDateToDate=function(t){var e=parseInt(t.substr(2,4),10),r=parseInt(t.substr(6,2),10)-1,n=parseInt(t.substr(8,2),10),i=parseInt(t.substr(10,2),10),a=parseInt(t.substr(12,2),10),o=parseInt(t.substr(14,2),10);return new Date(e,r,n,i,a,o,0)},K=y.__private__.setCreationDate=function(t){var e;if(void 0===t&&(t=new Date),t instanceof Date)e=J(t);else{if(!/^D:(20[0-2][0-9]|203[0-7]|19[7-9][0-9])(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])(0[0-9]|1[0-9]|2[0-3])(0[0-9]|[1-5][0-9])(0[0-9]|[1-5][0-9])(\\+0[0-9]|\\+1[0-4]|-0[0-9]|-1[0-1])'(0[0-9]|[1-5][0-9])'?$/.test(t))throw new Error(\"Invalid argument passed to jsPDF.setCreationDate\");e=t}return W=e},Z=y.__private__.getCreationDate=function(t){var e=W;return\"jsDate\"===t&&(e=X(W)),e};y.setCreationDate=function(t){return K(t),this},y.getCreationDate=function(t){return Z(t)};var $,Q=y.__private__.padd2=function(t){return(\"0\"+parseInt(t)).slice(-2)},tt=y.__private__.padd2Hex=function(t){return(\"00\"+(t=t.toString())).substr(t.length)},et=0,rt=[],nt=[],it=0,at=[],ot=[],st=!1,ut=nt;y.__private__.setCustomOutputDestination=function(t){st=!0,ut=t};var ct=function(t){st||(ut=t)};y.__private__.resetCustomOutputDestination=function(){st=!1,ut=nt};var lt=y.__private__.out=function(t){return t=t.toString(),it+=t.length+1,ut.push(t),ut},ht=y.__private__.write=function(t){return lt(1===arguments.length?t.toString():Array.prototype.join.call(arguments,\" \"))},ft=y.__private__.getArrayBuffer=function(t){for(var e=t.length,r=new ArrayBuffer(e),n=new Uint8Array(r);e--;)n[e]=t.charCodeAt(e);return r},dt=[[\"Helvetica\",\"helvetica\",\"normal\",\"WinAnsiEncoding\"],[\"Helvetica-Bold\",\"helvetica\",\"bold\",\"WinAnsiEncoding\"],[\"Helvetica-Oblique\",\"helvetica\",\"italic\",\"WinAnsiEncoding\"],[\"Helvetica-BoldOblique\",\"helvetica\",\"bolditalic\",\"WinAnsiEncoding\"],[\"Courier\",\"courier\",\"normal\",\"WinAnsiEncoding\"],[\"Courier-Bold\",\"courier\",\"bold\",\"WinAnsiEncoding\"],[\"Courier-Oblique\",\"courier\",\"italic\",\"WinAnsiEncoding\"],[\"Courier-BoldOblique\",\"courier\",\"bolditalic\",\"WinAnsiEncoding\"],[\"Times-Roman\",\"times\",\"normal\",\"WinAnsiEncoding\"],[\"Times-Bold\",\"times\",\"bold\",\"WinAnsiEncoding\"],[\"Times-Italic\",\"times\",\"italic\",\"WinAnsiEncoding\"],[\"Times-BoldItalic\",\"times\",\"bolditalic\",\"WinAnsiEncoding\"],[\"ZapfDingbats\",\"zapfdingbats\",\"normal\",null],[\"Symbol\",\"symbol\",\"normal\",null]];y.__private__.getStandardFonts=function(){return dt};var pt=e.fontSize||16;y.__private__.setFontSize=y.setFontSize=function(t){return pt=_===S?t/St:t,this};var gt,mt=y.__private__.getFontSize=y.getFontSize=function(){return _===A?pt:pt*St},vt=e.R2L||!1;y.__private__.setR2L=y.setR2L=function(t){return vt=t,this},y.__private__.getR2L=y.getR2L=function(){return vt};var bt,yt=y.__private__.setZoomMode=function(t){if(/^(?:\\d+\\.\\d*|\\d*\\.\\d+|\\d+)%$/.test(t))gt=t;else if(isNaN(t)){if(-1===[void 0,null,\"fullwidth\",\"fullheight\",\"fullpage\",\"original\"].indexOf(t))throw new Error('zoom must be Integer (e.g. 2), a percentage Value (e.g. 300%) or fullwidth, fullheight, fullpage, original. \"'+t+'\" is not recognized.');gt=t}else gt=parseInt(t,10)};y.__private__.getZoomMode=function(){return gt};var wt,Nt=y.__private__.setPageMode=function(t){if(-1==[void 0,null,\"UseNone\",\"UseOutlines\",\"UseThumbs\",\"FullScreen\"].indexOf(t))throw new Error('Page mode must be one of UseNone, UseOutlines, UseThumbs, or FullScreen. \"'+t+'\" is not recognized.');bt=t};y.__private__.getPageMode=function(){return bt};var Lt=y.__private__.setLayoutMode=function(t){if(-1==[void 0,null,\"continuous\",\"single\",\"twoleft\",\"tworight\",\"two\"].indexOf(t))throw new Error('Layout mode must be one of continuous, single, twoleft, tworight. \"'+t+'\" is not recognized.');wt=t};y.__private__.getLayoutMode=function(){return wt},y.__private__.setDisplayMode=y.setDisplayMode=function(t,e,r){return yt(t),Lt(e),Nt(r),this};var xt={title:\"\",subject:\"\",author:\"\",keywords:\"\",creator:\"\"};y.__private__.getDocumentProperty=function(t){if(-1===Object.keys(xt).indexOf(t))throw new Error(\"Invalid argument passed to jsPDF.getDocumentProperty\");return xt[t]},y.__private__.getDocumentProperties=function(){return xt},y.__private__.setDocumentProperties=y.setProperties=y.setDocumentProperties=function(t){for(var e in xt)xt.hasOwnProperty(e)&&t[e]&&(xt[e]=t[e]);return this},y.__private__.setDocumentProperty=function(t,e){if(-1===Object.keys(xt).indexOf(t))throw new Error(\"Invalid arguments passed to jsPDF.setDocumentProperty\");return xt[t]=e};var At,St,_t,Pt,kt,Ft={},It={},Ct=[],jt={},Ot={},Bt={},Mt={},qt=null,Et=0,Rt=[],Dt=new j(y),Tt=e.hotfixes||[],zt={},Ut={},Ht=[],Wt=function t(e,r,n,i,a,o){if(!(this instanceof t))return new t(e,r,n,i,a,o);isNaN(e)&&(e=1),isNaN(r)&&(r=0),isNaN(n)&&(n=0),isNaN(i)&&(i=1),isNaN(a)&&(a=0),isNaN(o)&&(o=0),this._matrix=[e,r,n,i,a,o]};Object.defineProperty(Wt.prototype,\"sx\",{get:function(){return this._matrix[0]},set:function(t){this._matrix[0]=t}}),Object.defineProperty(Wt.prototype,\"shy\",{get:function(){return this._matrix[1]},set:function(t){this._matrix[1]=t}}),Object.defineProperty(Wt.prototype,\"shx\",{get:function(){return this._matrix[2]},set:function(t){this._matrix[2]=t}}),Object.defineProperty(Wt.prototype,\"sy\",{get:function(){return this._matrix[3]},set:function(t){this._matrix[3]=t}}),Object.defineProperty(Wt.prototype,\"tx\",{get:function(){return this._matrix[4]},set:function(t){this._matrix[4]=t}}),Object.defineProperty(Wt.prototype,\"ty\",{get:function(){return this._matrix[5]},set:function(t){this._matrix[5]=t}}),Object.defineProperty(Wt.prototype,\"a\",{get:function(){return this._matrix[0]},set:function(t){this._matrix[0]=t}}),Object.defineProperty(Wt.prototype,\"b\",{get:function(){return this._matrix[1]},set:function(t){this._matrix[1]=t}}),Object.defineProperty(Wt.prototype,\"c\",{get:function(){return this._matrix[2]},set:function(t){this._matrix[2]=t}}),Object.defineProperty(Wt.prototype,\"d\",{get:function(){return this._matrix[3]},set:function(t){this._matrix[3]=t}}),Object.defineProperty(Wt.prototype,\"e\",{get:function(){return this._matrix[4]},set:function(t){this._matrix[4]=t}}),Object.defineProperty(Wt.prototype,\"f\",{get:function(){return this._matrix[5]},set:function(t){this._matrix[5]=t}}),Object.defineProperty(Wt.prototype,\"rotation\",{get:function(){return Math.atan2(this.shx,this.sx)}}),Object.defineProperty(Wt.prototype,\"scaleX\",{get:function(){return this.decompose().scale.sx}}),Object.defineProperty(Wt.prototype,\"scaleY\",{get:function(){return this.decompose().scale.sy}}),Object.defineProperty(Wt.prototype,\"isIdentity\",{get:function(){return 1===this.sx&&0===this.shy&&0===this.shx&&1===this.sy&&0===this.tx&&0===this.ty}}),Wt.prototype.join=function(t){return[this.sx,this.shy,this.shx,this.sy,this.tx,this.ty].map(B).join(t)},Wt.prototype.multiply=function(t){var e=t.sx*this.sx+t.shy*this.shx,r=t.sx*this.shy+t.shy*this.sy,n=t.shx*this.sx+t.sy*this.shx,i=t.shx*this.shy+t.sy*this.sy,a=t.tx*this.sx+t.ty*this.shx+this.tx,o=t.tx*this.shy+t.ty*this.sy+this.ty;return new Wt(e,r,n,i,a,o)},Wt.prototype.decompose=function(){var t=this.sx,e=this.shy,r=this.shx,n=this.sy,i=this.tx,a=this.ty,o=Math.sqrt(t*t+e*e),s=(t/=o)*r+(e/=o)*n;r-=t*s,n-=e*s;var u=Math.sqrt(r*r+n*n);return s/=u,t*(n/=u)<e*(r/=u)&&(t=-t,e=-e,s=-s,o=-o),{scale:new Wt(o,0,0,u,0,0),translate:new Wt(1,0,0,1,i,a),rotate:new Wt(t,e,-e,t,0,0),skew:new Wt(1,0,s,1,0,0)}},Wt.prototype.toString=function(t){return this.join(\" \")},Wt.prototype.inversed=function(){var t=this.sx,e=this.shy,r=this.shx,n=this.sy,i=this.tx,a=this.ty,o=1/(t*n-e*r),s=n*o,u=-e*o,c=-r*o,l=t*o;return new Wt(s,u,c,l,-s*i-c*a,-u*i-l*a)},Wt.prototype.applyToPoint=function(t){var e=t.x*this.sx+t.y*this.shx+this.tx,r=t.x*this.shy+t.y*this.sy+this.ty;return new mr(e,r)},Wt.prototype.applyToRectangle=function(t){var e=this.applyToPoint(t),r=this.applyToPoint(new mr(t.x+t.w,t.y+t.h));return new vr(e.x,e.y,r.x-e.x,r.y-e.y)},Wt.prototype.clone=function(){var t=this.sx,e=this.shy,r=this.shx,n=this.sy,i=this.tx,a=this.ty;return new Wt(t,e,r,n,i,a)},y.Matrix=Wt;var Vt=y.matrixMult=function(t,e){return e.multiply(t)},Gt=new Wt(1,0,0,1,0,0);y.unitMatrix=y.identityMatrix=Gt;var Yt=function(t,e){if(!Ot[t]){var r=(e instanceof M?\"Sh\":\"P\")+(Object.keys(jt).length+1).toString(10);e.id=r,Ot[t]=r,jt[r]=e,Dt.publish(\"addPattern\",e)}};y.ShadingPattern=M,y.TilingPattern=q,y.addShadingPattern=function(t,e){return R(\"addShadingPattern()\"),Yt(t,e),this},y.beginTilingPattern=function(t){R(\"beginTilingPattern()\"),yr(t.boundingBox[0],t.boundingBox[1],t.boundingBox[2]-t.boundingBox[0],t.boundingBox[3]-t.boundingBox[1],t.matrix)},y.endTilingPattern=function(t,e){R(\"endTilingPattern()\"),e.stream=ot[$].join(\"\\n\"),Yt(t,e),Dt.publish(\"endTilingPattern\",e),Ht.pop().restore()};var Jt,Xt=y.__private__.newObject=function(){var t=Kt();return Zt(t,!0),t},Kt=y.__private__.newObjectDeferred=function(){return et++,rt[et]=function(){return it},et},Zt=function(t,e){return e=\"boolean\"==typeof e&&e,rt[t]=it,e&&lt(t+\" 0 obj\"),t},$t=y.__private__.newAdditionalObject=function(){var t={objId:Kt(),content:\"\"};return at.push(t),t},Qt=Kt(),te=Kt(),ee=y.__private__.decodeColorString=function(t){var e=t.split(\" \");if(2!==e.length||\"g\"!==e[1]&&\"G\"!==e[1])5!==e.length||\"k\"!==e[4]&&\"K\"!==e[4]||(e=[(1-e[0])*(1-e[3]),(1-e[1])*(1-e[3]),(1-e[2])*(1-e[3]),\"r\"]);else{var r=parseFloat(e[0]);e=[r,r,r,\"r\"]}for(var n=\"#\",i=0;i<3;i++)n+=(\"0\"+Math.floor(255*parseFloat(e[i])).toString(16)).slice(-2);return n},re=y.__private__.encodeColorString=function(e){var r;\"string\"==typeof e&&(e={ch1:e});var n=e.ch1,i=e.ch2,a=e.ch3,o=e.ch4,s=\"draw\"===e.pdfColorType?[\"G\",\"RG\",\"K\"]:[\"g\",\"rg\",\"k\"];if(\"string\"==typeof n&&\"#\"!==n.charAt(0)){var u=new h(n);if(u.ok)n=u.toHex();else if(!/^\\d*\\.?\\d*$/.test(n))throw new Error('Invalid color \"'+n+'\" passed to jsPDF.encodeColorString.')}if(\"string\"==typeof n&&/^#[0-9A-Fa-f]{3}$/.test(n)&&(n=\"#\"+n[1]+n[1]+n[2]+n[2]+n[3]+n[3]),\"string\"==typeof n&&/^#[0-9A-Fa-f]{6}$/.test(n)){var c=parseInt(n.substr(1),16);n=c>>16&255,i=c>>8&255,a=255&c}if(void 0===i||void 0===o&&n===i&&i===a)r=\"string\"==typeof n?n+\" \"+s[0]:2===e.precision?T(n/255)+\" \"+s[0]:z(n/255)+\" \"+s[0];else if(void 0===o||\"object\"===(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(o)){if(o&&!isNaN(o.a)&&0===o.a)return[\"1.\",\"1.\",\"1.\",s[1]].join(\" \");r=\"string\"==typeof n?[n,i,a,s[1]].join(\" \"):2===e.precision?[T(n/255),T(i/255),T(a/255),s[1]].join(\" \"):[z(n/255),z(i/255),z(a/255),s[1]].join(\" \")}else r=\"string\"==typeof n?[n,i,a,o,s[2]].join(\" \"):2===e.precision?[T(n),T(i),T(a),T(o),s[2]].join(\" \"):[z(n),z(i),z(a),z(o),s[2]].join(\" \");return r},ne=y.__private__.getFilters=function(){return c},ie=y.__private__.putStream=function(t){var e=(t=t||{}).data||\"\",r=t.filters||ne(),n=t.alreadyAppliedFilters||[],i=t.addLength1||!1,a=e.length,o=t.objectId,s=function(t){return t};if(null!==m&&void 0===o)throw new Error(\"ObjectId must be passed to putStream for file encryption\");null!==m&&(s=Oe.encryptor(o,0));var u={};!0===r&&(r=[\"FlateEncode\"]);var c=t.additionalKeyValues||[],l=(u=void 0!==E.API.processDataByFilters?E.API.processDataByFilters(e,r):{data:e,reverseChain:[]}).reverseChain+(Array.isArray(n)?n.join(\" \"):n.toString());if(0!==u.data.length&&(c.push({key:\"Length\",value:u.data.length}),!0===i&&c.push({key:\"Length1\",value:a})),0!=l.length)if(l.split(\"/\").length-1==1)c.push({key:\"Filter\",value:l});else{c.push({key:\"Filter\",value:\"[\"+l+\"]\"});for(var h=0;h<c.length;h+=1)if(\"DecodeParms\"===c[h].key){for(var f=[],d=0;d<u.reverseChain.split(\"/\").length-1;d+=1)f.push(\"null\");f.push(c[h].value),c[h].value=\"[\"+f.join(\" \")+\"]\"}}lt(\"<<\");for(var p=0;p<c.length;p++)lt(\"/\"+c[p].key+\" \"+c[p].value);lt(\">>\"),0!==u.data.length&&(lt(\"stream\"),lt(s(u.data)),lt(\"endstream\"))},ae=y.__private__.putPage=function(t){var e=t.number,r=t.data,n=t.objId,i=t.contentsObjId;Zt(n,!0),lt(\"<</Type /Page\"),lt(\"/Parent \"+t.rootDictionaryObjId+\" 0 R\"),lt(\"/Resources \"+t.resourceDictionaryObjId+\" 0 R\"),lt(\"/MediaBox [\"+parseFloat(B(t.mediaBox.bottomLeftX))+\" \"+parseFloat(B(t.mediaBox.bottomLeftY))+\" \"+B(t.mediaBox.topRightX)+\" \"+B(t.mediaBox.topRightY)+\"]\"),null!==t.cropBox&&lt(\"/CropBox [\"+B(t.cropBox.bottomLeftX)+\" \"+B(t.cropBox.bottomLeftY)+\" \"+B(t.cropBox.topRightX)+\" \"+B(t.cropBox.topRightY)+\"]\"),null!==t.bleedBox&&lt(\"/BleedBox [\"+B(t.bleedBox.bottomLeftX)+\" \"+B(t.bleedBox.bottomLeftY)+\" \"+B(t.bleedBox.topRightX)+\" \"+B(t.bleedBox.topRightY)+\"]\"),null!==t.trimBox&&lt(\"/TrimBox [\"+B(t.trimBox.bottomLeftX)+\" \"+B(t.trimBox.bottomLeftY)+\" \"+B(t.trimBox.topRightX)+\" \"+B(t.trimBox.topRightY)+\"]\"),null!==t.artBox&&lt(\"/ArtBox [\"+B(t.artBox.bottomLeftX)+\" \"+B(t.artBox.bottomLeftY)+\" \"+B(t.artBox.topRightX)+\" \"+B(t.artBox.topRightY)+\"]\"),\"number\"==typeof t.userUnit&&1!==t.userUnit&&lt(\"/UserUnit \"+t.userUnit),Dt.publish(\"putPage\",{objId:n,pageContext:Rt[e],pageNumber:e,page:r}),lt(\"/Contents \"+i+\" 0 R\"),lt(\">>\"),lt(\"endobj\");var a=r.join(\"\\n\");return _===S&&(a+=\"\\nQ\"),Zt(i,!0),ie({data:a,filters:ne(),objectId:i}),lt(\"endobj\"),n},oe=y.__private__.putPages=function(){var t,e,r=[];for(t=1;t<=Et;t++)Rt[t].objId=Kt(),Rt[t].contentsObjId=Kt();for(t=1;t<=Et;t++)r.push(ae({number:t,data:ot[t],objId:Rt[t].objId,contentsObjId:Rt[t].contentsObjId,mediaBox:Rt[t].mediaBox,cropBox:Rt[t].cropBox,bleedBox:Rt[t].bleedBox,trimBox:Rt[t].trimBox,artBox:Rt[t].artBox,userUnit:Rt[t].userUnit,rootDictionaryObjId:Qt,resourceDictionaryObjId:te}));Zt(Qt,!0),lt(\"<</Type /Pages\");var n=\"/Kids [\";for(e=0;e<Et;e++)n+=r[e]+\" 0 R \";lt(n+\"]\"),lt(\"/Count \"+Et),lt(\">>\"),lt(\"endobj\"),Dt.publish(\"postPutPages\")},se=function(t){Dt.publish(\"putFont\",{font:t,out:lt,newObject:Xt,putStream:ie}),!0!==t.isAlreadyPutted&&(t.objectNumber=Xt(),lt(\"<<\"),lt(\"/Type /Font\"),lt(\"/BaseFont /\"+C(t.postScriptName)),lt(\"/Subtype /Type1\"),\"string\"==typeof t.encoding&&lt(\"/Encoding /\"+t.encoding),lt(\"/FirstChar 32\"),lt(\"/LastChar 255\"),lt(\">>\"),lt(\"endobj\"))},ue=function(t){t.objectNumber=Xt();var e=[];e.push({key:\"Type\",value:\"/XObject\"}),e.push({key:\"Subtype\",value:\"/Form\"}),e.push({key:\"BBox\",value:\"[\"+[B(t.x),B(t.y),B(t.x+t.width),B(t.y+t.height)].join(\" \")+\"]\"}),e.push({key:\"Matrix\",value:\"[\"+t.matrix.toString()+\"]\"});var r=t.pages[1].join(\"\\n\");ie({data:r,additionalKeyValues:e,objectId:t.objectNumber}),lt(\"endobj\")},ce=function(t,e){e||(e=21);var r=Xt(),n=function(t,e){var r,n=[],i=1/(e-1);for(r=0;r<1;r+=i)n.push(r);if(n.push(1),0!=t[0].offset){var a={offset:0,color:t[0].color};t.unshift(a)}if(1!=t[t.length-1].offset){var o={offset:1,color:t[t.length-1].color};t.push(o)}for(var s=\"\",u=0,c=0;c<n.length;c++){for(r=n[c];r>t[u+1].offset;)u++;var l=t[u].offset,h=(r-l)/(t[u+1].offset-l),f=t[u].color,d=t[u+1].color;s+=tt(Math.round((1-h)*f[0]+h*d[0]).toString(16))+tt(Math.round((1-h)*f[1]+h*d[1]).toString(16))+tt(Math.round((1-h)*f[2]+h*d[2]).toString(16))}return s.trim()}(t.colors,e),i=[];i.push({key:\"FunctionType\",value:\"0\"}),i.push({key:\"Domain\",value:\"[0.0 1.0]\"}),i.push({key:\"Size\",value:\"[\"+e+\"]\"}),i.push({key:\"BitsPerSample\",value:\"8\"}),i.push({key:\"Range\",value:\"[0.0 1.0 0.0 1.0 0.0 1.0]\"}),i.push({key:\"Decode\",value:\"[0.0 1.0 0.0 1.0 0.0 1.0]\"}),ie({data:n,additionalKeyValues:i,alreadyAppliedFilters:[\"/ASCIIHexDecode\"],objectId:r}),lt(\"endobj\"),t.objectNumber=Xt(),lt(\"<< /ShadingType \"+t.type),lt(\"/ColorSpace /DeviceRGB\");var a=\"/Coords [\"+B(parseFloat(t.coords[0]))+\" \"+B(parseFloat(t.coords[1]))+\" \";2===t.type?a+=B(parseFloat(t.coords[2]))+\" \"+B(parseFloat(t.coords[3])):a+=B(parseFloat(t.coords[2]))+\" \"+B(parseFloat(t.coords[3]))+\" \"+B(parseFloat(t.coords[4]))+\" \"+B(parseFloat(t.coords[5])),lt(a+=\"]\"),t.matrix&&lt(\"/Matrix [\"+t.matrix.toString()+\"]\"),lt(\"/Function \"+r+\" 0 R\"),lt(\"/Extend [true true]\"),lt(\">>\"),lt(\"endobj\")},le=function(t,e){var r=Kt(),n=Xt();e.push({resourcesOid:r,objectOid:n}),t.objectNumber=n;var i=[];i.push({key:\"Type\",value:\"/Pattern\"}),i.push({key:\"PatternType\",value:\"1\"}),i.push({key:\"PaintType\",value:\"1\"}),i.push({key:\"TilingType\",value:\"1\"}),i.push({key:\"BBox\",value:\"[\"+t.boundingBox.map(B).join(\" \")+\"]\"}),i.push({key:\"XStep\",value:B(t.xStep)}),i.push({key:\"YStep\",value:B(t.yStep)}),i.push({key:\"Resources\",value:r+\" 0 R\"}),t.matrix&&i.push({key:\"Matrix\",value:\"[\"+t.matrix.toString()+\"]\"}),ie({data:t.stream,additionalKeyValues:i,objectId:t.objectNumber}),lt(\"endobj\")},he=function(t){for(var e in t.objectNumber=Xt(),lt(\"<<\"),t)switch(e){case\"opacity\":lt(\"/ca \"+T(t[e]));break;case\"stroke-opacity\":lt(\"/CA \"+T(t[e]))}lt(\">>\"),lt(\"endobj\")},fe=function(t){Zt(t.resourcesOid,!0),lt(\"<<\"),lt(\"/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]\"),function(){for(var t in lt(\"/Font <<\"),Ft)Ft.hasOwnProperty(t)&&(!1===v||!0===v&&b.hasOwnProperty(t))&&lt(\"/\"+t+\" \"+Ft[t].objectNumber+\" 0 R\");lt(\">>\")}(),function(){if(Object.keys(jt).length>0){for(var t in lt(\"/Shading <<\"),jt)jt.hasOwnProperty(t)&&jt[t]instanceof M&&jt[t].objectNumber>=0&&lt(\"/\"+t+\" \"+jt[t].objectNumber+\" 0 R\");Dt.publish(\"putShadingPatternDict\"),lt(\">>\")}}(),function(t){if(Object.keys(jt).length>0){for(var e in lt(\"/Pattern <<\"),jt)jt.hasOwnProperty(e)&&jt[e]instanceof y.TilingPattern&&jt[e].objectNumber>=0&&jt[e].objectNumber<t&&lt(\"/\"+e+\" \"+jt[e].objectNumber+\" 0 R\");Dt.publish(\"putTilingPatternDict\"),lt(\">>\")}}(t.objectOid),function(){if(Object.keys(Bt).length>0){var t;for(t in lt(\"/ExtGState <<\"),Bt)Bt.hasOwnProperty(t)&&Bt[t].objectNumber>=0&&lt(\"/\"+t+\" \"+Bt[t].objectNumber+\" 0 R\");Dt.publish(\"putGStateDict\"),lt(\">>\")}}(),function(){for(var t in lt(\"/XObject <<\"),zt)zt.hasOwnProperty(t)&&zt[t].objectNumber>=0&&lt(\"/\"+t+\" \"+zt[t].objectNumber+\" 0 R\");Dt.publish(\"putXobjectDict\"),lt(\">>\")}(),lt(\">>\"),lt(\"endobj\")},de=function(t){It[t.fontName]=It[t.fontName]||{},It[t.fontName][t.fontStyle]=t.id},pe=function(t,e,r,n,i){var a={id:\"F\"+(Object.keys(Ft).length+1).toString(10),postScriptName:t,fontName:e,fontStyle:r,encoding:n,isStandardFont:i||!1,metadata:{}};return Dt.publish(\"addFont\",{font:a,instance:this}),Ft[a.id]=a,de(a),a.id},ge=y.__private__.pdfEscape=y.pdfEscape=function(t,e){return function(t,e){var r,n,i,a,o,s,u,c,l;if(i=(e=e||{}).sourceEncoding||\"Unicode\",o=e.outputEncoding,(e.autoencode||o)&&Ft[At].metadata&&Ft[At].metadata[i]&&Ft[At].metadata[i].encoding&&(a=Ft[At].metadata[i].encoding,!o&&Ft[At].encoding&&(o=Ft[At].encoding),!o&&a.codePages&&(o=a.codePages[0]),\"string\"==typeof o&&(o=a[o]),o)){for(u=!1,s=[],r=0,n=t.length;r<n;r++)(c=o[t.charCodeAt(r)])?s.push(String.fromCharCode(c)):s.push(t[r]),s[r].charCodeAt(0)>>8&&(u=!0);t=s.join(\"\")}for(r=t.length;void 0===u&&0!==r;)t.charCodeAt(r-1)>>8&&(u=!0),r--;if(!u)return t;for(s=e.noBOM?[]:[254,255],r=0,n=t.length;r<n;r++){if((l=(c=t.charCodeAt(r))>>8)>>8)throw new Error(\"Character at position \"+r+\" of string '\"+t+\"' exceeds 16bits. Cannot be encoded into UCS-2 BE\");s.push(l),s.push(c-(l<<8))}return String.fromCharCode.apply(void 0,s)}(t,e).replace(/\\\\/g,\"\\\\\\\\\").replace(/\\(/g,\"\\\\(\").replace(/\\)/g,\"\\\\)\")},me=y.__private__.beginPage=function(t){ot[++Et]=[],Rt[Et]={objId:0,contentsObjId:0,userUnit:Number(f),artBox:null,bleedBox:null,cropBox:null,trimBox:null,mediaBox:{bottomLeftX:0,bottomLeftY:0,topRightX:Number(t[0]),topRightY:Number(t[1])}},ye(Et),ct(ot[$])},ve=function(t,e){var r,i,a;switch(n=e||n,\"string\"==typeof t&&(r=x(t.toLowerCase()),Array.isArray(r)&&(i=r[0],a=r[1])),Array.isArray(t)&&(i=t[0]*St,a=t[1]*St),isNaN(i)&&(i=s[0],a=s[1]),(i>14400||a>14400)&&(o.warn(\"A page in a PDF can not be wider or taller than 14400 userUnit. jsPDF limits the width/height to 14400\"),i=Math.min(14400,i),a=Math.min(14400,a)),s=[i,a],n.substr(0,1)){case\"l\":a>i&&(s=[a,i]);break;case\"p\":i>a&&(s=[a,i])}me(s),Qe(Ze),lt(sr),0!==dr&&lt(dr+\" J\"),0!==pr&&lt(pr+\" j\"),Dt.publish(\"addPage\",{pageNumber:Et})},be=function(t){t>0&&t<=Et&&(ot.splice(t,1),Rt.splice(t,1),Et--,$>Et&&($=Et),this.setPage($))},ye=function(t){t>0&&t<=Et&&($=t)},we=y.__private__.getNumberOfPages=y.getNumberOfPages=function(){return ot.length-1},Ne=function(t,e,r){var n,i=void 0;return r=r||{},t=void 0!==t?t:Ft[At].fontName,e=void 0!==e?e:Ft[At].fontStyle,n=t.toLowerCase(),void 0!==It[n]&&void 0!==It[n][e]?i=It[n][e]:void 0!==It[t]&&void 0!==It[t][e]?i=It[t][e]:!1===r.disableWarning&&o.warn(\"Unable to look up font label for font '\"+t+\"', '\"+e+\"'. Refer to getFontList() for available fonts.\"),i||r.noFallback||null==(i=It.times[e])&&(i=It.times.normal),i},Le=y.__private__.putInfo=function(){var t=Xt(),e=function(t){return t};for(var r in null!==m&&(e=Oe.encryptor(t,0)),lt(\"<<\"),lt(\"/Producer (\"+ge(e(\"jsPDF \"+E.version))+\")\"),xt)xt.hasOwnProperty(r)&&xt[r]&&lt(\"/\"+r.substr(0,1).toUpperCase()+r.substr(1)+\" (\"+ge(e(xt[r]))+\")\");lt(\"/CreationDate (\"+ge(e(W))+\")\"),lt(\">>\"),lt(\"endobj\")},xe=y.__private__.putCatalog=function(t){var e=(t=t||{}).rootDictionaryObjId||Qt;switch(Xt(),lt(\"<<\"),lt(\"/Type /Catalog\"),lt(\"/Pages \"+e+\" 0 R\"),gt||(gt=\"fullwidth\"),gt){case\"fullwidth\":lt(\"/OpenAction [3 0 R /FitH null]\");break;case\"fullheight\":lt(\"/OpenAction [3 0 R /FitV null]\");break;case\"fullpage\":lt(\"/OpenAction [3 0 R /Fit]\");break;case\"original\":lt(\"/OpenAction [3 0 R /XYZ null null 1]\");break;default:var r=\"\"+gt;\"%\"===r.substr(r.length-1)&&(gt=parseInt(gt)/100),\"number\"==typeof gt&&lt(\"/OpenAction [3 0 R /XYZ null null \"+T(gt)+\"]\")}switch(wt||(wt=\"continuous\"),wt){case\"continuous\":lt(\"/PageLayout /OneColumn\");break;case\"single\":lt(\"/PageLayout /SinglePage\");break;case\"two\":case\"twoleft\":lt(\"/PageLayout /TwoColumnLeft\");break;case\"tworight\":lt(\"/PageLayout /TwoColumnRight\")}bt&&lt(\"/PageMode /\"+bt),Dt.publish(\"putCatalog\"),lt(\">>\"),lt(\"endobj\")},Ae=y.__private__.putTrailer=function(){lt(\"trailer\"),lt(\"<<\"),lt(\"/Size \"+(et+1)),lt(\"/Root \"+et+\" 0 R\"),lt(\"/Info \"+(et-1)+\" 0 R\"),null!==m&&lt(\"/Encrypt \"+Oe.oid+\" 0 R\"),lt(\"/ID [ <\"+V+\"> <\"+V+\"> ]\"),lt(\">>\")},Se=y.__private__.putHeader=function(){lt(\"%PDF-\"+w),lt(\"%ºß¬à\")},_e=y.__private__.putXRef=function(){var t=\"0000000000\";lt(\"xref\"),lt(\"0 \"+(et+1)),lt(\"0000000000 65535 f \");for(var e=1;e<=et;e++)\"function\"==typeof rt[e]?lt((t+rt[e]()).slice(-10)+\" 00000 n \"):void 0!==rt[e]?lt((t+rt[e]).slice(-10)+\" 00000 n \"):lt(\"0000000000 00000 n \")},Pe=y.__private__.buildDocument=function(){var t;et=0,it=0,nt=[],rt=[],at=[],Qt=Kt(),te=Kt(),ct(nt),Dt.publish(\"buildDocument\"),Se(),oe(),function(){Dt.publish(\"putAdditionalObjects\");for(var t=0;t<at.length;t++){var e=at[t];Zt(e.objId,!0),lt(e.content),lt(\"endobj\")}Dt.publish(\"postPutAdditionalObjects\")}(),t=[],function(){for(var t in Ft)Ft.hasOwnProperty(t)&&(!1===v||!0===v&&b.hasOwnProperty(t))&&se(Ft[t])}(),function(){var t;for(t in Bt)Bt.hasOwnProperty(t)&&he(Bt[t])}(),function(){for(var t in zt)zt.hasOwnProperty(t)&&ue(zt[t])}(),function(t){var e;for(e in jt)jt.hasOwnProperty(e)&&(jt[e]instanceof M?ce(jt[e]):jt[e]instanceof q&&le(jt[e],t))}(t),Dt.publish(\"putResources\"),t.forEach(fe),fe({resourcesOid:te,objectOid:Number.MAX_SAFE_INTEGER}),Dt.publish(\"postPutResources\"),null!==m&&(Oe.oid=Xt(),lt(\"<<\"),lt(\"/Filter /Standard\"),lt(\"/V \"+Oe.v),lt(\"/R \"+Oe.r),lt(\"/U <\"+Oe.toHexString(Oe.U)+\">\"),lt(\"/O <\"+Oe.toHexString(Oe.O)+\">\"),lt(\"/P \"+Oe.P),lt(\">>\"),lt(\"endobj\")),Le(),xe();var e=it;return _e(),Ae(),lt(\"startxref\"),lt(\"\"+e),lt(\"%%EOF\"),ct(ot[$]),nt.join(\"\\n\")},ke=y.__private__.getBlob=function(t){return new Blob([ft(t)],{type:\"application/pdf\"})},Fe=function(t){for(;t.firstChild;)t.removeChild(t.firstChild)},Ie=function(t){var e,r=t.document,n=r.documentElement,i=r.head,a=r.body;return i||(i=r.createElement(\"head\"),n.appendChild(i)),a||(a=r.createElement(\"body\"),n.appendChild(a)),Fe(i),Fe(a),(e=r.createElement(\"style\")).appendChild(r.createTextNode(\"html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;}\")),i.appendChild(e),{document:r,body:a}},Ce=y.output=y.__private__.output=(Jt=function(t,e){switch(\"string\"==typeof(e=e||{})?e={filename:e}:e.filename=e.filename||\"generated.pdf\",t){case void 0:return Pe();case\"save\":y.save(e.filename);break;case\"arraybuffer\":return ft(Pe());case\"blob\":return ke(Pe());case\"bloburi\":case\"bloburl\":if(void 0!==i.URL&&\"function\"==typeof i.URL.createObjectURL)return i.URL&&i.URL.createObjectURL(ke(Pe()))||void 0;o.warn(\"bloburl is not supported by your system, because URL.createObjectURL is not supported by your browser.\");break;case\"datauristring\":case\"dataurlstring\":var r=\"\",n=Pe();try{r=d(n)}catch(L){r=d(unescape(encodeURIComponent(n)))}return\"data:application/pdf;filename=\"+encodeURIComponent(e.filename)+\";base64,\"+r;case\"pdfobjectnewwindow\":if(\"[object Window]\"===Object.prototype.toString.call(i)){var a=\"https://cdnjs.cloudflare.com/ajax/libs/pdfobject/2.1.1/pdfobject.min.js\",s=!e.pdfObjectUrl;s||(a=e.pdfObjectUrl);var u=i.open();if(null!==u){var c=Ie(u),l=c.document.createElement(\"script\"),h=this;l.src=a,s&&(l.integrity=\"sha512-4ze/a9/4jqu+tX9dfOqJYSvyYd5M6qum/3HpCLr+/Jqf0whc37VUbkpNGHR7/8pSnCFw47T1fmIpwBV7UySh3g==\",l.crossOrigin=\"anonymous\"),l.onload=function(){u.PDFObject.embed(h.output(\"dataurlstring\"),e)},c.body.appendChild(l)}return u}throw new Error(\"The option pdfobjectnewwindow just works in a browser-environment.\");case\"pdfjsnewwindow\":if(\"[object Window]\"===Object.prototype.toString.call(i)){var f=e.pdfJsUrl||\"examples/PDF.js/web/viewer.html\",p=i.open();if(null!==p){var g=Ie(p),m=g.document.createElement(\"iframe\"),v=-1===f.indexOf(\"?\")?\"?\":\"&\";h=this,m.id=\"pdfViewer\",m.width=\"500px\",m.height=\"400px\",m.src=f+v+\"file=&downloadName=\"+encodeURIComponent(e.filename),m.onload=function(){p.document.title=e.filename,m.contentWindow.PDFViewerApplication.open(h.output(\"bloburl\"))},g.body.appendChild(m)}return p}throw new Error(\"The option pdfjsnewwindow just works in a browser-environment.\");case\"dataurlnewwindow\":if(\"[object Window]\"!==Object.prototype.toString.call(i))throw new Error(\"The option dataurlnewwindow just works in a browser-environment.\");var b=i.open();if(null!==b){var w=Ie(b),N=w.document.createElement(\"iframe\");N.src=this.output(\"datauristring\",e),w.body.appendChild(N),b.document.title=e.filename}if(b||\"undefined\"==typeof safari)return b;break;case\"datauri\":case\"dataurl\":return i.document.location.href=this.output(\"datauristring\",e);default:return null}},Jt.foo=function(){try{return Jt.apply(this,arguments)}catch(r){var t=r.stack||\"\";~t.indexOf(\" at \")&&(t=t.split(\" at \")[1]);var e=\"Error in function \"+t.split(\"\\n\")[0].split(\"<\")[0]+\": \"+r.message;if(!i.console)throw new Error(e);i.console.error(e,r),i.alert&&alert(e)}},Jt.foo.bar=Jt,Jt.foo),je=function(t){return!0===Array.isArray(Tt)&&Tt.indexOf(t)>-1};switch(a){case\"pt\":St=1;break;case\"mm\":St=72/25.4;break;case\"cm\":St=72/2.54;break;case\"in\":St=72;break;case\"px\":St=1==je(\"px_scaling\")?.75:96/72;break;case\"pc\":case\"em\":St=12;break;case\"ex\":St=6;break;default:if(\"number\"!=typeof a)throw new Error(\"Invalid unit: \"+a);St=a}var Oe=null;K(),Y();var Be=y.__private__.getPageInfo=y.getPageInfo=function(t){if(isNaN(t)||t%1!=0)throw new Error(\"Invalid argument passed to jsPDF.getPageInfo\");return{objId:Rt[t].objId,pageNumber:t,pageContext:Rt[t]}},Me=y.__private__.getPageInfoByObjId=function(t){if(isNaN(t)||t%1!=0)throw new Error(\"Invalid argument passed to jsPDF.getPageInfoByObjId\");for(var e in Rt)if(Rt[e].objId===t)break;return Be(e)},qe=y.__private__.getCurrentPageInfo=y.getCurrentPageInfo=function(){return{objId:Rt[$].objId,pageNumber:$,pageContext:Rt[$]}};y.addPage=function(){return ve.apply(this,arguments),this},y.setPage=function(){return ye.apply(this,arguments),ct.call(this,ot[$]),this},y.insertPage=function(t){return this.addPage(),this.movePage($,t),this},y.movePage=function(t,e){var r,n;if(t>e){r=ot[t],n=Rt[t];for(var i=t;i>e;i--)ot[i]=ot[i-1],Rt[i]=Rt[i-1];ot[e]=r,Rt[e]=n,this.setPage(e)}else if(t<e){r=ot[t],n=Rt[t];for(var a=t;a<e;a++)ot[a]=ot[a+1],Rt[a]=Rt[a+1];ot[e]=r,Rt[e]=n,this.setPage(e)}return this},y.deletePage=function(){return be.apply(this,arguments),this},y.__private__.text=y.text=function(e,r,n,i,a){var o,s,u,c,l,h,f,d,p,g=(i=i||{}).scope||this;if(\"number\"==typeof e&&\"number\"==typeof r&&(\"string\"==typeof n||Array.isArray(n))){var m=n;n=r,r=e,e=m}if(arguments[3]instanceof Wt==0?(u=arguments[4],c=arguments[5],\"object\"===(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(f=arguments[3])&&null!==f||(\"string\"==typeof u&&(c=u,u=null),\"string\"==typeof f&&(c=f,f=null),\"number\"==typeof f&&(u=f,f=null),i={flags:f,angle:u,align:c})):(R(\"The transform parameter of text() with a Matrix value\"),p=a),isNaN(r)||isNaN(n)||null==e)throw new Error(\"Invalid arguments passed to jsPDF.text\");if(0===e.length)return g;var v,y=\"\",w=\"number\"==typeof i.lineHeightFactor?i.lineHeightFactor:Ke,N=g.internal.scaleFactor;function L(t){return t=t.split(\"\\t\").join(Array(i.TabLen||9).join(\" \")),ge(t,f)}function x(t){for(var e,r=t.concat(),n=[],i=r.length;i--;)\"string\"==typeof(e=r.shift())?n.push(e):Array.isArray(t)&&(1===e.length||void 0===e[1]&&void 0===e[2])?n.push(e[0]):n.push([e[0],e[1],e[2]]);return n}function A(t,e){var r;if(\"string\"==typeof t)r=e(t)[0];else if(Array.isArray(t)){for(var n,i,a=t.concat(),o=[],s=a.length;s--;)\"string\"==typeof(n=a.shift())?o.push(e(n)[0]):Array.isArray(n)&&\"string\"==typeof n[0]&&(i=e(n[0],n[1],n[2]),o.push([i[0],i[1],i[2]]));r=o}return r}var P=!1,k=!0;if(\"string\"==typeof e)P=!0;else if(Array.isArray(e)){var F=e.concat();s=[];for(var I,C=F.length;C--;)(\"string\"!=typeof(I=F.shift())||Array.isArray(I)&&\"string\"!=typeof I[0])&&(k=!1);P=k}if(!1===P)throw new Error('Type of text must be string or Array. \"'+e+'\" is not recognized.');\"string\"==typeof e&&(e=e.match(/[\\r?\\n]/)?e.split(/\\r\\n|\\r|\\n/g):[e]);var j=pt/g.internal.scaleFactor,O=j*(w-1);switch(i.baseline){case\"bottom\":n-=O;break;case\"top\":n+=j-O;break;case\"hanging\":n+=j-2*O;break;case\"middle\":n+=j/2-O}if((h=i.maxWidth||0)>0&&(\"string\"==typeof e?e=g.splitTextToSize(e,h):\"[object Array]\"===Object.prototype.toString.call(e)&&(e=e.reduce(function(t,e){return t.concat(g.splitTextToSize(e,h))},[]))),o={text:e,x:r,y:n,options:i,mutex:{pdfEscape:ge,activeFontKey:At,fonts:Ft,activeFontSize:pt}},Dt.publish(\"preProcessText\",o),e=o.text,u=(i=o.options).angle,p instanceof Wt==0&&u&&\"number\"==typeof u){u*=Math.PI/180,0===i.rotationDirection&&(u=-u),_===S&&(u=-u);var M=Math.cos(u),q=Math.sin(u);p=new Wt(M,q,-q,M,0,0)}else u&&u instanceof Wt&&(p=u);_!==S||p||(p=Gt),void 0!==(l=i.charSpace||hr)&&(y+=B(U(l))+\" Tc\\n\",this.setCharSpace(this.getCharSpace()||0)),void 0!==(d=i.horizontalScale)&&(y+=B(100*d)+\" Tz\\n\"),i.lang;var E=-1,D=void 0!==i.renderingMode?i.renderingMode:i.stroke,T=g.internal.getCurrentPageInfo().pageContext;switch(D){case 0:case!1:case\"fill\":E=0;break;case 1:case!0:case\"stroke\":E=1;break;case 2:case\"fillThenStroke\":E=2;break;case 3:case\"invisible\":E=3;break;case 4:case\"fillAndAddForClipping\":E=4;break;case 5:case\"strokeAndAddPathForClipping\":E=5;break;case 6:case\"fillThenStrokeAndAddToPathForClipping\":E=6;break;case 7:case\"addToPathForClipping\":E=7}var z=void 0!==T.usedRenderingMode?T.usedRenderingMode:-1;-1!==E?y+=E+\" Tr\\n\":-1!==z&&(y+=\"0 Tr\\n\"),-1!==E&&(T.usedRenderingMode=E),c=i.align||\"left\";var H,W=pt*w,V=g.internal.pageSize.getWidth(),G=Ft[At];l=i.charSpace||hr,h=i.maxWidth||0,f=Object.assign({autoencode:!0,noBOM:!0},i.flags);var Y=[],J=function(t){return g.getStringUnitWidth(t,{font:G,charSpace:l,fontSize:pt,doKerning:!1})*pt/N};if(\"[object Array]\"===Object.prototype.toString.call(e)){var X;s=x(e),\"left\"!==c&&(H=s.map(J));var K,Z=0;if(\"right\"===c){r-=H[0],e=[],C=s.length;for(var $=0;$<C;$++)0===$?(K=nr(r),X=ir(n)):(K=U(Z-H[$]),X=-W),e.push([s[$],K,X]),Z=H[$]}else if(\"center\"===c){r-=H[0]/2,e=[],C=s.length;for(var Q=0;Q<C;Q++)0===Q?(K=nr(r),X=ir(n)):(K=U((Z-H[Q])/2),X=-W),e.push([s[Q],K,X]),Z=H[Q]}else if(\"left\"===c){e=[],C=s.length;for(var tt=0;tt<C;tt++)e.push(s[tt])}else if(\"justify\"===c&&\"Identity-H\"===G.encoding){e=[],C=s.length,h=0!==h?h:V;for(var et=0,rt=0;rt<C;rt++)if(X=0===rt?ir(n):-W,K=0===rt?nr(r):et,rt<C-1){var nt=U((h-H[rt])/(s[rt].split(\" \").length-1)),it=s[rt].split(\" \");e.push([it[0]+\" \",K,X]),et=0;for(var at=1;at<it.length;at++){var ot=(J(it[at-1]+\" \"+it[at])-J(it[at]))*N+nt;at==it.length-1?e.push([it[at],ot,0]):e.push([it[at]+\" \",ot,0]),et-=ot}}else e.push([s[rt],K,X]);e.push([\"\",et,0])}else{if(\"justify\"!==c)throw new Error('Unrecognized alignment option, use \"left\", \"center\", \"right\" or \"justify\".');for(e=[],C=s.length,h=0!==h?h:V,rt=0;rt<C;rt++){X=0===rt?ir(n):-W,K=0===rt?nr(r):0;var st=s[rt].split(\" \").length-1,ut=st>0?(h-H[rt])/st:0;rt<C-1?Y.push(B(U(ut))):Y.push(0),e.push([s[rt],K,X])}}}!0===(\"boolean\"==typeof i.R2L?i.R2L:vt)&&(e=A(e,function(t,e,r){return[t.split(\"\").reverse().join(\"\"),e,r]})),o={text:e,x:r,y:n,options:i,mutex:{pdfEscape:ge,activeFontKey:At,fonts:Ft,activeFontSize:pt}},Dt.publish(\"postProcessText\",o),e=o.text,v=o.mutex.isHex||!1;var ct=Ft[At].encoding;\"WinAnsiEncoding\"!==ct&&\"StandardEncoding\"!==ct||(e=A(e,function(t,e,r){return[L(t),e,r]})),s=x(e),e=[];for(var ht,ft,dt,gt=Array.isArray(s[0])?1:0,mt=\"\",bt=function(t,e,r){var n=\"\";return r instanceof Wt?(r=\"number\"==typeof i.angle?Vt(r,new Wt(1,0,0,1,t,e)):Vt(new Wt(1,0,0,1,t,e),r),_===S&&(r=Vt(new Wt(1,0,0,-1,0,0),r)),n=r.join(\" \")+\" Tm\\n\"):n=B(t)+\" \"+B(e)+\" Td\\n\",n},yt=0;yt<s.length;yt++){switch(mt=\"\",gt){case 1:dt=(v?\"<\":\"(\")+s[yt][0]+(v?\">\":\")\"),ht=parseFloat(s[yt][1]),ft=parseFloat(s[yt][2]);break;case 0:dt=(v?\"<\":\"(\")+s[yt]+(v?\">\":\")\"),ht=nr(r),ft=ir(n)}void 0!==Y&&void 0!==Y[yt]&&(mt=Y[yt]+\" Tw\\n\"),0===yt?e.push(mt+bt(ht,ft,p)+dt):0===gt?e.push(mt+dt):1===gt&&e.push(mt+bt(ht,ft,p)+dt)}e=0===gt?e.join(\" Tj\\nT* \"):e.join(\" Tj\\n\"),e+=\" Tj\\n\";var wt=\"BT\\n/\";return wt+=At+\" \"+pt+\" Tf\\n\",wt+=B(pt*w)+\" TL\\n\",wt+=cr+\"\\n\",wt+=y,wt+=e,lt(wt+=\"ET\"),b[At]=!0,g};var Ee=y.__private__.clip=y.clip=function(t){return lt(\"evenodd\"===t?\"W*\":\"W\"),this};y.clipEvenOdd=function(){return Ee(\"evenodd\")},y.__private__.discardPath=y.discardPath=function(){return lt(\"n\"),this};var Re=y.__private__.isValidStyle=function(t){var e=!1;return-1!==[void 0,null,\"S\",\"D\",\"F\",\"DF\",\"FD\",\"f\",\"f*\",\"B\",\"B*\",\"n\"].indexOf(t)&&(e=!0),e};y.__private__.setDefaultPathOperation=y.setDefaultPathOperation=function(t){return Re(t)&&(g=t),this};var De=y.__private__.getStyle=y.getStyle=function(t){var e=g;switch(t){case\"D\":case\"S\":e=\"S\";break;case\"F\":e=\"f\";break;case\"FD\":case\"DF\":e=\"B\";break;case\"f\":case\"f*\":case\"B\":case\"B*\":e=t}return e},Te=y.close=function(){return lt(\"h\"),this};y.stroke=function(){return lt(\"S\"),this},y.fill=function(t){return ze(\"f\",t),this},y.fillEvenOdd=function(t){return ze(\"f*\",t),this},y.fillStroke=function(t){return ze(\"B\",t),this},y.fillStrokeEvenOdd=function(t){return ze(\"B*\",t),this};var ze=function(e,r){\"object\"===(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(r)?We(r,e):lt(e)},Ue=function(t){null===t||_===S&&void 0===t||(t=De(t),lt(t))};function He(t,e,r,n,i){var a=new q(e||this.boundingBox,r||this.xStep,n||this.yStep,this.gState,i||this.matrix);a.stream=this.stream;var o=t+\"$$\"+this.cloneIndex+++\"$$\";return Yt(o,a),a}var We=function(t,e){var r=Ot[t.key],n=jt[r];if(n instanceof M)lt(\"q\"),lt(Ve(e)),n.gState&&y.setGState(n.gState),lt(t.matrix.toString()+\" cm\"),lt(\"/\"+r+\" sh\"),lt(\"Q\");else if(n instanceof q){var i=new Wt(1,0,0,-1,0,Pr());t.matrix&&(i=i.multiply(t.matrix||Gt),r=He.call(n,t.key,t.boundingBox,t.xStep,t.yStep,i).id),lt(\"q\"),lt(\"/Pattern cs\"),lt(\"/\"+r+\" scn\"),n.gState&&y.setGState(n.gState),lt(e),lt(\"Q\")}},Ve=function(t){switch(t){case\"f\":case\"F\":case\"n\":return\"W n\";case\"f*\":return\"W* n\";case\"B\":case\"S\":return\"W S\";case\"B*\":return\"W* S\"}},Ge=y.moveTo=function(t,e){return lt(B(U(t))+\" \"+B(H(e))+\" m\"),this},Ye=y.lineTo=function(t,e){return lt(B(U(t))+\" \"+B(H(e))+\" l\"),this},Je=y.curveTo=function(t,e,r,n,i,a){return lt([B(U(t)),B(H(e)),B(U(r)),B(H(n)),B(U(i)),B(H(a)),\"c\"].join(\" \")),this};y.__private__.line=y.line=function(t,e,r,n,i){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n)||!Re(i))throw new Error(\"Invalid arguments passed to jsPDF.line\");return _===A?this.lines([[r-t,n-e]],t,e,[1,1],i||\"S\"):this.lines([[r-t,n-e]],t,e,[1,1]).stroke()},y.__private__.lines=y.lines=function(t,e,r,n,i,a){var o,s,u,c,l,h,f,d,p,g,m,v;if(\"number\"==typeof t&&(v=r,r=e,e=t,t=v),n=n||[1,1],a=a||!1,isNaN(e)||isNaN(r)||!Array.isArray(t)||!Array.isArray(n)||!Re(i)||\"boolean\"!=typeof a)throw new Error(\"Invalid arguments passed to jsPDF.lines\");for(Ge(e,r),o=n[0],s=n[1],c=t.length,g=e,m=r,u=0;u<c;u++)2===(l=t[u]).length?(g=l[0]*o+g,m=l[1]*s+m,Ye(g,m)):(h=l[0]*o+g,f=l[1]*s+m,d=l[2]*o+g,p=l[3]*s+m,g=l[4]*o+g,m=l[5]*s+m,Je(h,f,d,p,g,m));return a&&Te(),Ue(i),this},y.path=function(t){for(var e=0;e<t.length;e++){var r=t[e],n=r.c;switch(r.op){case\"m\":Ge(n[0],n[1]);break;case\"l\":Ye(n[0],n[1]);break;case\"c\":Je.apply(this,n);break;case\"h\":Te()}}return this},y.__private__.rect=y.rect=function(t,e,r,n,i){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n)||!Re(i))throw new Error(\"Invalid arguments passed to jsPDF.rect\");return _===A&&(n=-n),lt([B(U(t)),B(H(e)),B(U(r)),B(U(n)),\"re\"].join(\" \")),Ue(i),this},y.__private__.triangle=y.triangle=function(t,e,r,n,i,a,o){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n)||isNaN(i)||isNaN(a)||!Re(o))throw new Error(\"Invalid arguments passed to jsPDF.triangle\");return this.lines([[r-t,n-e],[i-r,a-n],[t-i,e-a]],t,e,[1,1],o,!0),this},y.__private__.roundedRect=y.roundedRect=function(t,e,r,n,i,a,o){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n)||isNaN(i)||isNaN(a)||!Re(o))throw new Error(\"Invalid arguments passed to jsPDF.roundedRect\");var s=4/3*(Math.SQRT2-1);return i=Math.min(i,.5*r),a=Math.min(a,.5*n),this.lines([[r-2*i,0],[i*s,0,i,a-a*s,i,a],[0,n-2*a],[0,a*s,-i*s,a,-i,a],[2*i-r,0],[-i*s,0,-i,-a*s,-i,-a],[0,2*a-n],[0,-a*s,i*s,-a,i,-a]],t+i,e,[1,1],o,!0),this},y.__private__.ellipse=y.ellipse=function(t,e,r,n,i){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n)||!Re(i))throw new Error(\"Invalid arguments passed to jsPDF.ellipse\");var a=4/3*(Math.SQRT2-1)*r,o=4/3*(Math.SQRT2-1)*n;return Ge(t+r,e),Je(t+r,e-o,t+a,e-n,t,e-n),Je(t-a,e-n,t-r,e-o,t-r,e),Je(t-r,e+o,t-a,e+n,t,e+n),Je(t+a,e+n,t+r,e+o,t+r,e),Ue(i),this},y.__private__.circle=y.circle=function(t,e,r,n){if(isNaN(t)||isNaN(e)||isNaN(r)||!Re(n))throw new Error(\"Invalid arguments passed to jsPDF.circle\");return this.ellipse(t,e,r,r,n)},y.setFont=function(t,e,r){return r&&(e=F(e,r)),At=Ne(t,e,{disableWarning:!1}),this};var Xe=y.__private__.getFont=y.getFont=function(){return Ft[Ne.apply(y,arguments)]};y.__private__.getFontList=y.getFontList=function(){var t,e,r={};for(t in It)if(It.hasOwnProperty(t))for(e in r[t]=[],It[t])It[t].hasOwnProperty(e)&&r[t].push(e);return r},y.addFont=function(t,e,r,n,i){var a=[\"StandardEncoding\",\"MacRomanEncoding\",\"Identity-H\",\"WinAnsiEncoding\"];return arguments[3]&&-1!==a.indexOf(arguments[3])?i=arguments[3]:arguments[3]&&-1==a.indexOf(arguments[3])&&(r=F(r,n)),pe.call(this,t,e,r,i=i||\"Identity-H\")};var Ke,Ze=e.lineWidth||.200025,$e=y.__private__.getLineWidth=y.getLineWidth=function(){return Ze},Qe=y.__private__.setLineWidth=y.setLineWidth=function(t){return Ze=t,lt(B(U(t))+\" w\"),this};y.__private__.setLineDash=E.API.setLineDash=E.API.setLineDashPattern=function(t,e){if(t=t||[],e=e||0,isNaN(e)||!Array.isArray(t))throw new Error(\"Invalid arguments passed to jsPDF.setLineDash\");return t=t.map(function(t){return B(U(t))}).join(\" \"),e=B(U(e)),lt(\"[\"+t+\"] \"+e+\" d\"),this};var tr=y.__private__.getLineHeight=y.getLineHeight=function(){return pt*Ke};y.__private__.getLineHeight=y.getLineHeight=function(){return pt*Ke};var er=y.__private__.setLineHeightFactor=y.setLineHeightFactor=function(t){return\"number\"==typeof(t=t||1.15)&&(Ke=t),this},rr=y.__private__.getLineHeightFactor=y.getLineHeightFactor=function(){return Ke};er(e.lineHeight);var nr=y.__private__.getHorizontalCoordinate=function(t){return U(t)},ir=y.__private__.getVerticalCoordinate=function(t){return _===S?t:Rt[$].mediaBox.topRightY-Rt[$].mediaBox.bottomLeftY-U(t)},ar=y.__private__.getHorizontalCoordinateString=y.getHorizontalCoordinateString=function(t){return B(nr(t))},or=y.__private__.getVerticalCoordinateString=y.getVerticalCoordinateString=function(t){return B(ir(t))},sr=e.strokeColor||\"0 G\";y.__private__.getStrokeColor=y.getDrawColor=function(){return ee(sr)},y.__private__.setStrokeColor=y.setDrawColor=function(t,e,r,n){return sr=re({ch1:t,ch2:e,ch3:r,ch4:n,pdfColorType:\"draw\",precision:2}),lt(sr),this};var ur=e.fillColor||\"0 g\";y.__private__.getFillColor=y.getFillColor=function(){return ee(ur)},y.__private__.setFillColor=y.setFillColor=function(t,e,r,n){return ur=re({ch1:t,ch2:e,ch3:r,ch4:n,pdfColorType:\"fill\",precision:2}),lt(ur),this};var cr=e.textColor||\"0 g\",lr=y.__private__.getTextColor=y.getTextColor=function(){return ee(cr)};y.__private__.setTextColor=y.setTextColor=function(t,e,r,n){return cr=re({ch1:t,ch2:e,ch3:r,ch4:n,pdfColorType:\"text\",precision:3}),this};var hr=e.charSpace,fr=y.__private__.getCharSpace=y.getCharSpace=function(){return parseFloat(hr||0)};y.__private__.setCharSpace=y.setCharSpace=function(t){if(isNaN(t))throw new Error(\"Invalid argument passed to jsPDF.setCharSpace\");return hr=t,this};var dr=0;y.CapJoinStyles={0:0,butt:0,but:0,miter:0,1:1,round:1,rounded:1,circle:1,2:2,projecting:2,project:2,square:2,bevel:2},y.__private__.setLineCap=y.setLineCap=function(t){var e=y.CapJoinStyles[t];if(void 0===e)throw new Error(\"Line cap style of '\"+t+\"' is not recognized. See or extend .CapJoinStyles property for valid styles\");return dr=e,lt(e+\" J\"),this};var pr=0;y.__private__.setLineJoin=y.setLineJoin=function(t){var e=y.CapJoinStyles[t];if(void 0===e)throw new Error(\"Line join style of '\"+t+\"' is not recognized. See or extend .CapJoinStyles property for valid styles\");return pr=e,lt(e+\" j\"),this},y.__private__.setLineMiterLimit=y.__private__.setMiterLimit=y.setLineMiterLimit=y.setMiterLimit=function(t){if(t=t||0,isNaN(t))throw new Error(\"Invalid argument passed to jsPDF.setLineMiterLimit\");return lt(B(U(t))+\" M\"),this},y.GState=O,y.setGState=function(t){(t=\"string\"==typeof t?Bt[Mt[t]]:gr(null,t)).equals(qt)||(lt(\"/\"+t.id+\" gs\"),qt=t)};var gr=function(t,e){if(!t||!Mt[t]){var r=!1;for(var n in Bt)if(Bt.hasOwnProperty(n)&&Bt[n].equals(e)){r=!0;break}if(r)e=Bt[n];else{var i=\"GS\"+(Object.keys(Bt).length+1).toString(10);Bt[i]=e,e.id=i}return t&&(Mt[t]=e.id),Dt.publish(\"addGState\",e),e}};y.addGState=function(t,e){return gr(t,e),this},y.saveGraphicsState=function(){return lt(\"q\"),Ct.push({key:At,size:pt,color:cr}),this},y.restoreGraphicsState=function(){lt(\"Q\");var t=Ct.pop();return At=t.key,pt=t.size,cr=t.color,qt=null,this},y.setCurrentTransformationMatrix=function(t){return lt(t.toString()+\" cm\"),this},y.comment=function(t){return lt(\"#\"+t),this};var mr=function(t,e){var r=t||0;Object.defineProperty(this,\"x\",{enumerable:!0,get:function(){return r},set:function(t){isNaN(t)||(r=parseFloat(t))}});var n=e||0;Object.defineProperty(this,\"y\",{enumerable:!0,get:function(){return n},set:function(t){isNaN(t)||(n=parseFloat(t))}});var i=\"pt\";return Object.defineProperty(this,\"type\",{enumerable:!0,get:function(){return i},set:function(t){i=t.toString()}}),this},vr=function(t,e,r,n){mr.call(this,t,e),this.type=\"rect\";var i=r||0;Object.defineProperty(this,\"w\",{enumerable:!0,get:function(){return i},set:function(t){isNaN(t)||(i=parseFloat(t))}});var a=n||0;return Object.defineProperty(this,\"h\",{enumerable:!0,get:function(){return a},set:function(t){isNaN(t)||(a=parseFloat(t))}}),this},br=function(){this.page=Et,this.currentPage=$,this.pages=ot.slice(0),this.pagesContext=Rt.slice(0),this.x=_t,this.y=Pt,this.matrix=kt,this.width=Nr($),this.height=xr($),this.outputDestination=ut,this.id=\"\",this.objectNumber=-1};br.prototype.restore=function(){Et=this.page,$=this.currentPage,Rt=this.pagesContext,ot=this.pages,_t=this.x,Pt=this.y,kt=this.matrix,Lr($,this.width),Ar($,this.height),ut=this.outputDestination};var yr=function(t,e,r,n,i){Ht.push(new br),Et=$=0,ot=[],_t=t,Pt=e,kt=i,me([r,n])};for(var wr in y.beginFormObject=function(t,e,r,n,i){return yr(t,e,r,n,i),this},y.endFormObject=function(t){return function(t){if(Ut[t])Ht.pop().restore();else{var e=new br,r=\"Xo\"+(Object.keys(zt).length+1).toString(10);e.id=r,Ut[t]=r,zt[r]=e,Dt.publish(\"addFormObject\",e),Ht.pop().restore()}}(t),this},y.doFormObject=function(t,e){var r=zt[Ut[t]];return lt(\"q\"),lt(e.toString()+\" cm\"),lt(\"/\"+r.id+\" Do\"),lt(\"Q\"),this},y.getFormObject=function(t){var e=zt[Ut[t]];return{x:e.x,y:e.y,width:e.width,height:e.height,matrix:e.matrix}},y.save=function(t,e){return t=t||\"generated.pdf\",(e=e||{}).returnPromise=e.returnPromise||!1,!1===e.returnPromise?(l(ke(Pe()),t),\"function\"==typeof l.unload&&i.setTimeout&&setTimeout(l.unload,911),this):new Promise(function(e,r){try{var n=l(ke(Pe()),t);\"function\"==typeof l.unload&&i.setTimeout&&setTimeout(l.unload,911),e(n)}catch(a){r(a.message)}})},E.API)E.API.hasOwnProperty(wr)&&(\"events\"===wr&&E.API.events.length?function(t,e){var r,n,i;for(i=e.length-1;-1!==i;i--)r=e[i][0],n=e[i][1],t.subscribe.apply(t,[r].concat(\"function\"==typeof n?[n]:n))}(Dt,E.API.events):y[wr]=E.API[wr]);function Nr(t){return Rt[t].mediaBox.topRightX-Rt[t].mediaBox.bottomLeftX}function Lr(t,e){Rt[t].mediaBox.topRightX=e+Rt[t].mediaBox.bottomLeftX}function xr(t){return Rt[t].mediaBox.topRightY-Rt[t].mediaBox.bottomLeftY}function Ar(t,e){Rt[t].mediaBox.topRightY=e+Rt[t].mediaBox.bottomLeftY}var Sr=y.getPageWidth=function(t){return Nr(t=t||$)/St},_r=y.setPageWidth=function(t,e){Lr(t,e*St)},Pr=y.getPageHeight=function(t){return xr(t=t||$)/St},kr=y.setPageHeight=function(t,e){Ar(t,e*St)};return y.internal={pdfEscape:ge,getStyle:De,getFont:Xe,getFontSize:mt,getCharSpace:fr,getTextColor:lr,getLineHeight:tr,getLineHeightFactor:rr,getLineWidth:$e,write:ht,getHorizontalCoordinate:nr,getVerticalCoordinate:ir,getCoordinateString:ar,getVerticalCoordinateString:or,collections:{},newObject:Xt,newAdditionalObject:$t,newObjectDeferred:Kt,newObjectDeferredBegin:Zt,getFilters:ne,putStream:ie,events:Dt,scaleFactor:St,pageSize:{getWidth:function(){return Sr($)},setWidth:function(t){_r($,t)},getHeight:function(){return Pr($)},setHeight:function(t){kr($,t)}},encryptionOptions:m,encryption:Oe,getEncryptor:function(t){return null!==m?Oe.encryptor(t,0):function(t){return t}},output:Ce,getNumberOfPages:we,get pages(){return ot},out:lt,f2:T,f3:z,getPageInfo:Be,getPageInfoByObjId:Me,getCurrentPageInfo:qe,getPDFVersion:N,Point:mr,Rectangle:vr,Matrix:Wt,hasHotfix:je},Object.defineProperty(y.internal.pageSize,\"width\",{get:function(){return Sr($)},set:function(t){_r($,t)},enumerable:!0,configurable:!0}),Object.defineProperty(y.internal.pageSize,\"height\",{get:function(){return Pr($)},set:function(t){kr($,t)},enumerable:!0,configurable:!0}),function(t){for(var e=0,r=dt.length;e<r;e++){var n=pe.call(this,t[e][0],t[e][1],t[e][2],dt[e][3],!0);!1===v&&(b[n]=!0);var i=t[e][0].split(\"-\");de({id:n,fontName:i[0],fontStyle:i[1]||\"\"})}Dt.publish(\"addFonts\",{fonts:Ft,dictionary:It})}.call(y,dt),At=\"F1\",ve(s,n),Dt.publish(\"initialized\"),y}I.prototype.lsbFirstWord=function(t){return String.fromCharCode(255&t,t>>8&255,t>>16&255,t>>24&255)},I.prototype.toHexString=function(t){return t.split(\"\").map(function(t){return(\"0\"+(255&t.charCodeAt(0)).toString(16)).slice(-2)}).join(\"\")},I.prototype.hexToBytes=function(t){for(var e=[],r=0;r<t.length;r+=2)e.push(String.fromCharCode(parseInt(t.substr(r,2),16)));return e.join(\"\")},I.prototype.processOwnerPassword=function(t,e){return k(S(e).substr(0,5),t)},I.prototype.encryptor=function(t,e){var r=S(this.encryptionKey+String.fromCharCode(255&t,t>>8&255,t>>16&255,255&e,e>>8&255)).substr(0,10);return function(t){return k(r,t)}},O.prototype.equals=function(e){var r,n=\"id,objectNumber,equals\";if(!e||(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(e)!==(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(this))return!1;var i=0;for(r in this)if(!(n.indexOf(r)>=0)){if(this.hasOwnProperty(r)&&!e.hasOwnProperty(r))return!1;if(this[r]!==e[r])return!1;i++}for(r in e)e.hasOwnProperty(r)&&n.indexOf(r)<0&&i--;return 0===i},E.API={events:[]},E.version=\"4.2.1\";var R=E.API,D=1,T=function(t){return t.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\(/g,\"\\\\(\").replace(/\\)/g,\"\\\\)\")},z=function(t){return t.replace(/\\\\\\\\/g,\"\\\\\").replace(/\\\\\\(/g,\"(\").replace(/\\\\\\)/g,\")\")},U=function(t){return t.toString().replace(/#/g,\"#23\").replace(/[\\s\\n\\r()<>[\\]{}\\/%]/g,function(t){var e=t.charCodeAt(0).toString(16).toUpperCase();return\"#\"+(1===e.length?\"0\"+e:e)})},H=function(t){return t.toFixed(2)},W=function(t){return t.toFixed(5)};R.__acroform__={};var V=function(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t},G=function(t){return t*D},Y=function(t){var e=new lt,r=At.internal.getHeight(t)||0,n=At.internal.getWidth(t)||0;return e.BBox=[0,0,Number(H(n)),Number(H(r))],e},J=R.__acroform__.setBit=function(t,e){if(t=t||0,e=e||0,isNaN(t)||isNaN(e))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.setBit\");return t|1<<e},X=R.__acroform__.clearBit=function(t,e){if(t=t||0,e=e||0,isNaN(t)||isNaN(e))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.clearBit\");return t&~(1<<e)},K=R.__acroform__.getBit=function(t,e){if(isNaN(t)||isNaN(e))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.getBit\");return t&1<<e?1:0},Z=R.__acroform__.getBitForPdf=function(t,e){if(isNaN(t)||isNaN(e))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.getBitForPdf\");return K(t,e-1)},$=R.__acroform__.setBitForPdf=function(t,e){if(isNaN(t)||isNaN(e))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.setBitForPdf\");return J(t,e-1)},Q=R.__acroform__.clearBitForPdf=function(t,e){if(isNaN(t)||isNaN(e))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.clearBitForPdf\");return X(t,e-1)},tt=R.__acroform__.calculateCoordinates=function(t,e){var r=e.internal.getHorizontalCoordinate,n=e.internal.getVerticalCoordinate,i=t[0],a=t[1],o=t[2],s=t[3],u={};return u.lowerLeft_X=r(i)||0,u.lowerLeft_Y=n(a+s)||0,u.upperRight_X=r(i+o)||0,u.upperRight_Y=n(a)||0,[Number(H(u.lowerLeft_X)),Number(H(u.lowerLeft_Y)),Number(H(u.upperRight_X)),Number(H(u.upperRight_Y))]},et=function(t){if(t.appearanceStreamContent)return t.appearanceStreamContent;if(t.V||t.DV){var e=[],r=t._V||t.DV,n=rt(t,r),i=t.scope.internal.getFont(t.fontName,t.fontStyle).id;e.push(\"/Tx BMC\"),e.push(\"q\"),e.push(\"BT\"),e.push(t.scope.__private__.encodeColorString(t.color)),e.push(\"/\"+i+\" \"+H(n.fontSize)+\" Tf\"),e.push(\"1 0 0 1 0 0 Tm\"),e.push(n.text),e.push(\"ET\"),e.push(\"Q\"),e.push(\"EMC\");var a=Y(t);return a.scope=t.scope,a.stream=e.join(\"\\n\"),a}},rt=function(t,e){var r=0===t.fontSize?t.maxFontSize:t.fontSize,n={text:\"\",fontSize:\"\"},i=(e=\")\"==(e=\"(\"==e.substr(0,1)?e.substr(1):e).substr(e.length-1)?e.substr(0,e.length-1):e).split(\" \");i=t.multiline?i.map(function(t){return t.split(\"\\n\")}):i.map(function(t){return[t]});var a=r,o=At.internal.getHeight(t)||0;o=o<0?-o:o;var s=At.internal.getWidth(t)||0;s=s<0?-s:s;var u=function(e,r,n){if(e+1<i.length){var a=r+\" \"+i[e+1][0];return nt(a,t,n).width<=s-4}return!1};a++;t:for(;a>0;){e=\"\",a--;var c,l,h=nt(\"3\",t,a).height,f=t.multiline?o-a:(o-h)/2,d=f+=2,p=0,g=0,m=0;if(a<=0){e=\"(...) Tj\\n\",e+=\"% Width of Text: \"+nt(e,t,a=12).width+\", FieldWidth:\"+s+\"\\n\";break}for(var v=\"\",b=0,y=0;y<i.length;y++)if(i.hasOwnProperty(y)){var w=!1;if(1!==i[y].length&&m!==i[y].length-1){if((h+2)*(b+2)+2>o)continue t;v+=i[y][m],w=!0,g=y,y--}else{v=\" \"==(v+=i[y][m]+\" \").substr(v.length-1)?v.substr(0,v.length-1):v;var N=parseInt(y),L=u(N,v,a),x=y>=i.length-1;if(L&&!x){v+=\" \",m=0;continue}if(L||x){if(x)g=N;else if(t.multiline&&(h+2)*(b+2)+2>o)continue t}else{if(!t.multiline)continue t;if((h+2)*(b+2)+2>o)continue t;g=N}}for(var A=\"\",S=p;S<=g;S++){var _=i[S];if(t.multiline){if(S===g){A+=_[m]+\" \",m=(m+1)%_.length;continue}if(S===p){A+=_[_.length-1]+\" \";continue}}A+=_[0]+\" \"}switch(A=\" \"==A.substr(A.length-1)?A.substr(0,A.length-1):A,l=nt(A,t,a).width,t.textAlign){case\"right\":c=s-l-2;break;case\"center\":c=(s-l)/2;break;default:c=2}e+=H(c)+\" \"+H(d)+\" Td\\n\",e+=\"(\"+T(A)+\") Tj\\n\",e+=-H(c)+\" 0 Td\\n\",d=-(a+2),l=0,p=w?g:g+1,b++,v=\"\"}break}return n.text=e,n.fontSize=a,n},nt=function(t,e,r){var n=e.scope.internal.getFont(e.fontName,e.fontStyle),i=e.scope.getStringUnitWidth(t,{font:n,fontSize:parseFloat(r),charSpace:0})*parseFloat(r);return{height:e.scope.getStringUnitWidth(\"3\",{font:n,fontSize:parseFloat(r),charSpace:0})*parseFloat(r)*1.5,width:i}},it={fields:[],xForms:[],acroFormDictionaryRoot:null,printedOut:!1,internal:null,isInitialized:!1},at=function(t,e){var r={type:\"reference\",object:t};void 0===e.internal.getPageInfo(t.page).pageContext.annotations.find(function(t){return t.type===r.type&&t.object===r.object})&&e.internal.getPageInfo(t.page).pageContext.annotations.push(r)},ot=function(e,r){if(r.scope=e,void 0!==e.internal&&(void 0===e.internal.acroformPlugin||!1===e.internal.acroformPlugin.isInitialized)){if(ft.FieldNum=0,e.internal.acroformPlugin=JSON.parse(JSON.stringify(it)),e.internal.acroformPlugin.acroFormDictionaryRoot)throw new Error(\"Exception while creating AcroformDictionary\");D=e.internal.scaleFactor,e.internal.acroformPlugin.acroFormDictionaryRoot=new ht,e.internal.acroformPlugin.acroFormDictionaryRoot.scope=e,e.internal.acroformPlugin.acroFormDictionaryRoot._eventID=e.internal.events.subscribe(\"postPutResources\",function(){!function(t){t.internal.events.unsubscribe(t.internal.acroformPlugin.acroFormDictionaryRoot._eventID),delete t.internal.acroformPlugin.acroFormDictionaryRoot._eventID,t.internal.acroformPlugin.printedOut=!0}(e)}),e.internal.events.subscribe(\"buildDocument\",function(){!function(t){t.internal.acroformPlugin.acroFormDictionaryRoot.objId=void 0;var e=t.internal.acroformPlugin.acroFormDictionaryRoot.Fields;for(var r in e)if(e.hasOwnProperty(r)){var n=e[r];n.objId=void 0,n.hasAnnotation&&at(n,t)}}(e)}),e.internal.events.subscribe(\"putCatalog\",function(){!function(t){if(void 0===t.internal.acroformPlugin.acroFormDictionaryRoot)throw new Error(\"putCatalogCallback: Root missing.\");t.internal.write(\"/AcroForm \"+t.internal.acroformPlugin.acroFormDictionaryRoot.objId+\" 0 R\")}(e)}),e.internal.events.subscribe(\"postPutPages\",function(r){!function(e,r){var n=!e;for(var i in e||(r.internal.newObjectDeferredBegin(r.internal.acroformPlugin.acroFormDictionaryRoot.objId,!0),r.internal.acroformPlugin.acroFormDictionaryRoot.putStream()),e=e||r.internal.acroformPlugin.acroFormDictionaryRoot.Kids)if(e.hasOwnProperty(i)){var a=e[i],o=[],s=a.Rect;if(a.Rect&&(a.Rect=tt(a.Rect,r)),r.internal.newObjectDeferredBegin(a.objId,!0),a.DA=At.createDefaultAppearanceStream(a),\"object\"===(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(a)&&\"function\"==typeof a.getKeyValueListForStream&&(o=a.getKeyValueListForStream()),a.Rect=s,a.hasAppearanceStream&&!a.appearanceStreamContent){var u=et(a);o.push({key:\"AP\",value:\"<</N \"+u+\">>\"}),r.internal.acroformPlugin.xForms.push(u)}if(a.appearanceStreamContent){var c=\"\";for(var l in a.appearanceStreamContent)if(a.appearanceStreamContent.hasOwnProperty(l)){var h=a.appearanceStreamContent[l];if(c+=\"/\"+l+\" \",c+=\"<<\",Object.keys(h).length>=1||Array.isArray(h)){for(var i in h)if(h.hasOwnProperty(i)){var f=h[i];\"function\"==typeof f&&(f=f.call(r,a)),c+=\"/\"+i+\" \"+f+\" \",r.internal.acroformPlugin.xForms.indexOf(f)>=0||r.internal.acroformPlugin.xForms.push(f)}}else\"function\"==typeof(f=h)&&(f=f.call(r,a)),c+=\"/\"+i+\" \"+f,r.internal.acroformPlugin.xForms.indexOf(f)>=0||r.internal.acroformPlugin.xForms.push(f);c+=\">>\"}o.push({key:\"AP\",value:\"<<\\n\"+c+\">>\"})}r.internal.putStream({additionalKeyValues:o,objectId:a.objId}),r.internal.out(\"endobj\")}n&&function(e,r){for(var n in e)if(e.hasOwnProperty(n)){var i=n,a=e[n];r.internal.newObjectDeferredBegin(a.objId,!0),\"object\"===(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(a)&&\"function\"==typeof a.putStream&&a.putStream(),delete e[i]}}(r.internal.acroformPlugin.xForms,r)}(r,e)}),e.internal.acroformPlugin.isInitialized=!0}},st=R.__acroform__.arrayToPdfArray=function(e,r,n){var i=function(t){return t};if(Array.isArray(e)){for(var a=\"[\",o=0;o<e.length;o++)switch(0!==o&&(a+=\" \"),(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(e[o])){case\"boolean\":case\"number\":case\"object\":a+=e[o].toString();break;case\"string\":\"/\"===e[o].substr(0,1)?a+=\"/\"+U(e[o].substr(1)):(void 0!==r&&n&&(i=n.internal.getEncryptor(r)),a+=\"(\"+T(i(e[o].toString()))+\")\")}return a+\"]\"}throw new Error(\"Invalid argument passed to jsPDF.__acroform__.arrayToPdfArray\")},ut=function(t,e,r){var n=function(t){return t};return void 0!==e&&r&&(n=r.internal.getEncryptor(e)),(t=t||\"\").toString(),\"(\"+T(n(t))+\")\"},ct=function(){this._objId=void 0,this._scope=void 0,Object.defineProperty(this,\"objId\",{get:function(){if(void 0===this._objId){if(void 0===this.scope)return;this._objId=this.scope.internal.newObjectDeferred()}return this._objId},set:function(t){this._objId=t}}),Object.defineProperty(this,\"scope\",{value:this._scope,writable:!0})};ct.prototype.toString=function(){return this.objId+\" 0 R\"},ct.prototype.putStream=function(){var t=this.getKeyValueListForStream();this.scope.internal.putStream({data:this.stream,additionalKeyValues:t,objectId:this.objId}),this.scope.internal.out(\"endobj\")},ct.prototype.getKeyValueListForStream=function(){var t=[],e=Object.getOwnPropertyNames(this).filter(function(t){return\"content\"!=t&&\"appearanceStreamContent\"!=t&&\"scope\"!=t&&\"objId\"!=t&&\"_\"!=t.substring(0,1)});for(var r in e)if(!1===Object.getOwnPropertyDescriptor(this,e[r]).configurable){var n=e[r],i=this[n];i&&(Array.isArray(i)?t.push({key:n,value:st(i,this.objId,this.scope)}):i instanceof ct?(i.scope=this.scope,t.push({key:n,value:i.objId+\" 0 R\"})):\"function\"!=typeof i&&t.push({key:n,value:i}))}return t};var lt=function(){ct.call(this),Object.defineProperty(this,\"Type\",{value:\"/XObject\",configurable:!1,writable:!0}),Object.defineProperty(this,\"Subtype\",{value:\"/Form\",configurable:!1,writable:!0}),Object.defineProperty(this,\"FormType\",{value:1,configurable:!1,writable:!0});var t,e=[];Object.defineProperty(this,\"BBox\",{configurable:!1,get:function(){return e},set:function(t){e=t}}),Object.defineProperty(this,\"Resources\",{value:\"2 0 R\",configurable:!1,writable:!0}),Object.defineProperty(this,\"stream\",{enumerable:!1,configurable:!0,set:function(e){t=e.trim()},get:function(){return t||null}})};V(lt,ct);var ht=function(){ct.call(this);var t,e=[];Object.defineProperty(this,\"Kids\",{enumerable:!1,configurable:!0,get:function(){return e.length>0?e:void 0}}),Object.defineProperty(this,\"Fields\",{enumerable:!1,configurable:!1,get:function(){return e}}),Object.defineProperty(this,\"DA\",{enumerable:!1,configurable:!1,get:function(){if(t){var e=function(t){return t};return this.scope&&(e=this.scope.internal.getEncryptor(this.objId)),\"(\"+T(e(t))+\")\"}},set:function(e){t=e}})};V(ht,ct);var ft=function t(){ct.call(this);var e=4;Object.defineProperty(this,\"F\",{enumerable:!1,configurable:!1,get:function(){return e},set:function(t){if(isNaN(t))throw new Error('Invalid value \"'+t+'\" for attribute F supplied.');e=t}}),Object.defineProperty(this,\"showWhenPrinted\",{enumerable:!0,configurable:!0,get:function(){return Boolean(Z(e,3))},set:function(t){!0===Boolean(t)?this.F=$(e,3):this.F=Q(e,3)}});var r=0;Object.defineProperty(this,\"Ff\",{enumerable:!1,configurable:!1,get:function(){return r},set:function(t){if(isNaN(t))throw new Error('Invalid value \"'+t+'\" for attribute Ff supplied.');r=t}});var n=[];Object.defineProperty(this,\"Rect\",{enumerable:!1,configurable:!1,get:function(){if(0!==n.length)return n},set:function(t){n=void 0!==t?t:[]}}),Object.defineProperty(this,\"x\",{enumerable:!0,configurable:!0,get:function(){return!n||isNaN(n[0])?0:n[0]},set:function(t){n[0]=t}}),Object.defineProperty(this,\"y\",{enumerable:!0,configurable:!0,get:function(){return!n||isNaN(n[1])?0:n[1]},set:function(t){n[1]=t}}),Object.defineProperty(this,\"width\",{enumerable:!0,configurable:!0,get:function(){return!n||isNaN(n[2])?0:n[2]},set:function(t){n[2]=t}}),Object.defineProperty(this,\"height\",{enumerable:!0,configurable:!0,get:function(){return!n||isNaN(n[3])?0:n[3]},set:function(t){n[3]=t}});var i=\"\";Object.defineProperty(this,\"FT\",{enumerable:!0,configurable:!1,get:function(){return i},set:function(t){switch(t){case\"/Btn\":case\"/Tx\":case\"/Ch\":case\"/Sig\":i=t;break;default:throw new Error('Invalid value \"'+t+'\" for attribute FT supplied.')}}});var a=null;Object.defineProperty(this,\"T\",{enumerable:!0,configurable:!1,get:function(){if(!a||a.length<1){if(this instanceof wt)return;a=\"FieldObject\"+t.FieldNum++}var e=function(t){return t};return this.scope&&(e=this.scope.internal.getEncryptor(this.objId)),\"(\"+T(e(a))+\")\"},set:function(t){a=t.toString()}}),Object.defineProperty(this,\"fieldName\",{configurable:!0,enumerable:!0,get:function(){return a},set:function(t){a=t}});var o=\"helvetica\";Object.defineProperty(this,\"fontName\",{enumerable:!0,configurable:!0,get:function(){return o},set:function(t){o=t}});var s=\"normal\";Object.defineProperty(this,\"fontStyle\",{enumerable:!0,configurable:!0,get:function(){return s},set:function(t){s=t}});var u=0;Object.defineProperty(this,\"fontSize\",{enumerable:!0,configurable:!0,get:function(){return u},set:function(t){u=t}});var c=void 0;Object.defineProperty(this,\"maxFontSize\",{enumerable:!0,configurable:!0,get:function(){return void 0===c?50/D:c},set:function(t){c=t}});var l=\"black\";Object.defineProperty(this,\"color\",{enumerable:!0,configurable:!0,get:function(){return l},set:function(t){l=t}});var h=\"/F1 0 Tf 0 g\";Object.defineProperty(this,\"DA\",{enumerable:!0,configurable:!1,get:function(){if(!(!h||this instanceof wt||this instanceof Lt))return ut(h,this.objId,this.scope)},set:function(t){t=t.toString(),h=t}});var f=null;Object.defineProperty(this,\"DV\",{enumerable:!1,configurable:!1,get:function(){if(f)return this instanceof vt==0?ut(f,this.objId,this.scope):f},set:function(t){t=t.toString(),f=this instanceof vt==0?\"(\"===t.substr(0,1)?z(t.substr(1,t.length-2)):z(t):t}}),Object.defineProperty(this,\"defaultValue\",{enumerable:!0,configurable:!0,get:function(){return this instanceof vt==1?z(f.substr(1,f.length-1)):f},set:function(t){t=t.toString(),f=this instanceof vt==1?\"/\"+U(t):t}});var d=null;Object.defineProperty(this,\"_V\",{enumerable:!1,configurable:!1,get:function(){if(d)return d},set:function(t){this.V=t}}),Object.defineProperty(this,\"V\",{enumerable:!1,configurable:!1,get:function(){if(d)return this instanceof vt==0?ut(d,this.objId,this.scope):d},set:function(t){t=t.toString(),d=this instanceof vt==0?\"(\"===t.substr(0,1)?z(t.substr(1,t.length-2)):z(t):t}}),Object.defineProperty(this,\"value\",{enumerable:!0,configurable:!0,get:function(){return this instanceof vt==1?z(d.substr(1,d.length-1)):d},set:function(t){t=t.toString(),d=this instanceof vt==1?\"/\"+U(t):t}}),Object.defineProperty(this,\"hasAnnotation\",{enumerable:!0,configurable:!0,get:function(){return this.Rect}}),Object.defineProperty(this,\"Type\",{enumerable:!0,configurable:!1,get:function(){return this.hasAnnotation?\"/Annot\":null}}),Object.defineProperty(this,\"Subtype\",{enumerable:!0,configurable:!1,get:function(){return this.hasAnnotation?\"/Widget\":null}});var p,g=!1;Object.defineProperty(this,\"hasAppearanceStream\",{enumerable:!0,configurable:!0,get:function(){return g},set:function(t){t=Boolean(t),g=t}}),Object.defineProperty(this,\"page\",{enumerable:!0,configurable:!0,get:function(){if(p)return p},set:function(t){p=t}}),Object.defineProperty(this,\"readOnly\",{enumerable:!0,configurable:!0,get:function(){return Boolean(Z(this.Ff,1))},set:function(t){!0===Boolean(t)?this.Ff=$(this.Ff,1):this.Ff=Q(this.Ff,1)}}),Object.defineProperty(this,\"required\",{enumerable:!0,configurable:!0,get:function(){return Boolean(Z(this.Ff,2))},set:function(t){!0===Boolean(t)?this.Ff=$(this.Ff,2):this.Ff=Q(this.Ff,2)}}),Object.defineProperty(this,\"noExport\",{enumerable:!0,configurable:!0,get:function(){return Boolean(Z(this.Ff,3))},set:function(t){!0===Boolean(t)?this.Ff=$(this.Ff,3):this.Ff=Q(this.Ff,3)}});var m=null;Object.defineProperty(this,\"Q\",{enumerable:!0,configurable:!1,get:function(){if(null!==m)return m},set:function(t){if(-1===[0,1,2].indexOf(t))throw new Error('Invalid value \"'+t+'\" for attribute Q supplied.');m=t}}),Object.defineProperty(this,\"textAlign\",{get:function(){var t;switch(m){case 0:default:t=\"left\";break;case 1:t=\"center\";break;case 2:t=\"right\"}return t},configurable:!0,enumerable:!0,set:function(t){switch(t){case\"right\":case 2:m=2;break;case\"center\":case 1:m=1;break;default:m=0}}})};V(ft,ct);var dt=function(){ft.call(this),this.FT=\"/Ch\",this.V=\"()\",this.fontName=\"zapfdingbats\";var t=0;Object.defineProperty(this,\"TI\",{enumerable:!0,configurable:!1,get:function(){return t},set:function(e){t=e}}),Object.defineProperty(this,\"topIndex\",{enumerable:!0,configurable:!0,get:function(){return t},set:function(e){t=e}});var e=[];Object.defineProperty(this,\"Opt\",{enumerable:!0,configurable:!1,get:function(){return st(e,this.objId,this.scope)},set:function(t){var r,n;n=[],\"string\"==typeof(r=t)&&(n=function(t,e,r){r||(r=1);for(var n,i=[];n=e.exec(t);)i.push(n[r]);return i}(r,/\\((.*?)\\)/g)),e=n}}),this.getOptions=function(){return e},this.setOptions=function(t){e=t,this.sort&&e.sort()},this.addOption=function(t){t=(t=t||\"\").toString(),e.push(t),this.sort&&e.sort()},this.removeOption=function(t,r){for(r=r||!1,t=(t=t||\"\").toString();-1!==e.indexOf(t)&&(e.splice(e.indexOf(t),1),!1!==r););},Object.defineProperty(this,\"combo\",{enumerable:!0,configurable:!0,get:function(){return Boolean(Z(this.Ff,18))},set:function(t){!0===Boolean(t)?this.Ff=$(this.Ff,18):this.Ff=Q(this.Ff,18)}}),Object.defineProperty(this,\"edit\",{enumerable:!0,configurable:!0,get:function(){return Boolean(Z(this.Ff,19))},set:function(t){!0===this.combo&&(!0===Boolean(t)?this.Ff=$(this.Ff,19):this.Ff=Q(this.Ff,19))}}),Object.defineProperty(this,\"sort\",{enumerable:!0,configurable:!0,get:function(){return Boolean(Z(this.Ff,20))},set:function(t){!0===Boolean(t)?(this.Ff=$(this.Ff,20),e.sort()):this.Ff=Q(this.Ff,20)}}),Object.defineProperty(this,\"multiSelect\",{enumerable:!0,configurable:!0,get:function(){return Boolean(Z(this.Ff,22))},set:function(t){!0===Boolean(t)?this.Ff=$(this.Ff,22):this.Ff=Q(this.Ff,22)}}),Object.defineProperty(this,\"doNotSpellCheck\",{enumerable:!0,configurable:!0,get:function(){return Boolean(Z(this.Ff,23))},set:function(t){!0===Boolean(t)?this.Ff=$(this.Ff,23):this.Ff=Q(this.Ff,23)}}),Object.defineProperty(this,\"commitOnSelChange\",{enumerable:!0,configurable:!0,get:function(){return Boolean(Z(this.Ff,27))},set:function(t){!0===Boolean(t)?this.Ff=$(this.Ff,27):this.Ff=Q(this.Ff,27)}}),this.hasAppearanceStream=!1};V(dt,ft);var pt=function(){dt.call(this),this.fontName=\"helvetica\",this.combo=!1};V(pt,dt);var gt=function(){pt.call(this),this.combo=!0};V(gt,pt);var mt=function(){gt.call(this),this.edit=!0};V(mt,gt);var vt=function(){ft.call(this),this.FT=\"/Btn\",Object.defineProperty(this,\"noToggleToOff\",{enumerable:!0,configurable:!0,get:function(){return Boolean(Z(this.Ff,15))},set:function(t){!0===Boolean(t)?this.Ff=$(this.Ff,15):this.Ff=Q(this.Ff,15)}}),Object.defineProperty(this,\"radio\",{enumerable:!0,configurable:!0,get:function(){return Boolean(Z(this.Ff,16))},set:function(t){!0===Boolean(t)?this.Ff=$(this.Ff,16):this.Ff=Q(this.Ff,16)}}),Object.defineProperty(this,\"pushButton\",{enumerable:!0,configurable:!0,get:function(){return Boolean(Z(this.Ff,17))},set:function(t){!0===Boolean(t)?this.Ff=$(this.Ff,17):this.Ff=Q(this.Ff,17)}}),Object.defineProperty(this,\"radioIsUnison\",{enumerable:!0,configurable:!0,get:function(){return Boolean(Z(this.Ff,26))},set:function(t){!0===Boolean(t)?this.Ff=$(this.Ff,26):this.Ff=Q(this.Ff,26)}});var e,r={};Object.defineProperty(this,\"MK\",{enumerable:!1,configurable:!1,get:function(){var t=function(t){return t};if(this.scope&&(t=this.scope.internal.getEncryptor(this.objId)),0!==Object.keys(r).length){var e,n=[];for(e in n.push(\"<<\"),r)n.push(\"/\"+e+\" (\"+T(t(r[e]))+\")\");return n.push(\">>\"),n.join(\"\\n\")}},set:function(e){\"object\"===(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(e)&&(r=e)}}),Object.defineProperty(this,\"caption\",{enumerable:!0,configurable:!0,get:function(){return r.CA||\"\"},set:function(t){\"string\"==typeof t&&(r.CA=t)}}),Object.defineProperty(this,\"AS\",{enumerable:!1,configurable:!1,get:function(){return e},set:function(t){var r=null==t?\"\":t.toString();\"/\"===r.substr(0,1)&&(r=r.substr(1)),e=\"/\"+U(r)}}),Object.defineProperty(this,\"appearanceState\",{enumerable:!0,configurable:!0,get:function(){return e.substr(1,e.length-1)},set:function(t){e=\"/\"+U(t)}})};V(vt,ft);var bt=function(){vt.call(this),this.pushButton=!0};V(bt,vt);var yt=function(){vt.call(this),this.radio=!0,this.pushButton=!1;var t=[];Object.defineProperty(this,\"Kids\",{enumerable:!0,configurable:!1,get:function(){return t},set:function(e){t=void 0!==e?e:[]}})};V(yt,vt);var wt=function(){var e,r;ft.call(this),Object.defineProperty(this,\"Parent\",{enumerable:!1,configurable:!1,get:function(){return e},set:function(t){e=t}}),Object.defineProperty(this,\"optionName\",{enumerable:!1,configurable:!0,get:function(){return r},set:function(t){r=t}});var n,i={};Object.defineProperty(this,\"MK\",{enumerable:!1,configurable:!1,get:function(){var t=function(t){return t};this.scope&&(t=this.scope.internal.getEncryptor(this.objId));var e,r=[];for(e in r.push(\"<<\"),i)r.push(\"/\"+e+\" (\"+T(t(i[e]))+\")\");return r.push(\">>\"),r.join(\"\\n\")},set:function(e){\"object\"===(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(e)&&(i=e)}}),Object.defineProperty(this,\"caption\",{enumerable:!0,configurable:!0,get:function(){return i.CA||\"\"},set:function(t){\"string\"==typeof t&&(i.CA=t)}}),Object.defineProperty(this,\"AS\",{enumerable:!1,configurable:!1,get:function(){return n},set:function(t){var e=null==t?\"\":t.toString();\"/\"===e.substr(0,1)&&(e=e.substr(1)),n=\"/\"+U(e)}}),Object.defineProperty(this,\"appearanceState\",{enumerable:!0,configurable:!0,get:function(){return n.substr(1,n.length-1)},set:function(t){var e=null==t?\"\":t.toString();\"/\"===e.substr(0,1)&&(e=e.substr(1)),n=\"/\"+U(e)}}),this.caption=\"l\",this.appearanceState=\"Off\",this._AppearanceType=At.RadioButton.Circle,this.appearanceStreamContent=this._AppearanceType.createAppearanceStream(this.optionName)};V(wt,ft),yt.prototype.setAppearance=function(t){if(!(\"createAppearanceStream\"in t)||!(\"getCA\"in t))throw new Error(\"Couldn't assign Appearance to RadioButton. Appearance was Invalid!\");for(var e in this.Kids)if(this.Kids.hasOwnProperty(e)){var r=this.Kids[e];r.appearanceStreamContent=t.createAppearanceStream(r.optionName),r.caption=t.getCA()}},yt.prototype.createOption=function(t){var e=new wt;return e.Parent=this,e.optionName=t,this.Kids.push(e),St.call(this.scope,e),e};var Nt=function(){vt.call(this),this.fontName=\"zapfdingbats\",this.caption=\"3\",this.appearanceState=\"On\",this.value=\"On\",this.textAlign=\"center\",this.appearanceStreamContent=At.CheckBox.createAppearanceStream()};V(Nt,vt);var Lt=function(){ft.call(this),this.FT=\"/Tx\",Object.defineProperty(this,\"multiline\",{enumerable:!0,configurable:!0,get:function(){return Boolean(Z(this.Ff,13))},set:function(t){!0===Boolean(t)?this.Ff=$(this.Ff,13):this.Ff=Q(this.Ff,13)}}),Object.defineProperty(this,\"fileSelect\",{enumerable:!0,configurable:!0,get:function(){return Boolean(Z(this.Ff,21))},set:function(t){!0===Boolean(t)?this.Ff=$(this.Ff,21):this.Ff=Q(this.Ff,21)}}),Object.defineProperty(this,\"doNotSpellCheck\",{enumerable:!0,configurable:!0,get:function(){return Boolean(Z(this.Ff,23))},set:function(t){!0===Boolean(t)?this.Ff=$(this.Ff,23):this.Ff=Q(this.Ff,23)}}),Object.defineProperty(this,\"doNotScroll\",{enumerable:!0,configurable:!0,get:function(){return Boolean(Z(this.Ff,24))},set:function(t){!0===Boolean(t)?this.Ff=$(this.Ff,24):this.Ff=Q(this.Ff,24)}}),Object.defineProperty(this,\"comb\",{enumerable:!0,configurable:!0,get:function(){return Boolean(Z(this.Ff,25))},set:function(t){!0===Boolean(t)?this.Ff=$(this.Ff,25):this.Ff=Q(this.Ff,25)}}),Object.defineProperty(this,\"richText\",{enumerable:!0,configurable:!0,get:function(){return Boolean(Z(this.Ff,26))},set:function(t){!0===Boolean(t)?this.Ff=$(this.Ff,26):this.Ff=Q(this.Ff,26)}});var t=null;Object.defineProperty(this,\"MaxLen\",{enumerable:!0,configurable:!1,get:function(){return t},set:function(e){t=e}}),Object.defineProperty(this,\"maxLength\",{enumerable:!0,configurable:!0,get:function(){return t},set:function(e){Number.isInteger(e)&&(t=e)}}),Object.defineProperty(this,\"hasAppearanceStream\",{enumerable:!0,configurable:!0,get:function(){return this.V||this.DV}})};V(Lt,ft);var xt=function(){Lt.call(this),Object.defineProperty(this,\"password\",{enumerable:!0,configurable:!0,get:function(){return Boolean(Z(this.Ff,14))},set:function(t){!0===Boolean(t)?this.Ff=$(this.Ff,14):this.Ff=Q(this.Ff,14)}}),this.password=!0};V(xt,Lt);var At={CheckBox:{createAppearanceStream:function(){return{N:{On:At.CheckBox.YesNormal},D:{On:At.CheckBox.YesPushDown,Off:At.CheckBox.OffPushDown}}},YesPushDown:function(t){var e=Y(t);e.scope=t.scope;var r=[],n=t.scope.internal.getFont(t.fontName,t.fontStyle).id,i=t.scope.__private__.encodeColorString(t.color),a=rt(t,t.caption);return r.push(\"0.749023 g\"),r.push(\"0 0 \"+H(At.internal.getWidth(t))+\" \"+H(At.internal.getHeight(t))+\" re\"),r.push(\"f\"),r.push(\"BMC\"),r.push(\"q\"),r.push(\"0 0 1 rg\"),r.push(\"/\"+n+\" \"+H(a.fontSize)+\" Tf \"+i),r.push(\"BT\"),r.push(a.text),r.push(\"ET\"),r.push(\"Q\"),r.push(\"EMC\"),e.stream=r.join(\"\\n\"),e},YesNormal:function(t){var e=Y(t);e.scope=t.scope;var r=t.scope.internal.getFont(t.fontName,t.fontStyle).id,n=t.scope.__private__.encodeColorString(t.color),i=[],a=At.internal.getHeight(t),o=At.internal.getWidth(t),s=rt(t,t.caption);return i.push(\"1 g\"),i.push(\"0 0 \"+H(o)+\" \"+H(a)+\" re\"),i.push(\"f\"),i.push(\"q\"),i.push(\"0 0 1 rg\"),i.push(\"0 0 \"+H(o-1)+\" \"+H(a-1)+\" re\"),i.push(\"W\"),i.push(\"n\"),i.push(\"0 g\"),i.push(\"BT\"),i.push(\"/\"+r+\" \"+H(s.fontSize)+\" Tf \"+n),i.push(s.text),i.push(\"ET\"),i.push(\"Q\"),e.stream=i.join(\"\\n\"),e},OffPushDown:function(t){var e=Y(t);e.scope=t.scope;var r=[];return r.push(\"0.749023 g\"),r.push(\"0 0 \"+H(At.internal.getWidth(t))+\" \"+H(At.internal.getHeight(t))+\" re\"),r.push(\"f\"),e.stream=r.join(\"\\n\"),e}},RadioButton:{Circle:{createAppearanceStream:function(t){var e={D:{Off:At.RadioButton.Circle.OffPushDown},N:{}};return e.N[t]=At.RadioButton.Circle.YesNormal,e.D[t]=At.RadioButton.Circle.YesPushDown,e},getCA:function(){return\"l\"},YesNormal:function(t){var e=Y(t);e.scope=t.scope;var r=[],n=At.internal.getWidth(t)<=At.internal.getHeight(t)?At.internal.getWidth(t)/4:At.internal.getHeight(t)/4;n=Number((.9*n).toFixed(5));var i=At.internal.Bezier_C,a=Number((n*i).toFixed(5));return r.push(\"q\"),r.push(\"1 0 0 1 \"+W(At.internal.getWidth(t)/2)+\" \"+W(At.internal.getHeight(t)/2)+\" cm\"),r.push(n+\" 0 m\"),r.push(n+\" \"+a+\" \"+a+\" \"+n+\" 0 \"+n+\" c\"),r.push(\"-\"+a+\" \"+n+\" -\"+n+\" \"+a+\" -\"+n+\" 0 c\"),r.push(\"-\"+n+\" -\"+a+\" -\"+a+\" -\"+n+\" 0 -\"+n+\" c\"),r.push(a+\" -\"+n+\" \"+n+\" -\"+a+\" \"+n+\" 0 c\"),r.push(\"f\"),r.push(\"Q\"),e.stream=r.join(\"\\n\"),e},YesPushDown:function(t){var e=Y(t);e.scope=t.scope;var r=[],n=At.internal.getWidth(t)<=At.internal.getHeight(t)?At.internal.getWidth(t)/4:At.internal.getHeight(t)/4;n=Number((.9*n).toFixed(5));var i=Number((2*n).toFixed(5)),a=Number((i*At.internal.Bezier_C).toFixed(5)),o=Number((n*At.internal.Bezier_C).toFixed(5));return r.push(\"0.749023 g\"),r.push(\"q\"),r.push(\"1 0 0 1 \"+W(At.internal.getWidth(t)/2)+\" \"+W(At.internal.getHeight(t)/2)+\" cm\"),r.push(i+\" 0 m\"),r.push(i+\" \"+a+\" \"+a+\" \"+i+\" 0 \"+i+\" c\"),r.push(\"-\"+a+\" \"+i+\" -\"+i+\" \"+a+\" -\"+i+\" 0 c\"),r.push(\"-\"+i+\" -\"+a+\" -\"+a+\" -\"+i+\" 0 -\"+i+\" c\"),r.push(a+\" -\"+i+\" \"+i+\" -\"+a+\" \"+i+\" 0 c\"),r.push(\"f\"),r.push(\"Q\"),r.push(\"0 g\"),r.push(\"q\"),r.push(\"1 0 0 1 \"+W(At.internal.getWidth(t)/2)+\" \"+W(At.internal.getHeight(t)/2)+\" cm\"),r.push(n+\" 0 m\"),r.push(n+\" \"+o+\" \"+o+\" \"+n+\" 0 \"+n+\" c\"),r.push(\"-\"+o+\" \"+n+\" -\"+n+\" \"+o+\" -\"+n+\" 0 c\"),r.push(\"-\"+n+\" -\"+o+\" -\"+o+\" -\"+n+\" 0 -\"+n+\" c\"),r.push(o+\" -\"+n+\" \"+n+\" -\"+o+\" \"+n+\" 0 c\"),r.push(\"f\"),r.push(\"Q\"),e.stream=r.join(\"\\n\"),e},OffPushDown:function(t){var e=Y(t);e.scope=t.scope;var r=[],n=At.internal.getWidth(t)<=At.internal.getHeight(t)?At.internal.getWidth(t)/4:At.internal.getHeight(t)/4;n=Number((.9*n).toFixed(5));var i=Number((2*n).toFixed(5)),a=Number((i*At.internal.Bezier_C).toFixed(5));return r.push(\"0.749023 g\"),r.push(\"q\"),r.push(\"1 0 0 1 \"+W(At.internal.getWidth(t)/2)+\" \"+W(At.internal.getHeight(t)/2)+\" cm\"),r.push(i+\" 0 m\"),r.push(i+\" \"+a+\" \"+a+\" \"+i+\" 0 \"+i+\" c\"),r.push(\"-\"+a+\" \"+i+\" -\"+i+\" \"+a+\" -\"+i+\" 0 c\"),r.push(\"-\"+i+\" -\"+a+\" -\"+a+\" -\"+i+\" 0 -\"+i+\" c\"),r.push(a+\" -\"+i+\" \"+i+\" -\"+a+\" \"+i+\" 0 c\"),r.push(\"f\"),r.push(\"Q\"),e.stream=r.join(\"\\n\"),e}},Cross:{createAppearanceStream:function(t){var e={D:{Off:At.RadioButton.Cross.OffPushDown},N:{}};return e.N[t]=At.RadioButton.Cross.YesNormal,e.D[t]=At.RadioButton.Cross.YesPushDown,e},getCA:function(){return\"8\"},YesNormal:function(t){var e=Y(t);e.scope=t.scope;var r=[],n=At.internal.calculateCross(t);return r.push(\"q\"),r.push(\"1 1 \"+H(At.internal.getWidth(t)-2)+\" \"+H(At.internal.getHeight(t)-2)+\" re\"),r.push(\"W\"),r.push(\"n\"),r.push(H(n.x1.x)+\" \"+H(n.x1.y)+\" m\"),r.push(H(n.x2.x)+\" \"+H(n.x2.y)+\" l\"),r.push(H(n.x4.x)+\" \"+H(n.x4.y)+\" m\"),r.push(H(n.x3.x)+\" \"+H(n.x3.y)+\" l\"),r.push(\"s\"),r.push(\"Q\"),e.stream=r.join(\"\\n\"),e},YesPushDown:function(t){var e=Y(t);e.scope=t.scope;var r=At.internal.calculateCross(t),n=[];return n.push(\"0.749023 g\"),n.push(\"0 0 \"+H(At.internal.getWidth(t))+\" \"+H(At.internal.getHeight(t))+\" re\"),n.push(\"f\"),n.push(\"q\"),n.push(\"1 1 \"+H(At.internal.getWidth(t)-2)+\" \"+H(At.internal.getHeight(t)-2)+\" re\"),n.push(\"W\"),n.push(\"n\"),n.push(H(r.x1.x)+\" \"+H(r.x1.y)+\" m\"),n.push(H(r.x2.x)+\" \"+H(r.x2.y)+\" l\"),n.push(H(r.x4.x)+\" \"+H(r.x4.y)+\" m\"),n.push(H(r.x3.x)+\" \"+H(r.x3.y)+\" l\"),n.push(\"s\"),n.push(\"Q\"),e.stream=n.join(\"\\n\"),e},OffPushDown:function(t){var e=Y(t);e.scope=t.scope;var r=[];return r.push(\"0.749023 g\"),r.push(\"0 0 \"+H(At.internal.getWidth(t))+\" \"+H(At.internal.getHeight(t))+\" re\"),r.push(\"f\"),e.stream=r.join(\"\\n\"),e}}},createDefaultAppearanceStream:function(t){var e=t.scope.internal.getFont(t.fontName,t.fontStyle).id,r=t.scope.__private__.encodeColorString(t.color);return\"/\"+e+\" \"+t.fontSize+\" Tf \"+r}};At.internal={Bezier_C:.551915024494,calculateCross:function(t){var e=At.internal.getWidth(t),r=At.internal.getHeight(t),n=Math.min(e,r);return{x1:{x:(e-n)/2,y:(r-n)/2+n},x2:{x:(e-n)/2+n,y:(r-n)/2},x3:{x:(e-n)/2,y:(r-n)/2},x4:{x:(e-n)/2+n,y:(r-n)/2+n}}}},At.internal.getWidth=function(e){var r=0;return\"object\"===(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(e)&&(r=G(e.Rect[2])),r},At.internal.getHeight=function(e){var r=0;return\"object\"===(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(e)&&(r=G(e.Rect[3])),r};var St=R.addField=function(t){if(ot(this,t),!(t instanceof ft))throw new Error(\"Invalid argument passed to jsPDF.addField.\");var e;return(e=t).scope.internal.acroformPlugin.printedOut&&(e.scope.internal.acroformPlugin.printedOut=!1,e.scope.internal.acroformPlugin.acroFormDictionaryRoot=null),e.scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push(e),t.page=t.scope.internal.getCurrentPageInfo().pageNumber,this};R.AcroFormChoiceField=dt,R.AcroFormListBox=pt,R.AcroFormComboBox=gt,R.AcroFormEditBox=mt,R.AcroFormButton=vt,R.AcroFormPushButton=bt,R.AcroFormRadioButton=yt,R.AcroFormCheckBox=Nt,R.AcroFormTextField=Lt,R.AcroFormPasswordField=xt,R.AcroFormAppearance=At,R.AcroForm={ChoiceField:dt,ListBox:pt,ComboBox:gt,EditBox:mt,Button:vt,PushButton:bt,RadioButton:yt,CheckBox:Nt,TextField:Lt,PasswordField:xt,Appearance:At},E.AcroForm={ChoiceField:dt,ListBox:pt,ComboBox:gt,EditBox:mt,Button:vt,PushButton:bt,RadioButton:yt,CheckBox:Nt,TextField:Lt,PasswordField:xt,Appearance:At};var _t=E.AcroForm;function Pt(t){return t.reduce(function(t,e,r){return t[e]=r,t},{})}!function(e){var r=\"addImage_\";e.__addimage__={};var n=\"UNKNOWN\",i={PNG:[[137,80,78,71]],TIFF:[[77,77,0,42],[73,73,42,0]],JPEG:[[255,216,255,224,void 0,void 0,74,70,73,70,0],[255,216,255,225,void 0,void 0,69,120,105,102,0,0],[255,216,255,219],[255,216,255,238]],JPEG2000:[[0,0,0,12,106,80,32,32]],GIF87a:[[71,73,70,56,55,97]],GIF89a:[[71,73,70,56,57,97]],WEBP:[[82,73,70,70,void 0,void 0,void 0,void 0,87,69,66,80]],BMP:[[66,77],[66,65],[67,73],[67,80],[73,67],[80,84]]},a=e.__addimage__.getImageFileTypeByImageData=function(t,e){var r,a,o,s,u,c=n;if(\"RGBA\"===(e=e||n)||void 0!==t.data&&t.data instanceof Uint8ClampedArray&&\"height\"in t&&\"width\"in t)return\"RGBA\";if(A(t))for(u in i)for(o=i[u],r=0;r<o.length;r+=1){for(s=!0,a=0;a<o[r].length;a+=1)if(void 0!==o[r][a]&&o[r][a]!==t[a]){s=!1;break}if(!0===s){c=u;break}}else for(u in i)for(o=i[u],r=0;r<o.length;r+=1){for(s=!0,a=0;a<o[r].length;a+=1)if(void 0!==o[r][a]&&o[r][a]!==t.charCodeAt(a)){s=!1;break}if(!0===s){c=u;break}}return c===n&&e!==n&&(c=e),c},o=function t(e){for(var r=this.internal.write,n=this.internal.putStream,i=(0,this.internal.getFilters)();-1!==i.indexOf(\"FlateEncode\");)i.splice(i.indexOf(\"FlateEncode\"),1);e.objectId=this.internal.newObject();var a=[];if(a.push({key:\"Type\",value:\"/XObject\"}),a.push({key:\"Subtype\",value:\"/Image\"}),a.push({key:\"Width\",value:e.width}),a.push({key:\"Height\",value:e.height}),e.colorSpace===y.INDEXED?a.push({key:\"ColorSpace\",value:\"[/Indexed /DeviceRGB \"+(e.palette.length/3-1)+\" \"+(\"sMask\"in e&&void 0!==e.sMask?e.objectId+2:e.objectId+1)+\" 0 R]\"}):(a.push({key:\"ColorSpace\",value:\"/\"+e.colorSpace}),e.colorSpace===y.DEVICE_CMYK&&a.push({key:\"Decode\",value:\"[1 0 1 0 1 0 1 0]\"})),a.push({key:\"BitsPerComponent\",value:e.bitsPerComponent}),\"decodeParameters\"in e&&void 0!==e.decodeParameters&&a.push({key:\"DecodeParms\",value:\"<<\"+e.decodeParameters+\">>\"}),\"transparency\"in e&&Array.isArray(e.transparency)&&e.transparency.length>0){for(var o=\"\",s=0,u=e.transparency.length;s<u;s++)o+=e.transparency[s]+\" \"+e.transparency[s]+\" \";a.push({key:\"Mask\",value:\"[\"+o+\"]\"})}void 0!==e.sMask&&a.push({key:\"SMask\",value:e.objectId+1+\" 0 R\"});var c=void 0!==e.filter?[\"/\"+e.filter]:void 0;if(n({data:e.data,additionalKeyValues:a,alreadyAppliedFilters:c,objectId:e.objectId}),r(\"endobj\"),\"sMask\"in e&&void 0!==e.sMask){var l,h=null!==(l=e.sMaskBitsPerComponent)&&void 0!==l?l:e.bitsPerComponent,f={width:e.width,height:e.height,colorSpace:\"DeviceGray\",bitsPerComponent:h,data:e.sMask};\"filter\"in e&&(f.decodeParameters=\"/Predictor \".concat(e.predictor,\" /Colors 1 /BitsPerComponent \").concat(h,\" /Columns \").concat(e.width),f.filter=e.filter),t.call(this,f)}if(e.colorSpace===y.INDEXED){var d=this.internal.newObject();n({data:_(new Uint8Array(e.palette)),objectId:d}),r(\"endobj\")}},s=function(){var t=this.internal.collections[r+\"images\"];for(var e in t)o.call(this,t[e])},u=function(){var t,e=this.internal.collections[r+\"images\"],n=this.internal.write;for(var i in e)n(\"/I\"+(t=e[i]).index,t.objectId,\"0\",\"R\")},c=function(){this.internal.collections[r+\"images\"]||(this.internal.collections[r+\"images\"]={},this.internal.events.subscribe(\"putResources\",s),this.internal.events.subscribe(\"putXobjectDict\",u))},l=function(){var t=this.internal.collections[r+\"images\"];return c.call(this),t},h=function(){return Object.keys(this.internal.collections[r+\"images\"]).length},d=function(t){return\"function\"==typeof e[\"process\"+t.toUpperCase()]},p=function(e){return\"object\"===(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(e)&&1===e.nodeType},g=function(t,r){if(\"IMG\"===t.nodeName&&t.hasAttribute(\"src\")){var n=\"\"+t.getAttribute(\"src\");if(0===n.indexOf(\"data:image/\"))return f(unescape(n).split(\"base64,\").pop());var i=e.loadFile(n,!0);if(void 0!==i)return i}if(\"CANVAS\"===t.nodeName){if(0===t.width||0===t.height)throw new Error(\"Given canvas must have data. Canvas width: \"+t.width+\", height: \"+t.height);var a;switch(r){case\"PNG\":a=\"image/png\";break;case\"WEBP\":a=\"image/webp\";break;default:a=\"image/jpeg\"}return f(t.toDataURL(a,1).split(\"base64,\").pop())}},m=function(t){var e=this.internal.collections[r+\"images\"];if(e)for(var n in e)if(t===e[n].alias)return e[n]},v=function(t,e,r){return t||e||(t=-96,e=-96),t<0&&(t=-1*r.width*72/t/this.internal.scaleFactor),e<0&&(e=-1*r.height*72/e/this.internal.scaleFactor),0===t&&(t=e*r.width/r.height),0===e&&(e=t*r.height/r.width),[t,e]},b=function(t,e,r,n,i,a){var o=v.call(this,r,n,i),s=this.internal.getCoordinateString,u=this.internal.getVerticalCoordinateString,c=l.call(this);if(r=o[0],n=o[1],c[i.index]=i,a){a*=Math.PI/180;var h=Math.cos(a),f=Math.sin(a),d=function(t){return t.toFixed(4)},p=[d(h),d(f),d(-1*f),d(h),0,0,\"cm\"]}this.internal.write(\"q\"),a?(this.internal.write([1,\"0\",\"0\",1,s(t),u(e+n),\"cm\"].join(\" \")),this.internal.write(p.join(\" \")),this.internal.write([s(r),\"0\",\"0\",s(n),\"0\",\"0\",\"cm\"].join(\" \"))):this.internal.write([s(r),\"0\",\"0\",s(n),s(t),u(e+n),\"cm\"].join(\" \")),this.isAdvancedAPI()&&this.internal.write([1,0,0,-1,0,0,\"cm\"].join(\" \")),this.internal.write(\"/I\"+i.index+\" Do\"),this.internal.write(\"Q\")},y=e.color_spaces={DEVICE_RGB:\"DeviceRGB\",DEVICE_GRAY:\"DeviceGray\",DEVICE_CMYK:\"DeviceCMYK\",CAL_GREY:\"CalGray\",CAL_RGB:\"CalRGB\",LAB:\"Lab\",ICC_BASED:\"ICCBased\",INDEXED:\"Indexed\",PATTERN:\"Pattern\",SEPARATION:\"Separation\",DEVICE_N:\"DeviceN\"};e.decode={DCT_DECODE:\"DCTDecode\",FLATE_DECODE:\"FlateDecode\",LZW_DECODE:\"LZWDecode\",JPX_DECODE:\"JPXDecode\",JBIG2_DECODE:\"JBIG2Decode\",ASCII85_DECODE:\"ASCII85Decode\",ASCII_HEX_DECODE:\"ASCIIHexDecode\",RUN_LENGTH_DECODE:\"RunLengthDecode\",CCITT_FAX_DECODE:\"CCITTFaxDecode\"};var w=e.image_compression={NONE:\"NONE\",FAST:\"FAST\",MEDIUM:\"MEDIUM\",SLOW:\"SLOW\"},N=e.__addimage__.sHashCode=function(t){var e,r,n=0;if(\"string\"==typeof t)for(r=t.length,e=0;e<r;e++)n=(n<<5)-n+t.charCodeAt(e),n|=0;else if(A(t))for(r=t.byteLength/2,e=0;e<r;e++)n=(n<<5)-n+t[e],n|=0;return n},L=e.__addimage__.validateStringAsBase64=function(t){(t=t||\"\").toString().trim();var e=!0;return 0===t.length&&(e=!1),t.length%4!=0&&(e=!1),!1===/^[A-Za-z0-9+/]+$/.test(t.substr(0,t.length-2))&&(e=!1),!1===/^[A-Za-z0-9/][A-Za-z0-9+/]|[A-Za-z0-9+/]=|==$/.test(t.substr(-2))&&(e=!1),e},x=e.__addimage__.extractImageFromDataUrl=function(t){if(null==t)return null;if(!(t=t.trim()).startsWith(\"data:\"))return null;var e=t.indexOf(\",\");return e<0?null:t.substring(0,e).trim().endsWith(\"base64\")?t.substring(e+1):null};e.__addimage__.isArrayBuffer=function(t){return t instanceof ArrayBuffer};var A=e.__addimage__.isArrayBufferView=function(t){return t instanceof Int8Array||t instanceof Uint8Array||t instanceof Uint8ClampedArray||t instanceof Int16Array||t instanceof Uint16Array||t instanceof Int32Array||t instanceof Uint32Array||t instanceof Float32Array||t instanceof Float64Array},S=e.__addimage__.binaryStringToUint8Array=function(t){for(var e=t.length,r=new Uint8Array(e),n=0;n<e;n++)r[n]=t.charCodeAt(n);return r},_=e.__addimage__.arrayBufferToBinaryString=function(t){for(var e=\"\",r=A(t)?t:new Uint8Array(t),n=0;n<r.length;n+=8192)e+=String.fromCharCode.apply(null,r.subarray(n,n+8192));return e};e.addImage=function(){var e,r,i,a,o,s,u,l,h;if(\"number\"==typeof arguments[1]?(r=n,i=arguments[1],a=arguments[2],o=arguments[3],s=arguments[4],u=arguments[5],l=arguments[6],h=arguments[7]):(r=arguments[1],i=arguments[2],a=arguments[3],o=arguments[4],s=arguments[5],u=arguments[6],l=arguments[7],h=arguments[8]),\"object\"===(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(e=arguments[0])&&!p(e)&&\"imageData\"in e){var f=e;e=f.imageData,r=f.format||r||n,i=f.x||i||0,a=f.y||a||0,o=f.w||f.width||o,s=f.h||f.height||s,u=f.alias||u,l=f.compression||l,h=f.rotation||f.angle||h}var d=this.internal.getFilters();if(void 0===l&&-1!==d.indexOf(\"FlateEncode\")&&(l=\"SLOW\"),isNaN(i)||isNaN(a))throw new Error(\"Invalid coordinates passed to jsPDF.addImage\");c.call(this);var g=P.call(this,e,r,u,l);return b.call(this,i,a,o,s,g,h),this};var P=function(t,r,i,o){var s,u,c;if(\"string\"==typeof t&&a(t)===n){t=unescape(t);var l=k(t,!1);(\"\"!==l||void 0!==(l=e.loadFile(t,!0)))&&(t=l)}if(p(t)&&(t=g(t,r)),r=a(t,r),!d(r))throw new Error(\"addImage does not support files of type '\"+r+\"', please ensure that a plugin for '\"+r+\"' support is added.\");if((null==(c=i)||0===c.length)&&(i=function(t){return\"string\"==typeof t||A(t)?N(t):A(t.data)?N(t.data):null}(t)),(s=m.call(this,i))||(t instanceof Uint8Array||\"RGBA\"===r||(u=t,t=S(t)),s=this[\"process\"+r.toUpperCase()](t,h.call(this),i,function(t){return t&&\"string\"==typeof t&&(t=t.toUpperCase()),t in e.image_compression?t:w.NONE}(o),u)),!s)throw new Error(\"An unknown error occurred whilst processing the image.\");return s},k=e.__addimage__.convertBase64ToBinaryString=function(t,e){e=\"boolean\"!=typeof e||e;var r,n=\"\";if(\"string\"==typeof t){var i;r=null!==(i=x(t))&&void 0!==i?i:t;try{n=f(r)}catch(a){if(e)throw L(r)?new Error(\"atob-Error in jsPDF.convertBase64ToBinaryString \"+a.message):new Error(\"Supplied Data is not a valid base64-String jsPDF.convertBase64ToBinaryString \")}}return n};e.getImageProperties=function(t){var r,i,o=\"\";if(p(t)&&(t=g(t)),\"string\"==typeof t&&a(t)===n&&(\"\"===(o=k(t,!1))&&(o=e.loadFile(t)||\"\"),t=o),i=a(t),!d(i))throw new Error(\"addImage does not support files of type '\"+i+\"', please ensure that a plugin for '\"+i+\"' support is added.\");if(t instanceof Uint8Array||(t=S(t)),!(r=this[\"process\"+i.toUpperCase()](t)))throw new Error(\"An unknown error occurred whilst processing the image\");return r.fileType=i,r}}(E.API),\n/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(t){var e=function(t){if(void 0!==t&&\"\"!=t)return!0};E.API.events.push([\"addPage\",function(t){this.internal.getPageInfo(t.pageNumber).pageContext.annotations=[]}]),t.events.push([\"putPage\",function(t){for(var r,n,i,a=this.internal.getCoordinateString,o=this.internal.getVerticalCoordinateString,s=this.internal.getPageInfoByObjId(t.objId),u=t.pageContext.annotations,c=!1,l=0;l<u.length&&!c;l++)switch((r=u[l]).type){case\"link\":(e(r.options.url)||e(r.options.pageNumber))&&(c=!0);break;case\"reference\":case\"text\":case\"freetext\":c=!0}if(0!=c){this.internal.write(\"/Annots [\");for(var h=0;h<u.length;h++){r=u[h];var f=this.internal.pdfEscape,d=this.internal.getEncryptor(t.objId);switch(r.type){case\"reference\":this.internal.write(\" \"+r.object.objId+\" 0 R \");break;case\"text\":var p=this.internal.newAdditionalObject(),g=this.internal.newAdditionalObject(),m=this.internal.getEncryptor(p.objId),v=r.title||\"Note\";i=\"<</Type /Annot /Subtype /Text \"+(n=\"/Rect [\"+a(r.bounds.x)+\" \"+o(r.bounds.y+r.bounds.h)+\" \"+a(r.bounds.x+r.bounds.w)+\" \"+o(r.bounds.y)+\"] \")+\"/Contents (\"+f(m(r.contents))+\")\",i+=\" /Popup \"+g.objId+\" 0 R\",i+=\" /P \"+s.objId+\" 0 R\",i+=\" /T (\"+f(m(v))+\") >>\",p.content=i;var b=p.objId+\" 0 R\";i=\"<</Type /Annot /Subtype /Popup \"+(n=\"/Rect [\"+a(r.bounds.x+30)+\" \"+o(r.bounds.y+r.bounds.h)+\" \"+a(r.bounds.x+r.bounds.w+30)+\" \"+o(r.bounds.y)+\"] \")+\" /Parent \"+b,r.open&&(i+=\" /Open true\"),i+=\" >>\",g.content=i,this.internal.write(p.objId,\"0 R\",g.objId,\"0 R\");break;case\"freetext\":n=\"/Rect [\"+a(r.bounds.x)+\" \"+o(r.bounds.y)+\" \"+a(r.bounds.x+r.bounds.w)+\" \"+o(r.bounds.y+r.bounds.h)+\"] \";var y=\"font: Helvetica,sans-serif 12.0pt; text-align:left; color:#\"+(r.color||\"#000000\");i=\"<</Type /Annot /Subtype /FreeText \"+n+\"/Contents (\"+f(d(r.contents))+\")\",i+=\" /DS(\"+f(d(y))+\")\",i+=\" /Border [0 0 0]\",i+=\" >>\",this.internal.write(i);break;case\"link\":if(r.options.name){var w=this.annotations._nameMap[r.options.name];r.options.pageNumber=w.page,r.options.top=w.y}else r.options.top||(r.options.top=0);if(n=\"/Rect [\"+r.finalBounds.x+\" \"+r.finalBounds.y+\" \"+r.finalBounds.w+\" \"+r.finalBounds.h+\"] \",i=\"\",r.options.url)i=\"<</Type /Annot /Subtype /Link \"+n+\"/Border [0 0 0] /A <</S /URI /URI (\"+f(d(r.options.url))+\") >>\";else if(r.options.pageNumber)switch(i=\"<</Type /Annot /Subtype /Link \"+n+\"/Border [0 0 0] /Dest [\"+this.internal.getPageInfo(r.options.pageNumber).objId+\" 0 R\",r.options.magFactor=r.options.magFactor||\"XYZ\",r.options.magFactor){case\"Fit\":i+=\" /Fit]\";break;case\"FitH\":i+=\" /FitH \"+r.options.top+\"]\";break;case\"FitV\":r.options.left=r.options.left||0,i+=\" /FitV \"+r.options.left+\"]\";break;default:var N=o(r.options.top);r.options.left=r.options.left||0,void 0===r.options.zoom&&(r.options.zoom=0),i+=\" /XYZ \"+r.options.left+\" \"+N+\" \"+r.options.zoom+\"]\"}\"\"!=i&&(i+=\" >>\",this.internal.write(i))}}this.internal.write(\"]\")}}]),t.createAnnotation=function(t){var e=this.internal.getCurrentPageInfo();switch(t.type){case\"link\":this.link(t.bounds.x,t.bounds.y,t.bounds.w,t.bounds.h,t);break;case\"text\":case\"freetext\":e.pageContext.annotations.push(t)}},t.link=function(t,e,r,n,i){var a=this.internal.getCurrentPageInfo(),o=this.internal.getCoordinateString,s=this.internal.getVerticalCoordinateString;a.pageContext.annotations.push({finalBounds:{x:o(t),y:s(e),w:o(t+r),h:s(e+n)},options:i,type:\"link\"})},t.textWithLink=function(t,e,r,n){var i,a,o=this.getTextWidth(t),s=this.internal.getLineHeight()/this.internal.scaleFactor;if(void 0!==n.maxWidth){a=n.maxWidth;var u=this.splitTextToSize(t,a).length;i=Math.ceil(s*u)}else a=o,i=s;return this.text(t,e,r,n),r+=.2*s,\"center\"===n.align&&(e-=o/2),\"right\"===n.align&&(e-=o),this.link(e,r-s,a,i,n),o},t.getTextWidth=function(t){var e=this.internal.getFontSize();return this.getStringUnitWidth(t)*e/this.internal.scaleFactor}}(E.API),\n/**\n * @license\n * Copyright (c) 2017 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(t){var e={1569:[65152],1570:[65153,65154],1571:[65155,65156],1572:[65157,65158],1573:[65159,65160],1574:[65161,65162,65163,65164],1575:[65165,65166],1576:[65167,65168,65169,65170],1577:[65171,65172],1578:[65173,65174,65175,65176],1579:[65177,65178,65179,65180],1580:[65181,65182,65183,65184],1581:[65185,65186,65187,65188],1582:[65189,65190,65191,65192],1583:[65193,65194],1584:[65195,65196],1585:[65197,65198],1586:[65199,65200],1587:[65201,65202,65203,65204],1588:[65205,65206,65207,65208],1589:[65209,65210,65211,65212],1590:[65213,65214,65215,65216],1591:[65217,65218,65219,65220],1592:[65221,65222,65223,65224],1593:[65225,65226,65227,65228],1594:[65229,65230,65231,65232],1601:[65233,65234,65235,65236],1602:[65237,65238,65239,65240],1603:[65241,65242,65243,65244],1604:[65245,65246,65247,65248],1605:[65249,65250,65251,65252],1606:[65253,65254,65255,65256],1607:[65257,65258,65259,65260],1608:[65261,65262],1609:[65263,65264,64488,64489],1610:[65265,65266,65267,65268],1649:[64336,64337],1655:[64477],1657:[64358,64359,64360,64361],1658:[64350,64351,64352,64353],1659:[64338,64339,64340,64341],1662:[64342,64343,64344,64345],1663:[64354,64355,64356,64357],1664:[64346,64347,64348,64349],1667:[64374,64375,64376,64377],1668:[64370,64371,64372,64373],1670:[64378,64379,64380,64381],1671:[64382,64383,64384,64385],1672:[64392,64393],1676:[64388,64389],1677:[64386,64387],1678:[64390,64391],1681:[64396,64397],1688:[64394,64395],1700:[64362,64363,64364,64365],1702:[64366,64367,64368,64369],1705:[64398,64399,64400,64401],1709:[64467,64468,64469,64470],1711:[64402,64403,64404,64405],1713:[64410,64411,64412,64413],1715:[64406,64407,64408,64409],1722:[64414,64415],1723:[64416,64417,64418,64419],1726:[64426,64427,64428,64429],1728:[64420,64421],1729:[64422,64423,64424,64425],1733:[64480,64481],1734:[64473,64474],1735:[64471,64472],1736:[64475,64476],1737:[64482,64483],1739:[64478,64479],1740:[64508,64509,64510,64511],1744:[64484,64485,64486,64487],1746:[64430,64431],1747:[64432,64433]},r={65247:{65154:65269,65156:65271,65160:65273,65166:65275},65248:{65154:65270,65156:65272,65160:65274,65166:65276},65165:{65247:{65248:{65258:65010}}},1617:{1612:64606,1613:64607,1614:64608,1615:64609,1616:64610}},n={1612:64606,1613:64607,1614:64608,1615:64609,1616:64610},i=[1570,1571,1573,1575];t.__arabicParser__={};var a=t.__arabicParser__.isInArabicSubstitutionA=function(t){return void 0!==e[t.charCodeAt(0)]},o=t.__arabicParser__.isArabicLetter=function(t){return\"string\"==typeof t&&/^[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]+$/.test(t)},s=t.__arabicParser__.isArabicEndLetter=function(t){return o(t)&&a(t)&&e[t.charCodeAt(0)].length<=2},u=t.__arabicParser__.isArabicAlfLetter=function(t){return o(t)&&i.indexOf(t.charCodeAt(0))>=0};t.__arabicParser__.arabicLetterHasIsolatedForm=function(t){return o(t)&&a(t)&&e[t.charCodeAt(0)].length>=1};var c=t.__arabicParser__.arabicLetterHasFinalForm=function(t){return o(t)&&a(t)&&e[t.charCodeAt(0)].length>=2};t.__arabicParser__.arabicLetterHasInitialForm=function(t){return o(t)&&a(t)&&e[t.charCodeAt(0)].length>=3};var l=t.__arabicParser__.arabicLetterHasMedialForm=function(t){return o(t)&&a(t)&&4==e[t.charCodeAt(0)].length},h=t.__arabicParser__.resolveLigatures=function(t){var e=0,n=r,i=\"\",a=0;for(e=0;e<t.length;e+=1)void 0!==n[t.charCodeAt(e)]?(a++,\"number\"==typeof(n=n[t.charCodeAt(e)])&&(i+=String.fromCharCode(n),n=r,a=0),e===t.length-1&&(n=r,i+=t.charAt(e-(a-1)),e-=a-1,a=0)):(n=r,i+=t.charAt(e-a),e-=a,a=0);return i};t.__arabicParser__.isArabicDiacritic=function(t){return void 0!==t&&void 0!==n[t.charCodeAt(0)]};var f=t.__arabicParser__.getCorrectForm=function(t,e,r){return o(t)?!1===a(t)?-1:!c(t)||!o(e)&&!o(r)||!o(r)&&s(e)||s(t)&&!o(e)||s(t)&&u(e)||s(t)&&s(e)?0:l(t)&&o(e)&&!s(e)&&o(r)&&c(r)?3:s(t)||!o(r)?1:2:-1},d=function(t){var r=0,n=0,i=0,a=\"\",s=\"\",u=\"\",c=(t=t||\"\").split(\"\\\\s+\"),l=[];for(r=0;r<c.length;r+=1){for(l.push(\"\"),n=0;n<c[r].length;n+=1)a=c[r][n],s=c[r][n-1],u=c[r][n+1],o(a)?(i=f(a,s,u),l[r]+=-1!==i?String.fromCharCode(e[a.charCodeAt(0)][i]):a):l[r]+=a;l[r]=h(l[r])}return l.join(\" \")},p=t.__arabicParser__.processArabic=t.processArabic=function(){var t,e=\"string\"==typeof arguments[0]?arguments[0]:arguments[0].text,r=[];if(Array.isArray(e)){var n=0;for(r=[],n=0;n<e.length;n+=1)Array.isArray(e[n])?r.push([d(e[n][0]),e[n][1],e[n][2]]):r.push([d(e[n])]);t=r}else t=d(e);return\"string\"==typeof arguments[0]?t:(arguments[0].text=t,arguments[0])};t.events.push([\"preProcessText\",p])}(E.API),E.API.autoPrint=function(t){var e;return(t=t||{}).variant=t.variant||\"non-conform\",\"javascript\"===t.variant?this.addJS(\"print({});\"):(this.internal.events.subscribe(\"postPutResources\",function(){e=this.internal.newObject(),this.internal.out(\"<<\"),this.internal.out(\"/S /Named\"),this.internal.out(\"/Type /Action\"),this.internal.out(\"/N /Print\"),this.internal.out(\">>\"),this.internal.out(\"endobj\")}),this.internal.events.subscribe(\"putCatalog\",function(){this.internal.out(\"/OpenAction \"+e+\" 0 R\")})),this},\n/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(t){var e=function(){var t=void 0;Object.defineProperty(this,\"pdf\",{get:function(){return t},set:function(e){t=e}});var e=150;Object.defineProperty(this,\"width\",{get:function(){return e},set:function(t){e=isNaN(t)||!1===Number.isInteger(t)||t<0?150:t,this.getContext(\"2d\").pageWrapXEnabled&&(this.getContext(\"2d\").pageWrapX=e+1)}});var r=300;Object.defineProperty(this,\"height\",{get:function(){return r},set:function(t){r=isNaN(t)||!1===Number.isInteger(t)||t<0?300:t,this.getContext(\"2d\").pageWrapYEnabled&&(this.getContext(\"2d\").pageWrapY=r+1)}});var n=[];Object.defineProperty(this,\"childNodes\",{get:function(){return n},set:function(t){n=t}});var i={};Object.defineProperty(this,\"style\",{get:function(){return i},set:function(t){i=t}}),Object.defineProperty(this,\"parentNode\",{})};e.prototype.getContext=function(t,e){var r;if(\"2d\"!==(t=t||\"2d\"))return null;for(r in e)this.pdf.context2d.hasOwnProperty(r)&&(this.pdf.context2d[r]=e[r]);return this.pdf.context2d._canvas=this,this.pdf.context2d},e.prototype.toDataURL=function(){throw new Error(\"toDataURL is not implemented.\")},t.events.push([\"initialized\",function(){this.canvas=new e,this.canvas.pdf=this}])}(E.API),function(e){var r={left:0,top:0,bottom:0,right:0},n=!1,i=function(){void 0===this.internal.__cell__&&(this.internal.__cell__={},this.internal.__cell__.padding=3,this.internal.__cell__.headerFunction=void 0,this.internal.__cell__.margins=Object.assign({},r),this.internal.__cell__.margins.width=this.getPageWidth(),a.call(this))},a=function(){this.internal.__cell__.lastCell=new o,this.internal.__cell__.pages=1},o=function(){var t=arguments[0];Object.defineProperty(this,\"x\",{enumerable:!0,get:function(){return t},set:function(e){t=e}});var e=arguments[1];Object.defineProperty(this,\"y\",{enumerable:!0,get:function(){return e},set:function(t){e=t}});var r=arguments[2];Object.defineProperty(this,\"width\",{enumerable:!0,get:function(){return r},set:function(t){r=t}});var n=arguments[3];Object.defineProperty(this,\"height\",{enumerable:!0,get:function(){return n},set:function(t){n=t}});var i=arguments[4];Object.defineProperty(this,\"text\",{enumerable:!0,get:function(){return i},set:function(t){i=t}});var a=arguments[5];Object.defineProperty(this,\"lineNumber\",{enumerable:!0,get:function(){return a},set:function(t){a=t}});var o=arguments[6];return Object.defineProperty(this,\"align\",{enumerable:!0,get:function(){return o},set:function(t){o=t}}),this};o.prototype.clone=function(){return new o(this.x,this.y,this.width,this.height,this.text,this.lineNumber,this.align)},o.prototype.toArray=function(){return[this.x,this.y,this.width,this.height,this.text,this.lineNumber,this.align]},e.setHeaderFunction=function(t){return i.call(this),this.internal.__cell__.headerFunction=\"function\"==typeof t?t:void 0,this},e.getTextDimensions=function(t,e){i.call(this);var r=(e=e||{}).fontSize||this.getFontSize(),n=e.font||this.getFont(),a=e.scaleFactor||this.internal.scaleFactor,o=0,s=0,u=0,c=this;if(!Array.isArray(t)&&\"string\"!=typeof t){if(\"number\"!=typeof t)throw new Error(\"getTextDimensions expects text-parameter to be of type String or type Number or an Array of Strings.\");t=String(t)}var l=e.maxWidth;l>0?\"string\"==typeof t?t=this.splitTextToSize(t,l):\"[object Array]\"===Object.prototype.toString.call(t)&&(t=t.reduce(function(t,e){return t.concat(c.splitTextToSize(e,l))},[])):t=Array.isArray(t)?t:[t];for(var h=0;h<t.length;h++)o<(u=this.getStringUnitWidth(t[h],{font:n})*r)&&(o=u);return 0!==o&&(s=t.length),{w:o/=a,h:Math.max((s*r*this.getLineHeightFactor()-r*(this.getLineHeightFactor()-1))/a,0)}},e.cellAddPage=function(){i.call(this),this.addPage();var t=this.internal.__cell__.margins||r;return this.internal.__cell__.lastCell=new o(t.left,t.top,void 0,void 0),this.internal.__cell__.pages+=1,this};var s=e.cell=function(){var t;t=arguments[0]instanceof o?arguments[0]:new o(arguments[0],arguments[1],arguments[2],arguments[3],arguments[4],arguments[5],arguments[6]),i.call(this);var e=this.internal.__cell__.lastCell,a=this.internal.__cell__.padding,s=this.internal.__cell__.margins||r,u=this.internal.__cell__.tableHeaderRow,c=this.internal.__cell__.printHeaders;return void 0!==e.lineNumber&&(e.lineNumber===t.lineNumber?(t.x=(e.x||0)+(e.width||0),t.y=e.y||0):e.y+e.height+t.height+s.bottom>this.getPageHeight()?(this.cellAddPage(),t.y=s.top,c&&u&&(this.printHeaderRow(t.lineNumber,!0),t.y+=u[0].height)):t.y=e.y+e.height||t.y),void 0!==t.text[0]&&(this.rect(t.x,t.y,t.width,t.height,!0===n?\"FD\":void 0),\"right\"===t.align?this.text(t.text,t.x+t.width-a,t.y+a,{align:\"right\",baseline:\"top\"}):\"center\"===t.align?this.text(t.text,t.x+t.width/2,t.y+a,{align:\"center\",baseline:\"top\",maxWidth:t.width-a-a}):this.text(t.text,t.x+a,t.y+a,{align:\"left\",baseline:\"top\",maxWidth:t.width-a-a})),this.internal.__cell__.lastCell=t,this};e.table=function(e,n,c,l,h){if(i.call(this),!c)throw new Error(\"No data for PDF table.\");var f,d,p,g,m=[],v=[],b=[],y={},w={},N=[],L=[],x=(h=h||{}).autoSize||!1,A=!1!==h.printHeaders,S=h.css&&void 0!==h.css[\"font-size\"]?16*h.css[\"font-size\"]:h.fontSize||12,_=h.margins||Object.assign({width:this.getPageWidth()},r),P=\"number\"==typeof h.padding?h.padding:3,k=h.headerBackgroundColor||\"#c8c8c8\",F=h.headerTextColor||\"#000\";if(a.call(this),this.internal.__cell__.printHeaders=A,this.internal.__cell__.margins=_,this.internal.__cell__.table_font_size=S,this.internal.__cell__.padding=P,this.internal.__cell__.headerBackgroundColor=k,this.internal.__cell__.headerTextColor=F,this.setFontSize(S),null==l)v=m=Object.keys(c[0]),b=m.map(function(){return\"left\"});else if(Array.isArray(l)&&\"object\"===(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(l[0]))for(m=l.map(function(t){return t.name}),v=l.map(function(t){return t.prompt||t.name||\"\"}),b=l.map(function(t){return t.align||\"left\"}),f=0;f<l.length;f+=1)w[l[f].name]=.7499990551181103*l[f].width;else Array.isArray(l)&&\"string\"==typeof l[0]&&(v=m=l,b=m.map(function(){return\"left\"}));if(x||Array.isArray(l)&&\"string\"==typeof l[0])for(f=0;f<m.length;f+=1){for(y[g=m[f]]=c.map(function(t){return t[g]}),this.setFont(void 0,\"bold\"),N.push(this.getTextDimensions(v[f],{fontSize:this.internal.__cell__.table_font_size,scaleFactor:this.internal.scaleFactor}).w),d=y[g],this.setFont(void 0,\"normal\"),p=0;p<d.length;p+=1)N.push(this.getTextDimensions(d[p],{fontSize:this.internal.__cell__.table_font_size,scaleFactor:this.internal.scaleFactor}).w);w[g]=Math.max.apply(null,N)+P+P,N=[]}if(A){var I={};for(f=0;f<m.length;f+=1)I[m[f]]={},I[m[f]].text=v[f],I[m[f]].align=b[f];var C=u.call(this,I,w);L=m.map(function(t){return new o(e,n,w[t],C,I[t].text,void 0,I[t].align)}),this.setTableHeaderRow(L),this.printHeaderRow(1,!1)}var j=l.reduce(function(t,e){return t[e.name]=e.align,t},{});for(f=0;f<c.length;f+=1){\"rowStart\"in h&&h.rowStart instanceof Function&&h.rowStart({row:f,data:c[f]},this);var O=u.call(this,c[f],w);for(p=0;p<m.length;p+=1){var B=c[f][m[p]];\"cellStart\"in h&&h.cellStart instanceof Function&&h.cellStart({row:f,col:p,data:B},this),s.call(this,new o(e,n,w[m[p]],O,B,f+2,j[m[p]]))}}return this.internal.__cell__.table_x=e,this.internal.__cell__.table_y=n,this};var u=function(t,e){var r=this.internal.__cell__.padding,n=this.internal.__cell__.table_font_size,i=this.internal.scaleFactor;return Object.keys(t).map(function(n){var i=t[n];return this.splitTextToSize(i.hasOwnProperty(\"text\")?i.text:i,e[n]-r-r)},this).map(function(t){return this.getLineHeightFactor()*t.length*n/i+r+r},this).reduce(function(t,e){return Math.max(t,e)},0)};e.setTableHeaderRow=function(t){i.call(this),this.internal.__cell__.tableHeaderRow=t},e.printHeaderRow=function(t,e){if(i.call(this),!this.internal.__cell__.tableHeaderRow)throw new Error(\"Property tableHeaderRow does not exist.\");var r;if(n=!0,\"function\"==typeof this.internal.__cell__.headerFunction){var a=this.internal.__cell__.headerFunction(this,this.internal.__cell__.pages);this.internal.__cell__.lastCell=new o(a[0],a[1],a[2],a[3],void 0,-1)}this.setFont(void 0,\"bold\");for(var u=[],c=0;c<this.internal.__cell__.tableHeaderRow.length;c+=1){r=this.internal.__cell__.tableHeaderRow[c].clone(),e&&(r.y=this.internal.__cell__.margins.top||0,u.push(r)),r.lineNumber=t;var l=this.getTextColor();this.setTextColor(this.internal.__cell__.headerTextColor),this.setFillColor(this.internal.__cell__.headerBackgroundColor),s.call(this,r),this.setTextColor(l)}u.length>0&&this.setTableHeaderRow(u),this.setFont(void 0,\"normal\"),n=!1}}(E.API);var kt={italic:[\"italic\",\"oblique\",\"normal\"],oblique:[\"oblique\",\"italic\",\"normal\"],normal:[\"normal\",\"oblique\",\"italic\"]},Ft=[\"ultra-condensed\",\"extra-condensed\",\"condensed\",\"semi-condensed\",\"normal\",\"semi-expanded\",\"expanded\",\"extra-expanded\",\"ultra-expanded\"],It=Pt(Ft),Ct=[100,200,300,400,500,600,700,800,900],jt=Pt(Ct);function Ot(t){var e=t.family.replace(/\"|'/g,\"\").toLowerCase(),r=function(t){return kt[t=t||\"normal\"]?t:\"normal\"}(t.style),n=function(t){return t?\"number\"==typeof t?t>=100&&t<=900&&t%100==0?t:400:/^\\d00$/.test(t)?parseInt(t):\"bold\"===t?700:400:400}(t.weight),i=function(t){return\"number\"==typeof It[t=t||\"normal\"]?t:\"normal\"}(t.stretch);return{family:e,style:r,weight:n,stretch:i,src:t.src||[],ref:t.ref||{name:e,style:[i,r,n].join(\" \")}}}function Bt(t,e,r,n){var i;for(i=r;i>=0&&i<e.length;i+=n)if(t[e[i]])return t[e[i]];for(i=r;i>=0&&i<e.length;i-=n)if(t[e[i]])return t[e[i]]}var Mt={\"sans-serif\":\"helvetica\",fixed:\"courier\",monospace:\"courier\",terminal:\"courier\",cursive:\"times\",fantasy:\"times\",serif:\"times\"},qt={caption:\"times\",icon:\"times\",menu:\"times\",\"message-box\":\"times\",\"small-caption\":\"times\",\"status-bar\":\"times\"};function Et(t){return[t.stretch,t.style,t.weight,t.family].join(\" \")}function Rt(t){return t.trimLeft()}function Dt(t,e){for(var r=0;r<t.length;){if(t.charAt(r)===e)return[t.substring(0,r),t.substring(r+1)];r+=1}return null}function Tt(t){var e=t.match(/^(-[a-z_]|[a-z_])[a-z0-9_-]*/i);return null===e?null:[e[0],t.substring(e[0].length)]}var zt,Ut,Ht,Wt,Vt,Gt=[\"times\"];function Yt(t,r,n,i,a){var o=4,s=Kt;switch(a){case E.API.image_compression.FAST:o=1,s=Xt;break;case E.API.image_compression.MEDIUM:o=6,s=Zt;break;case E.API.image_compression.SLOW:o=9,s=$t}t=function(t,e,r,n){for(var i,a=t.length/e,o=new Uint8Array(t.length+a),s=[Jt,Xt,Kt,Zt,$t],u=0;u<a;u+=1){var c=u*e,l=t.subarray(c,c+e);if(n)o.set(n(l,r,i),c+u);else{for(var h=s.length,f=[],d=0;d<h;d+=1)f[d]=s[d](l,r,i);var p=te(f.concat());o.set(f[p],c+u)}i=l}return o}(t,r,Math.ceil(n*i/8),s);var u=(0,fflate__WEBPACK_IMPORTED_MODULE_3__.zlibSync)(t,{level:o});return E.API.__addimage__.arrayBufferToBinaryString(u)}function Jt(t){var e=Array.apply([],t);return e.unshift(0),e}function Xt(t,e){var r=t.length,n=[];n[0]=1;for(var i=0;i<r;i+=1){var a=t[i-e]||0;n[i+1]=t[i]-a+256&255}return n}function Kt(t,e,r){var n=t.length,i=[];i[0]=2;for(var a=0;a<n;a+=1){var o=r&&r[a]||0;i[a+1]=t[a]-o+256&255}return i}function Zt(t,e,r){var n=t.length,i=[];i[0]=3;for(var a=0;a<n;a+=1){var o=t[a-e]||0,s=r&&r[a]||0;i[a+1]=t[a]+256-(o+s>>>1)&255}return i}function $t(t,e,r){var n=t.length,i=[];i[0]=4;for(var a=0;a<n;a+=1){var o=Qt(t[a-e]||0,r&&r[a]||0,r&&r[a-e]||0);i[a+1]=t[a]-o+256&255}return i}function Qt(t,e,r){if(t===e&&e===r)return t;var n=Math.abs(e-r),i=Math.abs(t-r),a=Math.abs(t+e-r-r);return n<=i&&n<=a?t:i<=a?e:r}function te(t){var e=t.map(function(t){return t.reduce(function(t,e){return t+Math.abs(e)},0)});return e.indexOf(Math.min.apply(null,e))}function ee(t,e,r){var n=e*r,i=Math.floor(n/8),a=16-(n-8*i+r),o=(1<<r)-1;return ne(t,i)>>a&o}function re(t,e,r,n){var i=r*n,a=Math.floor(i/8),o=16-(i-8*a+n),s=(1<<n)-1,u=(e&s)<<o;!function(t,e,r){if(e+1<t.byteLength)t.setUint16(e,r,!1);else{var n=r>>8&255;t.setUint8(e,n)}}\n/**\n * @license\n * (c) Dean McNamee <dean@gmail.com>, 2013.\n *\n * https://github.com/deanm/omggif\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n *\n * omggif is a JavaScript implementation of a GIF 89a encoder and decoder,\n * including animation and compression. It does not rely on any specific\n * underlying system, so should run in the browser, Node, or Plask.\n */(t,a,ne(t,a)&~(s<<o)&65535|u)}function ne(t,e){return e+1<t.byteLength?t.getUint16(e,!1):t.getUint8(e)<<8}function ie(t){var e=0;if(71!==t[e++]||73!==t[e++]||70!==t[e++]||56!==t[e++]||56!=(t[e++]+1&253)||97!==t[e++])throw new Error(\"Invalid GIF 87a/89a header.\");var r=t[e++]|t[e++]<<8,n=t[e++]|t[e++]<<8,i=t[e++],a=i>>7,o=1<<1+(7&i);t[e++],t[e++];var s=null,u=null;a&&(s=e,u=o,e+=3*o);var c=!0,l=[],h=0,f=null,d=0,p=null;for(this.width=r,this.height=n;c&&e<t.length;)switch(t[e++]){case 33:switch(t[e++]){case 255:if(11!==t[e]||78==t[e+1]&&69==t[e+2]&&84==t[e+3]&&83==t[e+4]&&67==t[e+5]&&65==t[e+6]&&80==t[e+7]&&69==t[e+8]&&50==t[e+9]&&46==t[e+10]&&48==t[e+11]&&3==t[e+12]&&1==t[e+13]&&0==t[e+16])e+=14,p=t[e++]|t[e++]<<8,e++;else for(e+=12;;){if(!((P=t[e++])>=0))throw Error(\"Invalid block size\");if(0===P)break;e+=P}break;case 249:if(4!==t[e++]||0!==t[e+4])throw new Error(\"Invalid graphics extension block.\");var g=t[e++];h=t[e++]|t[e++]<<8,f=t[e++],1&g||(f=null),d=g>>2&7,e++;break;case 254:for(;;){if(!((P=t[e++])>=0))throw Error(\"Invalid block size\");if(0===P)break;e+=P}break;default:throw new Error(\"Unknown graphic control label: 0x\"+t[e-1].toString(16))}break;case 44:var m=t[e++]|t[e++]<<8,v=t[e++]|t[e++]<<8,b=t[e++]|t[e++]<<8,y=t[e++]|t[e++]<<8,w=t[e++],N=w>>6&1,L=1<<1+(7&w),x=s,A=u,S=!1;w>>7&&(S=!0,x=e,A=L,e+=3*L);var _=e;for(e++;;){var P;if(!((P=t[e++])>=0))throw Error(\"Invalid block size\");if(0===P)break;e+=P}l.push({x:m,y:v,width:b,height:y,has_local_palette:S,palette_offset:x,palette_size:A,data_offset:_,data_length:e-_,transparent_index:f,interlaced:!!N,delay:h,disposal:d});break;case 59:c=!1;break;default:throw new Error(\"Unknown gif block: 0x\"+t[e-1].toString(16))}this.numFrames=function(){return l.length},this.loopCount=function(){return p},this.frameInfo=function(t){if(t<0||t>=l.length)throw new Error(\"Frame index out of range.\");return l[t]},this.decodeAndBlitFrameBGRA=function(e,n){var i=this.frameInfo(e),a=i.width*i.height;if(a>536870912)throw new Error(\"Image dimensions exceed 512MB, which is too large.\");var o=new Uint8Array(a);ae(t,i.data_offset,o,a);var s=i.palette_offset,u=i.transparent_index;null===u&&(u=256);var c=i.width,l=r-c,h=c,f=4*(i.y*r+i.x),d=4*((i.y+i.height)*r+i.x),p=f,g=4*l;!0===i.interlaced&&(g+=4*r*7);for(var m=8,v=0,b=o.length;v<b;++v){var y=o[v];if(0===h&&(h=c,(p+=g)>=d&&(g=4*l+4*r*(m-1),p=f+(c+l)*(m<<1),m>>=1)),y===u)p+=4;else{var w=t[s+3*y],N=t[s+3*y+1],L=t[s+3*y+2];n[p++]=L,n[p++]=N,n[p++]=w,n[p++]=255}--h}},this.decodeAndBlitFrameRGBA=function(e,n){var i=this.frameInfo(e),a=i.width*i.height;if(a>536870912)throw new Error(\"Image dimensions exceed 512MB, which is too large.\");var o=new Uint8Array(a);ae(t,i.data_offset,o,a);var s=i.palette_offset,u=i.transparent_index;null===u&&(u=256);var c=i.width,l=r-c,h=c,f=4*(i.y*r+i.x),d=4*((i.y+i.height)*r+i.x),p=f,g=4*l;!0===i.interlaced&&(g+=4*r*7);for(var m=8,v=0,b=o.length;v<b;++v){var y=o[v];if(0===h&&(h=c,(p+=g)>=d&&(g=4*l+4*r*(m-1),p=f+(c+l)*(m<<1),m>>=1)),y===u)p+=4;else{var w=t[s+3*y],N=t[s+3*y+1],L=t[s+3*y+2];n[p++]=w,n[p++]=N,n[p++]=L,n[p++]=255}--h}}}function ae(t,e,r,n){for(var i=t[e++],a=1<<i,s=a+1,u=s+1,c=i+1,l=(1<<c)-1,h=0,f=0,d=0,p=t[e++],g=new Int32Array(4096),m=null;;){for(;h<16&&0!==p;)f|=t[e++]<<h,h+=8,1===p?p=t[e++]:--p;if(h<c)break;var v=f&l;if(f>>=c,h-=c,v!==a){if(v===s)break;for(var b=v<u?v:m,y=0,w=b;w>a;)w=g[w]>>8,++y;var N=w;if(d+y+(b!==v?1:0)>n)return void o.log(\"Warning, gif stream longer than expected.\");r[d++]=N;var L=d+=y;for(b!==v&&(r[d++]=N),w=b;y--;)w=g[w],r[--L]=255&w,w>>=8;null!==m&&u<4096&&(g[u++]=m<<8|N,u>=l+1&&c<12&&(++c,l=l<<1|1)),m=v}else u=s+1,l=(1<<(c=i+1))-1,m=null}return d!==n&&o.log(\"Warning, gif stream shorter than expected.\"),r}\n/**\n * @license\n Copyright (c) 2008, Adobe Systems Incorporated\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without \n modification, are permitted provided that the following conditions are\n met:\n\n * Redistributions of source code must retain the above copyright notice, \n this list of conditions and the following disclaimer.\n \n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the \n documentation and/or other materials provided with the distribution.\n \n * Neither the name of Adobe Systems Incorporated nor the names of its \n contributors may be used to endorse or promote products derived from \n this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR \n CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/function oe(t){var e,r,n,i,a,o=Math.floor,s=new Array(64),u=new Array(64),c=new Array(64),l=new Array(64),h=new Array(65535),f=new Array(65535),d=new Array(64),p=new Array(64),g=[],m=0,v=7,b=new Array(64),y=new Array(64),w=new Array(64),N=new Array(256),L=new Array(2048),x=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],A=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],S=[0,1,2,3,4,5,6,7,8,9,10,11],_=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],P=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],k=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],F=[0,1,2,3,4,5,6,7,8,9,10,11],I=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],C=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];function j(t,e){for(var r=0,n=0,i=new Array,a=1;a<=16;a++){for(var o=1;o<=t[a];o++)i[e[n]]=[],i[e[n]][0]=r,i[e[n]][1]=a,n++,r++;r*=2}return i}function O(t){for(var e=t[0],r=t[1]-1;r>=0;)e&1<<r&&(m|=1<<v),r--,--v<0&&(255==m?(B(255),B(0)):B(m),v=7,m=0)}function B(t){g.push(t)}function M(t){B(t>>8&255),B(255&t)}function q(t,e,r,n,i){for(var a,o=i[0],s=i[240],u=function(t,e){var r,n,i,a,o,s,u,c,l,h,f=0;for(l=0;l<8;++l){r=t[f],n=t[f+1],i=t[f+2],a=t[f+3],o=t[f+4],s=t[f+5],u=t[f+6];var p=r+(c=t[f+7]),g=r-c,m=n+u,v=n-u,b=i+s,y=i-s,w=a+o,N=a-o,L=p+w,x=p-w,A=m+b,S=m-b;t[f]=L+A,t[f+4]=L-A;var _=.707106781*(S+x);t[f+2]=x+_,t[f+6]=x-_;var P=.382683433*((L=N+y)-(S=v+g)),k=.5411961*L+P,F=1.306562965*S+P,I=.707106781*(A=y+v),C=g+I,j=g-I;t[f+5]=j+k,t[f+3]=j-k,t[f+1]=C+F,t[f+7]=C-F,f+=8}for(f=0,l=0;l<8;++l){r=t[f],n=t[f+8],i=t[f+16],a=t[f+24],o=t[f+32],s=t[f+40],u=t[f+48];var O=r+(c=t[f+56]),B=r-c,M=n+u,q=n-u,E=i+s,R=i-s,D=a+o,T=a-o,z=O+D,U=O-D,H=M+E,W=M-E;t[f]=z+H,t[f+32]=z-H;var V=.707106781*(W+U);t[f+16]=U+V,t[f+48]=U-V;var G=.382683433*((z=T+R)-(W=q+B)),Y=.5411961*z+G,J=1.306562965*W+G,X=.707106781*(H=R+q),K=B+X,Z=B-X;t[f+40]=Z+Y,t[f+24]=Z-Y,t[f+8]=K+J,t[f+56]=K-J,f++}for(l=0;l<64;++l)h=t[l]*e[l],d[l]=h>0?h+.5|0:h-.5|0;return d}(t,e),c=0;c<64;++c)p[x[c]]=u[c];var l=p[0]-r;r=p[0],0==l?O(n[0]):(O(n[f[a=32767+l]]),O(h[a]));for(var g=63;g>0&&0==p[g];)g--;if(0==g)return O(o),r;for(var m,v=1;v<=g;){for(var b=v;0==p[v]&&v<=g;)++v;var y=v-b;if(y>=16){m=y>>4;for(var w=1;w<=m;++w)O(s);y&=15}a=32767+p[v],O(i[(y<<4)+f[a]]),O(h[a]),v++}return 63!=g&&O(o),r}function E(t){t=Math.min(Math.max(t,1),100),a!=t&&(function(t){for(var e=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],r=0;r<64;r++){var n=o((e[r]*t+50)/100);n=Math.min(Math.max(n,1),255),s[x[r]]=n}for(var i=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],a=0;a<64;a++){var h=o((i[a]*t+50)/100);h=Math.min(Math.max(h,1),255),u[x[a]]=h}for(var f=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],d=0,p=0;p<8;p++)for(var g=0;g<8;g++)c[d]=1/(s[x[d]]*f[p]*f[g]*8),l[d]=1/(u[x[d]]*f[p]*f[g]*8),d++}(t<50?Math.floor(5e3/t):Math.floor(200-2*t)),a=t)}this.encode=function(t,a){a&&E(a),g=new Array,m=0,v=7,M(65496),M(65504),M(16),B(74),B(70),B(73),B(70),B(0),B(1),B(1),B(0),M(1),M(1),B(0),B(0),function(){M(65499),M(132),B(0);for(var t=0;t<64;t++)B(s[t]);B(1);for(var e=0;e<64;e++)B(u[e])}(),function(t,e){M(65472),M(17),B(8),M(e),M(t),B(3),B(1),B(17),B(0),B(2),B(17),B(1),B(3),B(17),B(1)}(t.width,t.height),function(){M(65476),M(418),B(0);for(var t=0;t<16;t++)B(A[t+1]);for(var e=0;e<=11;e++)B(S[e]);B(16);for(var r=0;r<16;r++)B(_[r+1]);for(var n=0;n<=161;n++)B(P[n]);B(1);for(var i=0;i<16;i++)B(k[i+1]);for(var a=0;a<=11;a++)B(F[a]);B(17);for(var o=0;o<16;o++)B(I[o+1]);for(var s=0;s<=161;s++)B(C[s])}(),M(65498),M(12),B(3),B(1),B(0),B(2),B(17),B(3),B(17),B(0),B(63),B(0);var o=0,h=0,f=0;m=0,v=7,this.encode.displayName=\"_encode_\";for(var d,p,N,x,j,R,D,T,z,U=t.data,H=t.width,W=t.height,V=4*H,G=0;G<W;){for(d=0;d<V;){for(j=V*G+d,D=-1,T=0,z=0;z<64;z++)R=j+(T=z>>3)*V+(D=4*(7&z)),G+T>=W&&(R-=V*(G+1+T-W)),d+D>=V&&(R-=d+D-V+4),p=U[R++],N=U[R++],x=U[R++],b[z]=(L[p]+L[N+256|0]+L[x+512|0]>>16)-128,y[z]=(L[p+768|0]+L[N+1024|0]+L[x+1280|0]>>16)-128,w[z]=(L[p+1280|0]+L[N+1536|0]+L[x+1792|0]>>16)-128;o=q(b,c,o,e,n),h=q(y,l,h,r,i),f=q(w,l,f,r,i),d+=32}G+=8}if(v>=0){var Y=[];Y[1]=v+1,Y[0]=(1<<v+1)-1,O(Y)}return M(65497),new Uint8Array(g)},t=t||50,function(){for(var t=String.fromCharCode,e=0;e<256;e++)N[e]=t(e)}(),e=j(A,S),r=j(k,F),n=j(_,P),i=j(I,C),function(){for(var t=1,e=2,r=1;r<=15;r++){for(var n=t;n<e;n++)f[32767+n]=r,h[32767+n]=[],h[32767+n][1]=r,h[32767+n][0]=n;for(var i=-(e-1);i<=-t;i++)f[32767+i]=r,h[32767+i]=[],h[32767+i][1]=r,h[32767+i][0]=e-1+i;t<<=1,e<<=1}}(),function(){for(var t=0;t<256;t++)L[t]=19595*t,L[t+256|0]=38470*t,L[t+512|0]=7471*t+32768,L[t+768|0]=-11059*t,L[t+1024|0]=-21709*t,L[t+1280|0]=32768*t+8421375,L[t+1536|0]=-27439*t,L[t+1792|0]=-5329*t}(),E(t)}\n/**\n * @license\n * Copyright (c) 2017 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */function se(t,e){if(this.pos=0,this.buffer=t,this.datav=new DataView(t.buffer),this.is_with_alpha=!!e,this.bottom_up=!0,this.flag=String.fromCharCode(this.buffer[0])+String.fromCharCode(this.buffer[1]),this.pos+=2,-1===[\"BM\",\"BA\",\"CI\",\"CP\",\"IC\",\"PT\"].indexOf(this.flag))throw new Error(\"Invalid BMP File\");this.parseHeader(),this.parseBGR()}function ue(t){function e(t){if(!t)throw Error(\"assert :P\")}function r(t,e,r){for(var n=0;4>n;n++)if(t[e+n]!=r.charCodeAt(n))return!0;return!1}function n(t,e,r,n,i){for(var a=0;a<i;a++)t[e+a]=r[n+a]}function i(t,e,r,n){for(var i=0;i<n;i++)t[e+i]=r}function a(t){return new Int32Array(t)}function o(t,e){for(var r=[],n=0;n<t;n++)r.push(new e);return r}function s(t,e){var r=[];return function t(r,n,i){for(var a=i[n],o=0;o<a&&(r.push(i.length>n+1?[]:new e),!(i.length<n+1));o++)t(r[o],n+1,i)}(r,0,t),r}var u=function(){var t=this;function u(t,e){for(var r=1<<e-1>>>0;t&r;)r>>>=1;return r?(t&r-1)+r:t}function c(t,r,n,i,a){e(!(i%n));do{t[r+(i-=n)]=a}while(0<i)}function l(t,r,n,i,o){if(e(2328>=o),512>=o)var s=a(512);else if(null==(s=a(o)))return 0;return function(t,r,n,i,o,s){var l,f,d=r,p=1<<n,g=a(16),m=a(16);for(e(0!=o),e(null!=i),e(null!=t),e(0<n),f=0;f<o;++f){if(15<i[f])return 0;++g[i[f]]}if(g[0]==o)return 0;for(m[1]=0,l=1;15>l;++l){if(g[l]>1<<l)return 0;m[l+1]=m[l]+g[l]}for(f=0;f<o;++f)l=i[f],0<i[f]&&(s[m[l]++]=f);if(1==m[15])return(i=new h).g=0,i.value=s[0],c(t,d,1,p,i),p;var v,b=-1,y=p-1,w=0,N=1,L=1,x=1<<n;for(f=0,l=1,o=2;l<=n;++l,o<<=1){if(N+=L<<=1,0>(L-=g[l]))return 0;for(;0<g[l];--g[l])(i=new h).g=l,i.value=s[f++],c(t,d+w,o,x,i),w=u(w,l)}for(l=n+1,o=2;15>=l;++l,o<<=1){if(N+=L<<=1,0>(L-=g[l]))return 0;for(;0<g[l];--g[l]){if(i=new h,(w&y)!=b){for(d+=x,v=1<<(b=l)-n;15>b&&!(0>=(v-=g[b]));)++b,v<<=1;p+=x=1<<(v=b-n),t[r+(b=w&y)].g=v+n,t[r+b].value=d-r-b}i.g=l-n,i.value=s[f++],c(t,d+(w>>n),o,x,i),w=u(w,l)}}return N!=2*m[15]-1?0:p}(t,r,n,i,o,s)}function h(){this.value=this.g=0}function f(){this.value=this.g=0}function d(){this.G=o(5,h),this.H=a(5),this.jc=this.Qb=this.qb=this.nd=0,this.pd=o(Er,f)}function p(t,r,n,i){e(null!=t),e(null!=r),e(2147483648>i),t.Ca=254,t.I=0,t.b=-8,t.Ka=0,t.oa=r,t.pa=n,t.Jd=r,t.Yc=n+i,t.Zc=4<=i?n+i-4+1:n,_(t)}function g(t,e){for(var r=0;0<e--;)r|=k(t,128)<<e;return r}function m(t,e){var r=g(t,e);return P(t)?-r:r}function v(t,r,n,i){var a,o=0;for(e(null!=t),e(null!=r),e(4294967288>i),t.Sb=i,t.Ra=0,t.u=0,t.h=0,4<i&&(i=4),a=0;a<i;++a)o+=r[n+a]<<8*a;t.Ra=o,t.bb=i,t.oa=r,t.pa=n}function b(t){for(;8<=t.u&&t.bb<t.Sb;)t.Ra>>>=8,t.Ra+=t.oa[t.pa+t.bb]<<Tr-8>>>0,++t.bb,t.u-=8;x(t)&&(t.h=1,t.u=0)}function y(t,r){if(e(0<=r),!t.h&&r<=Dr){var n=L(t)&Rr[r];return t.u+=r,b(t),n}return t.h=1,t.u=0}function w(){this.b=this.Ca=this.I=0,this.oa=[],this.pa=0,this.Jd=[],this.Yc=0,this.Zc=[],this.Ka=0}function N(){this.Ra=0,this.oa=[],this.h=this.u=this.bb=this.Sb=this.pa=0}function L(t){return t.Ra>>>(t.u&Tr-1)>>>0}function x(t){return e(t.bb<=t.Sb),t.h||t.bb==t.Sb&&t.u>Tr}function A(t,e){t.u=e,t.h=x(t)}function S(t){t.u>=zr&&(e(t.u>=zr),b(t))}function _(t){e(null!=t&&null!=t.oa),t.pa<t.Zc?(t.I=(t.oa[t.pa++]|t.I<<8)>>>0,t.b+=8):(e(null!=t&&null!=t.oa),t.pa<t.Yc?(t.b+=8,t.I=t.oa[t.pa++]|t.I<<8):t.Ka?t.b=0:(t.I<<=8,t.b+=8,t.Ka=1))}function P(t){return g(t,1)}function k(t,e){var r=t.Ca;0>t.b&&_(t);var n=t.b,i=r*e>>>8,a=(t.I>>>n>i)+0;for(a?(r-=i,t.I-=i+1<<n>>>0):r=i+1,n=r,i=0;256<=n;)i+=8,n>>=8;return n=7^i+Ur[n],t.b-=n,t.Ca=(r<<n)-1,a}function F(t,e,r){t[e+0]=r>>24&255,t[e+1]=r>>16&255,t[e+2]=r>>8&255,t[e+3]=255&r}function I(t,e){return t[e+0]|t[e+1]<<8}function C(t,e){return I(t,e)|t[e+2]<<16}function j(t,e){return I(t,e)|I(t,e+2)<<16}function O(t,r){var n=1<<r;return e(null!=t),e(0<r),t.X=a(n),null==t.X?0:(t.Mb=32-r,t.Xa=r,1)}function B(t,r){e(null!=t),e(null!=r),e(t.Xa==r.Xa),n(r.X,0,t.X,0,1<<r.Xa)}function M(){this.X=[],this.Xa=this.Mb=0}function q(t,r,n,i){e(null!=n),e(null!=i);var a=n[0],o=i[0];return 0==a&&(a=(t*o+r/2)/r),0==o&&(o=(r*a+t/2)/t),0>=a||0>=o?0:(n[0]=a,i[0]=o,1)}function E(t,e){return t+(1<<e)-1>>>e}function R(t,e){return((4278255360&t)+(4278255360&e)>>>0&4278255360)+((16711935&t)+(16711935&e)>>>0&16711935)>>>0}function D(e,r){t[r]=function(r,n,i,a,o,s,u){var c;for(c=0;c<o;++c){var l=t[e](s[u+c-1],i,a+c);s[u+c]=R(r[n+c],l)}}}function T(){this.ud=this.hd=this.jd=0}function z(t,e){return((4278124286&(t^e))>>>1)+(t&e)>>>0}function U(t){return 0<=t&&256>t?t:0>t?0:255<t?255:void 0}function H(t,e){return U(t+(t-e+.5>>1))}function W(t,e,r){return Math.abs(e-r)-Math.abs(t-r)}function V(t,e,r,n,i,a,o){for(n=a[o-1],r=0;r<i;++r)a[o+r]=n=R(t[e+r],n)}function G(t,e,r,n,i){var a;for(a=0;a<r;++a){var o=t[e+a],s=o>>8&255,u=16711935&(u=(u=16711935&o)+((s<<16)+s));n[i+a]=(4278255360&o)+u>>>0}}function Y(t,e){e.jd=255&t,e.hd=t>>8&255,e.ud=t>>16&255}function J(t,e,r,n,i,a){var o;for(o=0;o<n;++o){var s=e[r+o],u=s>>>8,c=s,l=255&(l=(l=s>>>16)+((t.jd<<24>>24)*(u<<24>>24)>>>5));c=255&(c=(c+=(t.hd<<24>>24)*(u<<24>>24)>>>5)+((t.ud<<24>>24)*(l<<24>>24)>>>5)),i[a+o]=(4278255360&s)+(l<<16)+c}}function X(e,r,n,i,a){t[r]=function(t,e,r,n,o,s,u,c,l){for(n=u;n<c;++n)for(u=0;u<l;++u)o[s++]=a(r[i(t[e++])])},t[e]=function(e,r,o,s,u,c,l){var h=8>>e.b,f=e.Ea,d=e.K[0],p=e.w;if(8>h)for(e=(1<<e.b)-1,p=(1<<h)-1;r<o;++r){var g,m=0;for(g=0;g<f;++g)g&e||(m=i(s[u++])),c[l++]=a(d[m&p]),m>>=h}else t[\"VP8LMapColor\"+n](s,u,d,p,c,l,r,o,f)}}function K(t,e,r,n,i){for(r=e+r;e<r;){var a=t[e++];n[i++]=a>>16&255,n[i++]=a>>8&255,n[i++]=255&a}}function Z(t,e,r,n,i){for(r=e+r;e<r;){var a=t[e++];n[i++]=a>>16&255,n[i++]=a>>8&255,n[i++]=255&a,n[i++]=a>>24&255}}function $(t,e,r,n,i){for(r=e+r;e<r;){var a=(o=t[e++])>>16&240|o>>12&15,o=240&o|o>>28&15;n[i++]=a,n[i++]=o}}function Q(t,e,r,n,i){for(r=e+r;e<r;){var a=(o=t[e++])>>16&248|o>>13&7,o=o>>5&224|o>>3&31;n[i++]=a,n[i++]=o}}function tt(t,e,r,n,i){for(r=e+r;e<r;){var a=t[e++];n[i++]=255&a,n[i++]=a>>8&255,n[i++]=a>>16&255}}function et(t,e,r,i,a,o){if(0==o)for(r=e+r;e<r;)F(i,((o=t[e++])[0]>>24|o[1]>>8&65280|o[2]<<8&16711680|o[3]<<24)>>>0),a+=32;else n(i,a,t,e,r)}function rt(e,r){t[r][0]=t[e+\"0\"],t[r][1]=t[e+\"1\"],t[r][2]=t[e+\"2\"],t[r][3]=t[e+\"3\"],t[r][4]=t[e+\"4\"],t[r][5]=t[e+\"5\"],t[r][6]=t[e+\"6\"],t[r][7]=t[e+\"7\"],t[r][8]=t[e+\"8\"],t[r][9]=t[e+\"9\"],t[r][10]=t[e+\"10\"],t[r][11]=t[e+\"11\"],t[r][12]=t[e+\"12\"],t[r][13]=t[e+\"13\"],t[r][14]=t[e+\"0\"],t[r][15]=t[e+\"0\"]}function nt(t){return t==Un||t==Hn||t==Wn||t==Vn}function it(){this.eb=[],this.size=this.A=this.fb=0}function at(){this.y=[],this.f=[],this.ea=[],this.F=[],this.Tc=this.Ed=this.Cd=this.Fd=this.lb=this.Db=this.Ab=this.fa=this.J=this.W=this.N=this.O=0}function ot(){this.Rd=this.height=this.width=this.S=0,this.f={},this.f.RGBA=new it,this.f.kb=new at,this.sd=null}function st(){this.width=[0],this.height=[0],this.Pd=[0],this.Qd=[0],this.format=[0]}function ut(){this.Id=this.fd=this.Md=this.hb=this.ib=this.da=this.bd=this.cd=this.j=this.v=this.Da=this.Sd=this.ob=0}function ct(t){return alert(\"todo:WebPSamplerProcessPlane\"),t.T}function lt(t,e){var r=t.T,i=e.ba.f.RGBA,a=i.eb,o=i.fb+t.ka*i.A,s=mi[e.ba.S],u=t.y,c=t.O,l=t.f,h=t.N,f=t.ea,d=t.W,p=e.cc,g=e.dc,m=e.Mc,v=e.Nc,b=t.ka,y=t.ka+t.T,w=t.U,N=w+1>>1;for(0==b?s(u,c,null,null,l,h,f,d,l,h,f,d,a,o,null,null,w):(s(e.ec,e.fc,u,c,p,g,m,v,l,h,f,d,a,o-i.A,a,o,w),++r);b+2<y;b+=2)p=l,g=h,m=f,v=d,h+=t.Rc,d+=t.Rc,o+=2*i.A,s(u,(c+=2*t.fa)-t.fa,u,c,p,g,m,v,l,h,f,d,a,o-i.A,a,o,w);return c+=t.fa,t.j+y<t.o?(n(e.ec,e.fc,u,c,w),n(e.cc,e.dc,l,h,N),n(e.Mc,e.Nc,f,d,N),r--):1&y||s(u,c,null,null,l,h,f,d,l,h,f,d,a,o+i.A,null,null,w),r}function ht(t,r,n){var i=t.F,a=[t.J];if(null!=i){var o=t.U,s=r.ba.S,u=s==Dn||s==Wn;r=r.ba.f.RGBA;var c=[0],l=t.ka;c[0]=t.T,t.Kb&&(0==l?--c[0]:(--l,a[0]-=t.width),t.j+t.ka+t.T==t.o&&(c[0]=t.o-t.j-l));var h=r.eb;l=r.fb+l*r.A,t=An(i,a[0],t.width,o,c,h,l+(u?0:3),r.A),e(n==c),t&&nt(s)&&Ln(h,l,u,o,c,r.A)}return 0}function ft(t){var e=t.ma,r=e.ba.S,n=11>r,i=r==qn||r==Rn||r==Dn||r==Tn||12==r||nt(r);if(e.memory=null,e.Ib=null,e.Jb=null,e.Nd=null,!Br(e.Oa,t,i?11:12))return 0;if(i&&nt(r)&&vr(),t.da)alert(\"todo:use_scaling\");else{if(n){if(e.Ib=ct,t.Kb){if(r=t.U+1>>1,e.memory=a(t.U+2*r),null==e.memory)return 0;e.ec=e.memory,e.fc=0,e.cc=e.ec,e.dc=e.fc+t.U,e.Mc=e.cc,e.Nc=e.dc+r,e.Ib=lt,vr()}}else alert(\"todo:EmitYUV\");i&&(e.Jb=ht,n&&gr())}if(n&&!Ii){for(t=0;256>t;++t)Ci[t]=89858*(t-128)+Si>>Ai,Bi[t]=-22014*(t-128)+Si,Oi[t]=-45773*(t-128),ji[t]=113618*(t-128)+Si>>Ai;for(t=_i;t<Pi;++t)e=76283*(t-16)+Si>>Ai,Mi[t-_i]=Vt(e,255),qi[t-_i]=Vt(e+8>>4,15);Ii=1}return 1}function dt(t){var r=t.ma,n=t.U,i=t.T;return e(!(1&t.ka)),0>=n||0>=i?0:(n=r.Ib(t,r),null!=r.Jb&&r.Jb(t,r,n),r.Dc+=n,1)}function pt(t){t.ma.memory=null}function gt(t,e,r,n){return 47!=y(t,8)?0:(e[0]=y(t,14)+1,r[0]=y(t,14)+1,n[0]=y(t,1),0!=y(t,3)?0:!t.h)}function mt(t,e){if(4>t)return t+1;var r=t-2>>1;return(2+(1&t)<<r)+y(e,r)+1}function vt(t,e){return 120<e?e-120:1<=(r=((r=Zn[e-1])>>4)*t+(8-(15&r)))?r:1;var r}function bt(t,e,r){var n=L(r),i=t[e+=255&n].g-8;return 0<i&&(A(r,r.u+8),n=L(r),e+=t[e].value,e+=n&(1<<i)-1),A(r,r.u+t[e].g),t[e].value}function yt(t,r,n){return n.g+=t.g,n.value+=t.value<<r>>>0,e(8>=n.g),t.g}function wt(t,r,n){var i=t.xc;return e((r=0==i?0:t.vc[t.md*(n>>i)+(r>>i)])<t.Wb),t.Ya[r]}function Nt(t,r,i,a){var o=t.ab,s=t.c*r,u=t.C;r=u+r;var c=i,l=a;for(a=t.Ta,i=t.Ua;0<o--;){var h=t.gc[o],f=u,d=r,p=c,g=l,m=(l=a,c=i,h.Ea);switch(e(f<d),e(d<=h.nc),h.hc){case 2:Vr(p,g,(d-f)*m,l,c);break;case 0:var v=f,b=d,y=l,w=c,N=(_=h).Ea;0==v&&(Hr(p,g,null,null,1,y,w),V(p,g+1,0,0,N-1,y,w+1),g+=N,w+=N,++v);for(var L=1<<_.b,x=L-1,A=E(N,_.b),S=_.K,_=_.w+(v>>_.b)*A;v<b;){var P=S,k=_,F=1;for(Wr(p,g,y,w-N,1,y,w);F<N;){var I=(F&~x)+L;I>N&&(I=N),(0,Kr[P[k++]>>8&15])(p,g+ +F,y,w+F-N,I-F,y,w+F),F=I}g+=N,w+=N,++v&x||(_+=A)}d!=h.nc&&n(l,c-m,l,c+(d-f-1)*m,m);break;case 1:for(m=p,b=g,N=(p=h.Ea)-(w=p&~(y=(g=1<<h.b)-1)),v=E(p,h.b),L=h.K,h=h.w+(f>>h.b)*v;f<d;){for(x=L,A=h,S=new T,_=b+w,P=b+p;b<_;)Y(x[A++],S),Zr(S,m,b,g,l,c),b+=g,c+=g;b<P&&(Y(x[A++],S),Zr(S,m,b,N,l,c),b+=N,c+=N),++f&y||(h+=v)}break;case 3:if(p==l&&g==c&&0<h.b){for(b=l,p=m=c+(d-f)*m-(w=(d-f)*E(h.Ea,h.b)),g=l,y=c,v=[],w=(N=w)-1;0<=w;--w)v[w]=g[y+w];for(w=N-1;0<=w;--w)b[p+w]=v[w];Gr(h,f,d,l,m,l,c)}else Gr(h,f,d,p,g,l,c)}c=a,l=i}l!=i&&n(a,i,c,l,s)}function Lt(t,r){var n=t.V,i=t.Ba+t.c*t.C,a=r-t.C;if(e(r<=t.l.o),e(16>=a),0<a){var o=t.l,s=t.Ta,u=t.Ua,c=o.width;if(Nt(t,a,n,i),a=u=[u],e((n=t.C)<(i=r)),e(o.v<o.va),i>o.o&&(i=o.o),n<o.j){var l=o.j-n;n=o.j,a[0]+=l*c}if(n>=i?n=0:(a[0]+=4*o.v,o.ka=n-o.j,o.U=o.va-o.v,o.T=i-n,n=1),n){if(u=u[0],11>(n=t.ca).S){var h=n.f.RGBA,f=(i=n.S,a=o.U,o=o.T,l=h.eb,h.A),d=o;for(h=h.fb+t.Ma*h.A;0<d--;){var p=s,g=u,m=a,v=l,b=h;switch(i){case Mn:$r(p,g,m,v,b);break;case qn:Qr(p,g,m,v,b);break;case Un:Qr(p,g,m,v,b),Ln(v,b,0,m,1,0);break;case En:rn(p,g,m,v,b);break;case Rn:et(p,g,m,v,b,1);break;case Hn:et(p,g,m,v,b,1),Ln(v,b,0,m,1,0);break;case Dn:et(p,g,m,v,b,0);break;case Wn:et(p,g,m,v,b,0),Ln(v,b,1,m,1,0);break;case Tn:tn(p,g,m,v,b);break;case Vn:tn(p,g,m,v,b),xn(v,b,m,1,0);break;case zn:en(p,g,m,v,b);break;default:e(0)}u+=c,h+=f}t.Ma+=o}else alert(\"todo:EmitRescaledRowsYUVA\");e(t.Ma<=n.height)}}t.C=r,e(t.C<=t.i)}function xt(t){var e;if(0<t.ua)return 0;for(e=0;e<t.Wb;++e){var r=t.Ya[e].G,n=t.Ya[e].H;if(0<r[1][n[1]+0].g||0<r[2][n[2]+0].g||0<r[3][n[3]+0].g)return 0}return 1}function At(t,r,n,i,a,o){if(0!=t.Z){var s=t.qd,u=t.rd;for(e(null!=gi[t.Z]);r<n;++r)gi[t.Z](s,u,i,a,i,a,o),s=i,u=a,a+=o;t.qd=s,t.rd=u}}function St(t,r){var n=t.l.ma,i=0==n.Z||1==n.Z?t.l.j:t.C;if(i=t.C<i?i:t.C,e(r<=t.l.o),r>i){var a=t.l.width,o=n.ca,s=n.tb+a*i,u=t.V,c=t.Ba+t.c*i,l=t.gc;e(1==t.ab),e(3==l[0].hc),Jr(l[0],i,r,u,c,o,s),At(n,i,r,o,s,a)}t.C=t.Ma=r}function _t(t,r,n,i,a,o,s){var u=t.$/i,c=t.$%i,l=t.m,h=t.s,f=n+t.$,d=f;a=n+i*a;var p=n+i*o,g=280+h.ua,m=t.Pb?u:16777216,v=0<h.ua?h.Wa:null,b=h.wc,y=f<p?wt(h,c,u):null;e(t.C<o),e(p<=a);var w=!1;t:for(;;){for(;w||f<p;){var N=0;if(u>=m){var _=f-n;e((m=t).Pb),m.wd=m.m,m.xd=_,0<m.s.ua&&B(m.s.Wa,m.s.vb),m=u+Qn}if(c&b||(y=wt(h,c,u)),e(null!=y),y.Qb&&(r[f]=y.qb,w=!0),!w)if(S(l),y.jc){N=l,_=r;var P=f,k=y.pd[L(N)&Er-1];e(y.jc),256>k.g?(A(N,N.u+k.g),_[P]=k.value,N=0):(A(N,N.u+k.g-256),e(256<=k.value),N=k.value),0==N&&(w=!0)}else N=bt(y.G[0],y.H[0],l);if(l.h)break;if(w||256>N){if(!w)if(y.nd)r[f]=(y.qb|N<<8)>>>0;else{if(S(l),w=bt(y.G[1],y.H[1],l),S(l),_=bt(y.G[2],y.H[2],l),P=bt(y.G[3],y.H[3],l),l.h)break;r[f]=(P<<24|w<<16|N<<8|_)>>>0}if(w=!1,++f,++c>=i&&(c=0,++u,null!=s&&u<=o&&!(u%16)&&s(t,u),null!=v))for(;d<f;)N=r[d++],v.X[(506832829*N&4294967295)>>>v.Mb]=N}else if(280>N){if(N=mt(N-256,l),_=bt(y.G[4],y.H[4],l),S(l),_=vt(i,_=mt(_,l)),l.h)break;if(f-n<_||a-f<N)break t;for(P=0;P<N;++P)r[f+P]=r[f+P-_];for(f+=N,c+=N;c>=i;)c-=i,++u,null!=s&&u<=o&&!(u%16)&&s(t,u);if(e(f<=a),c&b&&(y=wt(h,c,u)),null!=v)for(;d<f;)N=r[d++],v.X[(506832829*N&4294967295)>>>v.Mb]=N}else{if(!(N<g))break t;for(w=N-280,e(null!=v);d<f;)N=r[d++],v.X[(506832829*N&4294967295)>>>v.Mb]=N;N=f,e(!(w>>>(_=v).Xa)),r[N]=_.X[w],w=!0}w||e(l.h==x(l))}if(t.Pb&&l.h&&f<a)e(t.m.h),t.a=5,t.m=t.wd,t.$=t.xd,0<t.s.ua&&B(t.s.vb,t.s.Wa);else{if(l.h)break t;null!=s&&s(t,u>o?o:u),t.a=0,t.$=f-n}return 1}return t.a=3,0}function Pt(t){e(null!=t),t.vc=null,t.yc=null,t.Ya=null;var r=t.Wa;null!=r&&(r.X=null),t.vb=null,e(null!=t)}function kt(){var e=new ar;return null==e?null:(e.a=0,e.xb=pi,rt(\"Predictor\",\"VP8LPredictors\"),rt(\"Predictor\",\"VP8LPredictors_C\"),rt(\"PredictorAdd\",\"VP8LPredictorsAdd\"),rt(\"PredictorAdd\",\"VP8LPredictorsAdd_C\"),Vr=G,Zr=J,$r=K,Qr=Z,tn=$,en=Q,rn=tt,t.VP8LMapColor32b=Yr,t.VP8LMapColor8b=Xr,e)}function Ft(t,r,n,s,u){var c=1,f=[t],p=[r],g=s.m,m=s.s,v=null,b=0;t:for(;;){if(n)for(;c&&y(g,1);){var w=f,N=p,x=s,_=1,P=x.m,k=x.gc[x.ab],F=y(P,2);if(x.Oc&1<<F)c=0;else{switch(x.Oc|=1<<F,k.hc=F,k.Ea=w[0],k.nc=N[0],k.K=[null],++x.ab,e(4>=x.ab),F){case 0:case 1:k.b=y(P,3)+2,_=Ft(E(k.Ea,k.b),E(k.nc,k.b),0,x,k.K),k.K=k.K[0];break;case 3:var I,C=y(P,8)+1,j=16<C?0:4<C?1:2<C?2:3;if(w[0]=E(k.Ea,j),k.b=j,I=_=Ft(C,1,0,x,k.K)){var B,M=C,q=k,D=1<<(8>>q.b),T=a(D);if(null==T)I=0;else{var z=q.K[0],U=q.w;for(T[0]=q.K[0][0],B=1;B<1*M;++B)T[B]=R(z[U+B],T[B-1]);for(;B<4*D;++B)T[B]=0;q.K[0]=null,q.K[0]=T,I=1}}_=I;break;case 2:break;default:e(0)}c=_}}if(f=f[0],p=p[0],c&&y(g,1)&&!(c=1<=(b=y(g,4))&&11>=b)){s.a=3;break t}var H;if(H=c)e:{var W,V,G,Y=s,J=f,X=p,K=b,Z=n,$=Y.m,Q=Y.s,tt=[null],et=1,rt=0,nt=$n[K];r:for(;;){if(Z&&y($,1)){var it=y($,3)+2,at=E(J,it),ot=E(X,it),st=at*ot;if(!Ft(at,ot,0,Y,tt))break r;for(tt=tt[0],Q.xc=it,W=0;W<st;++W){var ut=tt[W]>>8&65535;tt[W]=ut,ut>=et&&(et=ut+1)}}if($.h)break r;for(V=0;5>V;++V){var ct=Jn[V];!V&&0<K&&(ct+=1<<K),rt<ct&&(rt=ct)}var lt=o(et*nt,h),ht=et,ft=o(ht,d);if(null==ft)var dt=null;else e(65536>=ht),dt=ft;var pt=a(rt);if(null==dt||null==pt||null==lt){Y.a=1;break r}var gt=lt;for(W=G=0;W<et;++W){var mt=dt[W],vt=mt.G,bt=mt.H,wt=0,Nt=1,Lt=0;for(V=0;5>V;++V){ct=Jn[V],vt[V]=gt,bt[V]=G,!V&&0<K&&(ct+=1<<K);n:{var xt,At=ct,St=Y,kt=pt,It=gt,Ct=G,jt=0,Ot=St.m,Bt=y(Ot,1);if(i(kt,0,0,At),Bt){var Mt=y(Ot,1)+1,qt=y(Ot,1),Et=y(Ot,0==qt?1:8);kt[Et]=1,2==Mt&&(kt[Et=y(Ot,8)]=1);var Rt=1}else{var Dt=a(19),Tt=y(Ot,4)+4;if(19<Tt){St.a=3;var zt=0;break n}for(xt=0;xt<Tt;++xt)Dt[Kn[xt]]=y(Ot,3);var Ut=void 0,Ht=void 0,Wt=St,Vt=Dt,Gt=At,Yt=kt,Jt=0,Xt=Wt.m,Kt=8,Zt=o(128,h);i:for(;l(Zt,0,7,Vt,19);){if(y(Xt,1)){var $t=2+2*y(Xt,3);if((Ut=2+y(Xt,$t))>Gt)break i}else Ut=Gt;for(Ht=0;Ht<Gt&&Ut--;){S(Xt);var Qt=Zt[0+(127&L(Xt))];A(Xt,Xt.u+Qt.g);var te=Qt.value;if(16>te)Yt[Ht++]=te,0!=te&&(Kt=te);else{var ee=16==te,re=te-16,ne=Yn[re],ie=y(Xt,Gn[re])+ne;if(Ht+ie>Gt)break i;for(var ae=ee?Kt:0;0<ie--;)Yt[Ht++]=ae}}Jt=1;break i}Jt||(Wt.a=3),Rt=Jt}(Rt=Rt&&!Ot.h)&&(jt=l(It,Ct,8,kt,At)),Rt&&0!=jt?zt=jt:(St.a=3,zt=0)}if(0==zt)break r;if(Nt&&1==Xn[V]&&(Nt=0==gt[G].g),wt+=gt[G].g,G+=zt,3>=V){var oe,se=pt[0];for(oe=1;oe<ct;++oe)pt[oe]>se&&(se=pt[oe]);Lt+=se}}if(mt.nd=Nt,mt.Qb=0,Nt&&(mt.qb=(vt[3][bt[3]+0].value<<24|vt[1][bt[1]+0].value<<16|vt[2][bt[2]+0].value)>>>0,0==wt&&256>vt[0][bt[0]+0].value&&(mt.Qb=1,mt.qb+=vt[0][bt[0]+0].value<<8)),mt.jc=!mt.Qb&&6>Lt,mt.jc){var ue,ce=mt;for(ue=0;ue<Er;++ue){var le=ue,he=ce.pd[le],fe=ce.G[0][ce.H[0]+le];256<=fe.value?(he.g=fe.g+256,he.value=fe.value):(he.g=0,he.value=0,le>>=yt(fe,8,he),le>>=yt(ce.G[1][ce.H[1]+le],16,he),le>>=yt(ce.G[2][ce.H[2]+le],0,he),yt(ce.G[3][ce.H[3]+le],24,he))}}}Q.vc=tt,Q.Wb=et,Q.Ya=dt,Q.yc=lt,H=1;break e}H=0}if(!(c=H)){s.a=3;break t}if(0<b){if(m.ua=1<<b,!O(m.Wa,b)){s.a=1,c=0;break t}}else m.ua=0;var de=s,pe=f,ge=p,me=de.s,ve=me.xc;if(de.c=pe,de.i=ge,me.md=E(pe,ve),me.wc=0==ve?-1:(1<<ve)-1,n){s.xb=di;break t}if(null==(v=a(f*p))){s.a=1,c=0;break t}c=(c=_t(s,v,0,f,p,p,null))&&!g.h;break t}return c?(null!=u?u[0]=v:(e(null==v),e(n)),s.$=0,n||Pt(m)):Pt(m),c}function It(t,r){var n=t.c*t.i,i=n+r+16*r;return e(t.c<=r),t.V=a(i),null==t.V?(t.Ta=null,t.Ua=0,t.a=1,0):(t.Ta=t.V,t.Ua=t.Ba+n+r,1)}function Ct(t,r){var n=t.C,i=r-n,a=t.V,o=t.Ba+t.c*n;for(e(r<=t.l.o);0<i;){var s=16<i?16:i,u=t.l.ma,c=t.l.width,l=c*s,h=u.ca,f=u.tb+c*n,d=t.Ta,p=t.Ua;Nt(t,s,a,o),Sn(d,p,h,f,l),At(u,n,n+s,h,f,c),i-=s,a+=s*t.c,n+=s}e(n==r),t.C=t.Ma=r}function jt(){this.ub=this.yd=this.td=this.Rb=0}function Ot(){this.Kd=this.Ld=this.Ud=this.Td=this.i=this.c=0}function Bt(){this.Fb=this.Bb=this.Cb=0,this.Zb=a(4),this.Lb=a(4)}function Mt(){this.Yb=function(){var t=[];return function t(e,r,n){for(var i=n[r],a=0;a<i&&(e.push(n.length>r+1?[]:0),!(n.length<r+1));a++)t(e[a],r+1,n)}(t,0,[3,11]),t}()}function qt(){this.jb=a(3),this.Wc=s([4,8],Mt),this.Xc=s([4,17],Mt)}function Et(){this.Pc=this.wb=this.Tb=this.zd=0,this.vd=new a(4),this.od=new a(4)}function Rt(){this.ld=this.La=this.dd=this.tc=0}function Dt(){this.Na=this.la=0}function Tt(){this.Sc=[0,0],this.Eb=[0,0],this.Qc=[0,0],this.ia=this.lc=0}function zt(){this.ad=a(384),this.Za=0,this.Ob=a(16),this.$b=this.Ad=this.ia=this.Gc=this.Hc=this.Dd=0}function Ut(){this.uc=this.M=this.Nb=0,this.wa=Array(new Rt),this.Y=0,this.ya=Array(new zt),this.aa=0,this.l=new Gt}function Ht(){this.y=a(16),this.f=a(8),this.ea=a(8)}function Wt(){this.cb=this.a=0,this.sc=\"\",this.m=new w,this.Od=new jt,this.Kc=new Ot,this.ed=new Et,this.Qa=new Bt,this.Ic=this.$c=this.Aa=0,this.D=new Ut,this.Xb=this.Va=this.Hb=this.zb=this.yb=this.Ub=this.za=0,this.Jc=o(8,w),this.ia=0,this.pb=o(4,Tt),this.Pa=new qt,this.Bd=this.kc=0,this.Ac=[],this.Bc=0,this.zc=[0,0,0,0],this.Gd=Array(new Ht),this.Hd=0,this.rb=Array(new Dt),this.sb=0,this.wa=Array(new Rt),this.Y=0,this.oc=[],this.pc=0,this.sa=[],this.ta=0,this.qa=[],this.ra=0,this.Ha=[],this.B=this.R=this.Ia=0,this.Ec=[],this.M=this.ja=this.Vb=this.Fc=0,this.ya=Array(new zt),this.L=this.aa=0,this.gd=s([4,2],Rt),this.ga=null,this.Fa=[],this.Cc=this.qc=this.P=0,this.Gb=[],this.Uc=0,this.mb=[],this.nb=0,this.rc=[],this.Ga=this.Vc=0}function Vt(t,e){return 0>t?0:t>e?e:t}function Gt(){this.T=this.U=this.ka=this.height=this.width=0,this.y=[],this.f=[],this.ea=[],this.Rc=this.fa=this.W=this.N=this.O=0,this.ma=\"void\",this.put=\"VP8IoPutHook\",this.ac=\"VP8IoSetupHook\",this.bc=\"VP8IoTeardownHook\",this.ha=this.Kb=0,this.data=[],this.hb=this.ib=this.da=this.o=this.j=this.va=this.v=this.Da=this.ob=this.w=0,this.F=[],this.J=0}function Yt(){var t=new Wt;return null!=t&&(t.a=0,t.sc=\"OK\",t.cb=0,t.Xb=0,ri||(ri=Zt)),t}function Jt(t,e,r){return 0==t.a&&(t.a=e,t.sc=r,t.cb=0),0}function Xt(t,e,r){return 3<=r&&157==t[e+0]&&1==t[e+1]&&42==t[e+2]}function Kt(t,r){if(null==t)return 0;if(t.a=0,t.sc=\"OK\",null==r)return Jt(t,2,\"null VP8Io passed to VP8GetHeaders()\");var n=r.data,a=r.w,o=r.ha;if(4>o)return Jt(t,7,\"Truncated header.\");var s=n[a+0]|n[a+1]<<8|n[a+2]<<16,u=t.Od;if(u.Rb=!(1&s),u.td=s>>1&7,u.yd=s>>4&1,u.ub=s>>5,3<u.td)return Jt(t,3,\"Incorrect keyframe parameters.\");if(!u.yd)return Jt(t,4,\"Frame not displayable.\");a+=3,o-=3;var c=t.Kc;if(u.Rb){if(7>o)return Jt(t,7,\"cannot parse picture header\");if(!Xt(n,a,o))return Jt(t,3,\"Bad code word\");c.c=16383&(n[a+4]<<8|n[a+3]),c.Td=n[a+4]>>6,c.i=16383&(n[a+6]<<8|n[a+5]),c.Ud=n[a+6]>>6,a+=7,o-=7,t.za=c.c+15>>4,t.Ub=c.i+15>>4,r.width=c.c,r.height=c.i,r.Da=0,r.j=0,r.v=0,r.va=r.width,r.o=r.height,r.da=0,r.ib=r.width,r.hb=r.height,r.U=r.width,r.T=r.height,i((s=t.Pa).jb,0,255,s.jb.length),e(null!=(s=t.Qa)),s.Cb=0,s.Bb=0,s.Fb=1,i(s.Zb,0,0,s.Zb.length),i(s.Lb,0,0,s.Lb)}if(u.ub>o)return Jt(t,7,\"bad partition length\");p(s=t.m,n,a,u.ub),a+=u.ub,o-=u.ub,u.Rb&&(c.Ld=P(s),c.Kd=P(s)),c=t.Qa;var l,h=t.Pa;if(e(null!=s),e(null!=c),c.Cb=P(s),c.Cb){if(c.Bb=P(s),P(s)){for(c.Fb=P(s),l=0;4>l;++l)c.Zb[l]=P(s)?m(s,7):0;for(l=0;4>l;++l)c.Lb[l]=P(s)?m(s,6):0}if(c.Bb)for(l=0;3>l;++l)h.jb[l]=P(s)?g(s,8):255}else c.Bb=0;if(s.Ka)return Jt(t,3,\"cannot parse segment header\");if((c=t.ed).zd=P(s),c.Tb=g(s,6),c.wb=g(s,3),c.Pc=P(s),c.Pc&&P(s)){for(h=0;4>h;++h)P(s)&&(c.vd[h]=m(s,6));for(h=0;4>h;++h)P(s)&&(c.od[h]=m(s,6))}if(t.L=0==c.Tb?0:c.zd?1:2,s.Ka)return Jt(t,3,\"cannot parse filter header\");var f=o;if(o=l=a,a=l+f,c=f,t.Xb=(1<<g(t.m,2))-1,f<3*(h=t.Xb))n=7;else{for(l+=3*h,c-=3*h,f=0;f<h;++f){var d=n[o+0]|n[o+1]<<8|n[o+2]<<16;d>c&&(d=c),p(t.Jc[+f],n,l,d),l+=d,c-=d,o+=3}p(t.Jc[+h],n,l,c),n=l<a?0:5}if(0!=n)return Jt(t,n,\"cannot parse partitions\");for(n=g(l=t.m,7),o=P(l)?m(l,4):0,a=P(l)?m(l,4):0,c=P(l)?m(l,4):0,h=P(l)?m(l,4):0,l=P(l)?m(l,4):0,f=t.Qa,d=0;4>d;++d){if(f.Cb){var v=f.Zb[d];f.Fb||(v+=n)}else{if(0<d){t.pb[d]=t.pb[0];continue}v=n}var b=t.pb[d];b.Sc[0]=ti[Vt(v+o,127)],b.Sc[1]=ei[Vt(v+0,127)],b.Eb[0]=2*ti[Vt(v+a,127)],b.Eb[1]=101581*ei[Vt(v+c,127)]>>16,8>b.Eb[1]&&(b.Eb[1]=8),b.Qc[0]=ti[Vt(v+h,117)],b.Qc[1]=ei[Vt(v+l,127)],b.lc=v+l}if(!u.Rb)return Jt(t,4,\"Not a key frame.\");for(P(s),u=t.Pa,n=0;4>n;++n){for(o=0;8>o;++o)for(a=0;3>a;++a)for(c=0;11>c;++c)h=k(s,ui[n][o][a][c])?g(s,8):oi[n][o][a][c],u.Wc[n][o].Yb[a][c]=h;for(o=0;17>o;++o)u.Xc[n][o]=u.Wc[n][ci[o]]}return t.kc=P(s),t.kc&&(t.Bd=g(s,8)),t.cb=1}function Zt(t,e,r,n,i,a,o){var s=e[i].Yb[r];for(r=0;16>i;++i){if(!k(t,s[r+0]))return i;for(;!k(t,s[r+1]);)if(s=e[++i].Yb[0],r=0,16==i)return 16;var u=e[i+1].Yb;if(k(t,s[r+2])){var c=t,l=0;if(k(c,(f=s)[(h=r)+3]))if(k(c,f[h+6])){for(s=0,h=2*(l=k(c,f[h+8]))+(f=k(c,f[h+9+l])),l=0,f=ni[h];f[s];++s)l+=l+k(c,f[s]);l+=3+(8<<h)}else k(c,f[h+7])?(l=7+2*k(c,165),l+=k(c,145)):l=5+k(c,159);else l=k(c,f[h+4])?3+k(c,f[h+5]):2;s=u[2]}else l=1,s=u[1];u=o+ii[i],0>(c=t).b&&_(c);var h,f=c.b,d=(h=c.Ca>>1)-(c.I>>f)>>31;--c.b,c.Ca+=d,c.Ca|=1,c.I-=(h+1&d)<<f,a[u]=((l^d)-d)*n[(0<i)+0]}return 16}function $t(t){var e=t.rb[t.sb-1];e.la=0,e.Na=0,i(t.zc,0,0,t.zc.length),t.ja=0}function Qt(t,e,r,n,i){i=t[e+r+32*n]+(i>>3),t[e+r+32*n]=-256&i?0>i?0:255:i}function te(t,e,r,n,i,a){Qt(t,e,0,r,n+i),Qt(t,e,1,r,n+a),Qt(t,e,2,r,n-a),Qt(t,e,3,r,n-i)}function ee(t){return(20091*t>>16)+t}function re(t,e,r,n){var i,o=0,s=a(16);for(i=0;4>i;++i){var u=t[e+0]+t[e+8],c=t[e+0]-t[e+8],l=(35468*t[e+4]>>16)-ee(t[e+12]),h=ee(t[e+4])+(35468*t[e+12]>>16);s[o+0]=u+h,s[o+1]=c+l,s[o+2]=c-l,s[o+3]=u-h,o+=4,e++}for(i=o=0;4>i;++i)u=(t=s[o+0]+4)+s[o+8],c=t-s[o+8],l=(35468*s[o+4]>>16)-ee(s[o+12]),Qt(r,n,0,0,u+(h=ee(s[o+4])+(35468*s[o+12]>>16))),Qt(r,n,1,0,c+l),Qt(r,n,2,0,c-l),Qt(r,n,3,0,u-h),o++,n+=32}function ne(t,e,r,n){var i=t[e+0]+4,a=35468*t[e+4]>>16,o=ee(t[e+4]),s=35468*t[e+1]>>16;te(r,n,0,i+o,t=ee(t[e+1]),s),te(r,n,1,i+a,t,s),te(r,n,2,i-a,t,s),te(r,n,3,i-o,t,s)}function ie(t,e,r,n,i){re(t,e,r,n),i&&re(t,e+16,r,n+4)}function ae(t,e,r,n){an(t,e+0,r,n,1),an(t,e+32,r,n+128,1)}function oe(t,e,r,n){var i;for(t=t[e+0]+4,i=0;4>i;++i)for(e=0;4>e;++e)Qt(r,n,e,i,t)}function se(t,e,r,n){t[e+0]&&un(t,e+0,r,n),t[e+16]&&un(t,e+16,r,n+4),t[e+32]&&un(t,e+32,r,n+128),t[e+48]&&un(t,e+48,r,n+128+4)}function ue(t,e,r,n){var i,o=a(16);for(i=0;4>i;++i){var s=t[e+0+i]+t[e+12+i],u=t[e+4+i]+t[e+8+i],c=t[e+4+i]-t[e+8+i],l=t[e+0+i]-t[e+12+i];o[0+i]=s+u,o[8+i]=s-u,o[4+i]=l+c,o[12+i]=l-c}for(i=0;4>i;++i)s=(t=o[0+4*i]+3)+o[3+4*i],u=o[1+4*i]+o[2+4*i],c=o[1+4*i]-o[2+4*i],l=t-o[3+4*i],r[n+0]=s+u>>3,r[n+16]=l+c>>3,r[n+32]=s-u>>3,r[n+48]=l-c>>3,n+=64}function ce(t,e,r){var n,i=e-32,a=On,o=255-t[i-1];for(n=0;n<r;++n){var s,u=a,c=o+t[e-1];for(s=0;s<r;++s)t[e+s]=u[c+t[i+s]];e+=32}}function le(t,e){ce(t,e,4)}function he(t,e){ce(t,e,8)}function fe(t,e){ce(t,e,16)}function de(t,e){var r;for(r=0;16>r;++r)n(t,e+32*r,t,e-32,16)}function pe(t,e){var r;for(r=16;0<r;--r)i(t,e,t[e-1],16),e+=32}function ge(t,e,r){var n;for(n=0;16>n;++n)i(e,r+32*n,t,16)}function me(t,e){var r,n=16;for(r=0;16>r;++r)n+=t[e-1+32*r]+t[e+r-32];ge(n>>5,t,e)}function ve(t,e){var r,n=8;for(r=0;16>r;++r)n+=t[e-1+32*r];ge(n>>4,t,e)}function be(t,e){var r,n=8;for(r=0;16>r;++r)n+=t[e+r-32];ge(n>>4,t,e)}function ye(t,e){ge(128,t,e)}function we(t,e,r){return t+2*e+r+2>>2}function Ne(t,e){var r,i=e-32;for(i=new Uint8Array([we(t[i-1],t[i+0],t[i+1]),we(t[i+0],t[i+1],t[i+2]),we(t[i+1],t[i+2],t[i+3]),we(t[i+2],t[i+3],t[i+4])]),r=0;4>r;++r)n(t,e+32*r,i,0,i.length)}function Le(t,e){var r=t[e-1],n=t[e-1+32],i=t[e-1+64],a=t[e-1+96];F(t,e+0,16843009*we(t[e-1-32],r,n)),F(t,e+32,16843009*we(r,n,i)),F(t,e+64,16843009*we(n,i,a)),F(t,e+96,16843009*we(i,a,a))}function xe(t,e){var r,n=4;for(r=0;4>r;++r)n+=t[e+r-32]+t[e-1+32*r];for(n>>=3,r=0;4>r;++r)i(t,e+32*r,n,4)}function Ae(t,e){var r=t[e-1+0],n=t[e-1+32],i=t[e-1+64],a=t[e-1-32],o=t[e+0-32],s=t[e+1-32],u=t[e+2-32],c=t[e+3-32];t[e+0+96]=we(n,i,t[e-1+96]),t[e+1+96]=t[e+0+64]=we(r,n,i),t[e+2+96]=t[e+1+64]=t[e+0+32]=we(a,r,n),t[e+3+96]=t[e+2+64]=t[e+1+32]=t[e+0+0]=we(o,a,r),t[e+3+64]=t[e+2+32]=t[e+1+0]=we(s,o,a),t[e+3+32]=t[e+2+0]=we(u,s,o),t[e+3+0]=we(c,u,s)}function Se(t,e){var r=t[e+1-32],n=t[e+2-32],i=t[e+3-32],a=t[e+4-32],o=t[e+5-32],s=t[e+6-32],u=t[e+7-32];t[e+0+0]=we(t[e+0-32],r,n),t[e+1+0]=t[e+0+32]=we(r,n,i),t[e+2+0]=t[e+1+32]=t[e+0+64]=we(n,i,a),t[e+3+0]=t[e+2+32]=t[e+1+64]=t[e+0+96]=we(i,a,o),t[e+3+32]=t[e+2+64]=t[e+1+96]=we(a,o,s),t[e+3+64]=t[e+2+96]=we(o,s,u),t[e+3+96]=we(s,u,u)}function _e(t,e){var r=t[e-1+0],n=t[e-1+32],i=t[e-1+64],a=t[e-1-32],o=t[e+0-32],s=t[e+1-32],u=t[e+2-32],c=t[e+3-32];t[e+0+0]=t[e+1+64]=a+o+1>>1,t[e+1+0]=t[e+2+64]=o+s+1>>1,t[e+2+0]=t[e+3+64]=s+u+1>>1,t[e+3+0]=u+c+1>>1,t[e+0+96]=we(i,n,r),t[e+0+64]=we(n,r,a),t[e+0+32]=t[e+1+96]=we(r,a,o),t[e+1+32]=t[e+2+96]=we(a,o,s),t[e+2+32]=t[e+3+96]=we(o,s,u),t[e+3+32]=we(s,u,c)}function Pe(t,e){var r=t[e+0-32],n=t[e+1-32],i=t[e+2-32],a=t[e+3-32],o=t[e+4-32],s=t[e+5-32],u=t[e+6-32],c=t[e+7-32];t[e+0+0]=r+n+1>>1,t[e+1+0]=t[e+0+64]=n+i+1>>1,t[e+2+0]=t[e+1+64]=i+a+1>>1,t[e+3+0]=t[e+2+64]=a+o+1>>1,t[e+0+32]=we(r,n,i),t[e+1+32]=t[e+0+96]=we(n,i,a),t[e+2+32]=t[e+1+96]=we(i,a,o),t[e+3+32]=t[e+2+96]=we(a,o,s),t[e+3+64]=we(o,s,u),t[e+3+96]=we(s,u,c)}function ke(t,e){var r=t[e-1+0],n=t[e-1+32],i=t[e-1+64],a=t[e-1+96];t[e+0+0]=r+n+1>>1,t[e+2+0]=t[e+0+32]=n+i+1>>1,t[e+2+32]=t[e+0+64]=i+a+1>>1,t[e+1+0]=we(r,n,i),t[e+3+0]=t[e+1+32]=we(n,i,a),t[e+3+32]=t[e+1+64]=we(i,a,a),t[e+3+64]=t[e+2+64]=t[e+0+96]=t[e+1+96]=t[e+2+96]=t[e+3+96]=a}function Fe(t,e){var r=t[e-1+0],n=t[e-1+32],i=t[e-1+64],a=t[e-1+96],o=t[e-1-32],s=t[e+0-32],u=t[e+1-32],c=t[e+2-32];t[e+0+0]=t[e+2+32]=r+o+1>>1,t[e+0+32]=t[e+2+64]=n+r+1>>1,t[e+0+64]=t[e+2+96]=i+n+1>>1,t[e+0+96]=a+i+1>>1,t[e+3+0]=we(s,u,c),t[e+2+0]=we(o,s,u),t[e+1+0]=t[e+3+32]=we(r,o,s),t[e+1+32]=t[e+3+64]=we(n,r,o),t[e+1+64]=t[e+3+96]=we(i,n,r),t[e+1+96]=we(a,i,n)}function Ie(t,e){var r;for(r=0;8>r;++r)n(t,e+32*r,t,e-32,8)}function Ce(t,e){var r;for(r=0;8>r;++r)i(t,e,t[e-1],8),e+=32}function je(t,e,r){var n;for(n=0;8>n;++n)i(e,r+32*n,t,8)}function Oe(t,e){var r,n=8;for(r=0;8>r;++r)n+=t[e+r-32]+t[e-1+32*r];je(n>>4,t,e)}function Be(t,e){var r,n=4;for(r=0;8>r;++r)n+=t[e+r-32];je(n>>3,t,e)}function Me(t,e){var r,n=4;for(r=0;8>r;++r)n+=t[e-1+32*r];je(n>>3,t,e)}function qe(t,e){je(128,t,e)}function Ee(t,e,r){var n=t[e-r],i=t[e+0],a=3*(i-n)+Cn[1020+t[e-2*r]-t[e+r]],o=jn[112+(a+4>>3)];t[e-r]=On[255+n+jn[112+(a+3>>3)]],t[e+0]=On[255+i-o]}function Re(t,e,r,n){var i=t[e+0],a=t[e+r];return Bn[255+t[e-2*r]-t[e-r]]>n||Bn[255+a-i]>n}function De(t,e,r,n){return 4*Bn[255+t[e-r]-t[e+0]]+Bn[255+t[e-2*r]-t[e+r]]<=n}function Te(t,e,r,n,i){var a=t[e-3*r],o=t[e-2*r],s=t[e-r],u=t[e+0],c=t[e+r],l=t[e+2*r],h=t[e+3*r];return 4*Bn[255+s-u]+Bn[255+o-c]>n?0:Bn[255+t[e-4*r]-a]<=i&&Bn[255+a-o]<=i&&Bn[255+o-s]<=i&&Bn[255+h-l]<=i&&Bn[255+l-c]<=i&&Bn[255+c-u]<=i}function ze(t,e,r,n){var i=2*n+1;for(n=0;16>n;++n)De(t,e+n,r,i)&&Ee(t,e+n,r)}function Ue(t,e,r,n){var i=2*n+1;for(n=0;16>n;++n)De(t,e+n*r,1,i)&&Ee(t,e+n*r,1)}function He(t,e,r,n){var i;for(i=3;0<i;--i)ze(t,e+=4*r,r,n)}function We(t,e,r,n){var i;for(i=3;0<i;--i)Ue(t,e+=4,r,n)}function Ve(t,e,r,n,i,a,o,s){for(a=2*a+1;0<i--;){if(Te(t,e,r,a,o))if(Re(t,e,r,s))Ee(t,e,r);else{var u=t,c=e,l=r,h=u[c-2*l],f=u[c-l],d=u[c+0],p=u[c+l],g=u[c+2*l],m=27*(b=Cn[1020+3*(d-f)+Cn[1020+h-p]])+63>>7,v=18*b+63>>7,b=9*b+63>>7;u[c-3*l]=On[255+u[c-3*l]+b],u[c-2*l]=On[255+h+v],u[c-l]=On[255+f+m],u[c+0]=On[255+d-m],u[c+l]=On[255+p-v],u[c+2*l]=On[255+g-b]}e+=n}}function Ge(t,e,r,n,i,a,o,s){for(a=2*a+1;0<i--;){if(Te(t,e,r,a,o))if(Re(t,e,r,s))Ee(t,e,r);else{var u=t,c=e,l=r,h=u[c-l],f=u[c+0],d=u[c+l],p=jn[112+(4+(g=3*(f-h))>>3)],g=jn[112+(g+3>>3)],m=p+1>>1;u[c-2*l]=On[255+u[c-2*l]+m],u[c-l]=On[255+h+g],u[c+0]=On[255+f-p],u[c+l]=On[255+d-m]}e+=n}}function Ye(t,e,r,n,i,a){Ve(t,e,r,1,16,n,i,a)}function Je(t,e,r,n,i,a){Ve(t,e,1,r,16,n,i,a)}function Xe(t,e,r,n,i,a){var o;for(o=3;0<o;--o)Ge(t,e+=4*r,r,1,16,n,i,a)}function Ke(t,e,r,n,i,a){var o;for(o=3;0<o;--o)Ge(t,e+=4,1,r,16,n,i,a)}function Ze(t,e,r,n,i,a,o,s){Ve(t,e,i,1,8,a,o,s),Ve(r,n,i,1,8,a,o,s)}function $e(t,e,r,n,i,a,o,s){Ve(t,e,1,i,8,a,o,s),Ve(r,n,1,i,8,a,o,s)}function Qe(t,e,r,n,i,a,o,s){Ge(t,e+4*i,i,1,8,a,o,s),Ge(r,n+4*i,i,1,8,a,o,s)}function tr(t,e,r,n,i,a,o,s){Ge(t,e+4,1,i,8,a,o,s),Ge(r,n+4,1,i,8,a,o,s)}function er(){this.ba=new ot,this.ec=[],this.cc=[],this.Mc=[],this.Dc=this.Nc=this.dc=this.fc=0,this.Oa=new ut,this.memory=0,this.Ib=\"OutputFunc\",this.Jb=\"OutputAlphaFunc\",this.Nd=\"OutputRowFunc\"}function rr(){this.data=[],this.offset=this.kd=this.ha=this.w=0,this.na=[],this.xa=this.gb=this.Ja=this.Sa=this.P=0}function nr(){this.nc=this.Ea=this.b=this.hc=0,this.K=[],this.w=0}function ir(){this.ua=0,this.Wa=new M,this.vb=new M,this.md=this.xc=this.wc=0,this.vc=[],this.Wb=0,this.Ya=new d,this.yc=new h}function ar(){this.xb=this.a=0,this.l=new Gt,this.ca=new ot,this.V=[],this.Ba=0,this.Ta=[],this.Ua=0,this.m=new N,this.Pb=0,this.wd=new N,this.Ma=this.$=this.C=this.i=this.c=this.xd=0,this.s=new ir,this.ab=0,this.gc=o(4,nr),this.Oc=0}function or(){this.Lc=this.Z=this.$a=this.i=this.c=0,this.l=new Gt,this.ic=0,this.ca=[],this.tb=0,this.qd=null,this.rd=0}function sr(t,e,r,n,i,a,o){for(t=null==t?0:t[e+0],e=0;e<o;++e)i[a+e]=t+r[n+e]&255,t=i[a+e]}function ur(t,e,r,n,i,a,o){var s;if(null==t)sr(null,null,r,n,i,a,o);else for(s=0;s<o;++s)i[a+s]=t[e+s]+r[n+s]&255}function cr(t,e,r,n,i,a,o){if(null==t)sr(null,null,r,n,i,a,o);else{var s,u=t[e+0],c=u,l=u;for(s=0;s<o;++s)c=l+(u=t[e+s])-c,l=r[n+s]+(-256&c?0>c?0:255:c)&255,c=u,i[a+s]=l}}function lr(t,r,i,o){var s=r.width,u=r.o;if(e(null!=t&&null!=r),0>i||0>=o||i+o>u)return null;if(!t.Cc){if(null==t.ga){var c;if(t.ga=new or,(c=null==t.ga)||(c=r.width*r.o,e(0==t.Gb.length),t.Gb=a(c),t.Uc=0,null==t.Gb?c=0:(t.mb=t.Gb,t.nb=t.Uc,t.rc=null,c=1),c=!c),!c){c=t.ga;var l=t.Fa,h=t.P,f=t.qc,d=t.mb,p=t.nb,g=h+1,m=f-1,b=c.l;if(e(null!=l&&null!=d&&null!=r),gi[0]=null,gi[1]=sr,gi[2]=ur,gi[3]=cr,c.ca=d,c.tb=p,c.c=r.width,c.i=r.height,e(0<c.c&&0<c.i),1>=f)r=0;else if(c.$a=3&l[h+0],c.Z=l[h+0]>>2&3,c.Lc=l[h+0]>>4&3,h=l[h+0]>>6&3,0>c.$a||1<c.$a||4<=c.Z||1<c.Lc||h)r=0;else if(b.put=dt,b.ac=ft,b.bc=pt,b.ma=c,b.width=r.width,b.height=r.height,b.Da=r.Da,b.v=r.v,b.va=r.va,b.j=r.j,b.o=r.o,c.$a)t:{e(1==c.$a),r=kt();e:for(;;){if(null==r){r=0;break t}if(e(null!=c),c.mc=r,r.c=c.c,r.i=c.i,r.l=c.l,r.l.ma=c,r.l.width=c.c,r.l.height=c.i,r.a=0,v(r.m,l,g,m),!Ft(c.c,c.i,1,r,null))break e;if(1==r.ab&&3==r.gc[0].hc&&xt(r.s)?(c.ic=1,l=r.c*r.i,r.Ta=null,r.Ua=0,r.V=a(l),r.Ba=0,null==r.V?(r.a=1,r=0):r=1):(c.ic=0,r=It(r,c.c)),!r)break e;r=1;break t}c.mc=null,r=0}else r=m>=c.c*c.i;c=!r}if(c)return null;1!=t.ga.Lc?t.Ga=0:o=u-i}e(null!=t.ga),e(i+o<=u);t:{if(r=(l=t.ga).c,u=l.l.o,0==l.$a){if(g=t.rc,m=t.Vc,b=t.Fa,h=t.P+1+i*r,f=t.mb,d=t.nb+i*r,e(h<=t.P+t.qc),0!=l.Z)for(e(null!=gi[l.Z]),c=0;c<o;++c)gi[l.Z](g,m,b,h,f,d,r),g=f,m=d,d+=r,h+=r;else for(c=0;c<o;++c)n(f,d,b,h,r),g=f,m=d,d+=r,h+=r;t.rc=g,t.Vc=m}else{if(e(null!=l.mc),r=i+o,e(null!=(c=l.mc)),e(r<=c.i),c.C>=r)r=1;else if(l.ic||gr(),l.ic){l=c.V,g=c.Ba,m=c.c;var y=c.i,w=(b=1,h=c.$/m,f=c.$%m,d=c.m,p=c.s,c.$),N=m*y,L=m*r,A=p.wc,_=w<L?wt(p,f,h):null;e(w<=N),e(r<=y),e(xt(p));e:for(;;){for(;!d.h&&w<L;){if(f&A||(_=wt(p,f,h)),e(null!=_),S(d),256>(y=bt(_.G[0],_.H[0],d)))l[g+w]=y,++w,++f>=m&&(f=0,++h<=r&&!(h%16)&&St(c,h));else{if(!(280>y)){b=0;break e}y=mt(y-256,d);var P,k=bt(_.G[4],_.H[4],d);if(S(d),!(w>=(k=vt(m,k=mt(k,d)))&&N-w>=y)){b=0;break e}for(P=0;P<y;++P)l[g+w+P]=l[g+w+P-k];for(w+=y,f+=y;f>=m;)f-=m,++h<=r&&!(h%16)&&St(c,h);w<L&&f&A&&(_=wt(p,f,h))}e(d.h==x(d))}St(c,h>r?r:h);break e}!b||d.h&&w<N?(b=0,c.a=d.h?5:3):c.$=w,r=b}else r=_t(c,c.V,c.Ba,c.c,c.i,r,Ct);if(!r){o=0;break t}}i+o>=u&&(t.Cc=1),o=1}if(!o)return null;if(t.Cc&&(null!=(o=t.ga)&&(o.mc=null),t.ga=null,0<t.Ga))return alert(\"todo:WebPDequantizeLevels\"),null}return t.nb+i*s}function hr(t,e,r,n,i,a){for(;0<i--;){var o,s=t,u=e+(r?1:0),c=t,l=e+(r?0:3);for(o=0;o<n;++o){var h=c[l+4*o];255!=h&&(h*=32897,s[u+4*o+0]=s[u+4*o+0]*h>>23,s[u+4*o+1]=s[u+4*o+1]*h>>23,s[u+4*o+2]=s[u+4*o+2]*h>>23)}e+=a}}function fr(t,e,r,n,i){for(;0<n--;){var a;for(a=0;a<r;++a){var o=t[e+2*a+0],s=15&(c=t[e+2*a+1]),u=4369*s,c=(240&c|c>>4)*u>>16;t[e+2*a+0]=(240&o|o>>4)*u>>16&240|(15&o|o<<4)*u>>16>>4&15,t[e+2*a+1]=240&c|s}e+=i}}function dr(t,e,r,n,i,a,o,s){var u,c,l=255;for(c=0;c<i;++c){for(u=0;u<n;++u){var h=t[e+u];a[o+4*u]=h,l&=h}e+=r,o+=s}return 255!=l}function pr(t,e,r,n,i){var a;for(a=0;a<i;++a)r[n+a]=t[e+a]>>8}function gr(){Ln=hr,xn=fr,An=dr,Sn=pr}function mr(r,n,i){t[r]=function(t,r,a,o,s,u,c,l,h,f,d,p,g,m,v,b,y){var w,N=y-1>>1,L=s[u+0]|c[l+0]<<16,x=h[f+0]|d[p+0]<<16;e(null!=t);var A=3*L+x+131074>>2;for(n(t[r+0],255&A,A>>16,g,m),null!=a&&(A=3*x+L+131074>>2,n(a[o+0],255&A,A>>16,v,b)),w=1;w<=N;++w){var S=s[u+w]|c[l+w]<<16,_=h[f+w]|d[p+w]<<16,P=L+S+x+_+524296,k=P+2*(S+x)>>3;A=k+L>>1,L=(P=P+2*(L+_)>>3)+S>>1,n(t[r+2*w-1],255&A,A>>16,g,m+(2*w-1)*i),n(t[r+2*w-0],255&L,L>>16,g,m+(2*w-0)*i),null!=a&&(A=P+x>>1,L=k+_>>1,n(a[o+2*w-1],255&A,A>>16,v,b+(2*w-1)*i),n(a[o+2*w+0],255&L,L>>16,v,b+(2*w+0)*i)),L=S,x=_}1&y||(A=3*L+x+131074>>2,n(t[r+y-1],255&A,A>>16,g,m+(y-1)*i),null!=a&&(A=3*x+L+131074>>2,n(a[o+y-1],255&A,A>>16,v,b+(y-1)*i)))}}function vr(){mi[Mn]=vi,mi[qn]=yi,mi[En]=bi,mi[Rn]=wi,mi[Dn]=Ni,mi[Tn]=Li,mi[zn]=xi,mi[Un]=yi,mi[Hn]=wi,mi[Wn]=Ni,mi[Vn]=Li}function br(t){return t&~Fi?0>t?0:255:t>>ki}function yr(t,e){return br((19077*t>>8)+(26149*e>>8)-14234)}function wr(t,e,r){return br((19077*t>>8)-(6419*e>>8)-(13320*r>>8)+8708)}function Nr(t,e){return br((19077*t>>8)+(33050*e>>8)-17685)}function Lr(t,e,r,n,i){n[i+0]=yr(t,r),n[i+1]=wr(t,e,r),n[i+2]=Nr(t,e)}function xr(t,e,r,n,i){n[i+0]=Nr(t,e),n[i+1]=wr(t,e,r),n[i+2]=yr(t,r)}function Ar(t,e,r,n,i){var a=wr(t,e,r);e=a<<3&224|Nr(t,e)>>3,n[i+0]=248&yr(t,r)|a>>5,n[i+1]=e}function Sr(t,e,r,n,i){var a=240&Nr(t,e)|15;n[i+0]=240&yr(t,r)|wr(t,e,r)>>4,n[i+1]=a}function _r(t,e,r,n,i){n[i+0]=255,Lr(t,e,r,n,i+1)}function Pr(t,e,r,n,i){xr(t,e,r,n,i),n[i+3]=255}function kr(t,e,r,n,i){Lr(t,e,r,n,i),n[i+3]=255}function Fr(e,r,n){t[e]=function(t,e,i,a,o,s,u,c,l){for(var h=c+(-2&l)*n;c!=h;)r(t[e+0],i[a+0],o[s+0],u,c),r(t[e+1],i[a+0],o[s+0],u,c+n),e+=2,++a,++s,c+=2*n;1&l&&r(t[e+0],i[a+0],o[s+0],u,c)}}function Ir(t,e,r){return 0==r?0==t?0==e?6:5:0==e?4:0:r}function Cr(t,e,r,n,i){switch(t>>>30){case 3:an(e,r,n,i,0);break;case 2:on(e,r,n,i);break;case 1:un(e,r,n,i)}}function jr(t,e){var r,a,o=e.M,s=e.Nb,u=t.oc,c=t.pc+40,l=t.oc,h=t.pc+584,f=t.oc,d=t.pc+600;for(r=0;16>r;++r)u[c+32*r-1]=129;for(r=0;8>r;++r)l[h+32*r-1]=129,f[d+32*r-1]=129;for(0<o?u[c-1-32]=l[h-1-32]=f[d-1-32]=129:(i(u,c-32-1,127,21),i(l,h-32-1,127,9),i(f,d-32-1,127,9)),a=0;a<t.za;++a){var p=e.ya[e.aa+a];if(0<a){for(r=-1;16>r;++r)n(u,c+32*r-4,u,c+32*r+12,4);for(r=-1;8>r;++r)n(l,h+32*r-4,l,h+32*r+4,4),n(f,d+32*r-4,f,d+32*r+4,4)}var g=t.Gd,m=t.Hd+a,v=p.ad,b=p.Hc;if(0<o&&(n(u,c-32,g[m].y,0,16),n(l,h-32,g[m].f,0,8),n(f,d-32,g[m].ea,0,8)),p.Za){var y=u,w=c-32+16;for(0<o&&(a>=t.za-1?i(y,w,g[m].y[15],4):n(y,w,g[m+1].y,0,4)),r=0;4>r;r++)y[w+128+r]=y[w+256+r]=y[w+384+r]=y[w+0+r];for(r=0;16>r;++r,b<<=2)y=u,w=c+Ei[r],hi[p.Ob[r]](y,w),Cr(b,v,16*+r,y,w)}else if(y=Ir(a,o,p.Ob[0]),li[y](u,c),0!=b)for(r=0;16>r;++r,b<<=2)Cr(b,v,16*+r,u,c+Ei[r]);for(r=p.Gc,y=Ir(a,o,p.Dd),fi[y](l,h),fi[y](f,d),b=v,y=l,w=h,255&(p=0|r)&&(170&p?sn(b,256,y,w):cn(b,256,y,w)),p=f,b=d,255&(r>>=8)&&(170&r?sn(v,320,p,b):cn(v,320,p,b)),o<t.Ub-1&&(n(g[m].y,0,u,c+480,16),n(g[m].f,0,l,h+224,8),n(g[m].ea,0,f,d+224,8)),r=8*s*t.B,g=t.sa,m=t.ta+16*a+16*s*t.R,v=t.qa,p=t.ra+8*a+r,b=t.Ha,y=t.Ia+8*a+r,r=0;16>r;++r)n(g,m+r*t.R,u,c+32*r,16);for(r=0;8>r;++r)n(v,p+r*t.B,l,h+32*r,8),n(b,y+r*t.B,f,d+32*r,8)}}function Or(t,n,i,a,o,s,u,c,l){var h=[0],f=[0],d=0,p=null!=l?l.kd:0,g=null!=l?l:new rr;if(null==t||12>i)return 7;g.data=t,g.w=n,g.ha=i,n=[n],i=[i],g.gb=[g.gb];t:{var m=n,b=i,y=g.gb;if(e(null!=t),e(null!=b),e(null!=y),y[0]=0,12<=b[0]&&!r(t,m[0],\"RIFF\")){if(r(t,m[0]+8,\"WEBP\")){y=3;break t}var w=j(t,m[0]+4);if(12>w||4294967286<w){y=3;break t}if(p&&w>b[0]-8){y=7;break t}y[0]=w,m[0]+=12,b[0]-=12}y=0}if(0!=y)return y;for(w=0<g.gb[0],i=i[0];;){t:{var L=t;b=n,y=i;var x=h,A=f,S=m=[0];if((k=d=[d])[0]=0,8>y[0])y=7;else{if(!r(L,b[0],\"VP8X\")){if(10!=j(L,b[0]+4)){y=3;break t}if(18>y[0]){y=7;break t}var _=j(L,b[0]+8),P=1+C(L,b[0]+12);if(2147483648<=P*(L=1+C(L,b[0]+15))){y=3;break t}null!=S&&(S[0]=_),null!=x&&(x[0]=P),null!=A&&(A[0]=L),b[0]+=18,y[0]-=18,k[0]=1}y=0}}if(d=d[0],m=m[0],0!=y)return y;if(b=!!(2&m),!w&&d)return 3;if(null!=s&&(s[0]=!!(16&m)),null!=u&&(u[0]=b),null!=c&&(c[0]=0),u=h[0],m=f[0],d&&b&&null==l){y=0;break}if(4>i){y=7;break}if(w&&d||!w&&!d&&!r(t,n[0],\"ALPH\")){i=[i],g.na=[g.na],g.P=[g.P],g.Sa=[g.Sa];t:{_=t,y=n,w=i;var k=g.gb;x=g.na,A=g.P,S=g.Sa,P=22,e(null!=_),e(null!=w),L=y[0];var F=w[0];for(e(null!=x),e(null!=S),x[0]=null,A[0]=null,S[0]=0;;){if(y[0]=L,w[0]=F,8>F){y=7;break t}var I=j(_,L+4);if(4294967286<I){y=3;break t}var O=8+I+1&-2;if(P+=O,0<k&&P>k){y=3;break t}if(!r(_,L,\"VP8 \")||!r(_,L,\"VP8L\")){y=0;break t}if(F[0]<O){y=7;break t}r(_,L,\"ALPH\")||(x[0]=_,A[0]=L+8,S[0]=I),L+=O,F-=O}}if(i=i[0],g.na=g.na[0],g.P=g.P[0],g.Sa=g.Sa[0],0!=y)break}i=[i],g.Ja=[g.Ja],g.xa=[g.xa];t:if(k=t,y=n,w=i,x=g.gb[0],A=g.Ja,S=g.xa,_=y[0],L=!r(k,_,\"VP8 \"),P=!r(k,_,\"VP8L\"),e(null!=k),e(null!=w),e(null!=A),e(null!=S),8>w[0])y=7;else{if(L||P){if(k=j(k,_+4),12<=x&&k>x-12){y=3;break t}if(p&&k>w[0]-8){y=7;break t}A[0]=k,y[0]+=8,w[0]-=8,S[0]=P}else S[0]=5<=w[0]&&47==k[_+0]&&!(k[_+4]>>5),A[0]=w[0];y=0}if(i=i[0],g.Ja=g.Ja[0],g.xa=g.xa[0],n=n[0],0!=y)break;if(4294967286<g.Ja)return 3;if(null==c||b||(c[0]=g.xa?2:1),u=[u],m=[m],g.xa){if(5>i){y=7;break}c=u,p=m,b=s,null==t||5>i?t=0:5<=i&&47==t[n+0]&&!(t[n+4]>>5)?(w=[0],k=[0],x=[0],v(A=new N,t,n,i),gt(A,w,k,x)?(null!=c&&(c[0]=w[0]),null!=p&&(p[0]=k[0]),null!=b&&(b[0]=x[0]),t=1):t=0):t=0}else{if(10>i){y=7;break}c=m,null==t||10>i||!Xt(t,n+3,i-3)?t=0:(p=t[n+0]|t[n+1]<<8|t[n+2]<<16,b=16383&(t[n+7]<<8|t[n+6]),t=16383&(t[n+9]<<8|t[n+8]),1&p||3<(p>>1&7)||!(p>>4&1)||p>>5>=g.Ja||!b||!t?t=0:(u&&(u[0]=b),c&&(c[0]=t),t=1))}if(!t)return 3;if(u=u[0],m=m[0],d&&(h[0]!=u||f[0]!=m))return 3;null!=l&&(l[0]=g,l.offset=n-l.w,e(4294967286>n-l.w),e(l.offset==l.ha-i));break}return 0==y||7==y&&d&&null==l?(null!=s&&(s[0]|=null!=g.na&&0<g.na.length),null!=a&&(a[0]=u),null!=o&&(o[0]=m),0):y}function Br(t,e,r){var n=e.width,i=e.height,a=0,o=0,s=n,u=i;if(e.Da=null!=t&&0<t.Da,e.Da&&(s=t.cd,u=t.bd,a=t.v,o=t.j,11>r||(a&=-2,o&=-2),0>a||0>o||0>=s||0>=u||a+s>n||o+u>i))return 0;if(e.v=a,e.j=o,e.va=a+s,e.o=o+u,e.U=s,e.T=u,e.da=null!=t&&0<t.da,e.da){if(!q(s,u,r=[t.ib],a=[t.hb]))return 0;e.ib=r[0],e.hb=a[0]}return e.ob=null!=t&&t.ob,e.Kb=null==t||!t.Sd,e.da&&(e.ob=e.ib<3*n/4&&e.hb<3*i/4,e.Kb=0),1}function Mr(t){if(null==t)return 2;if(11>t.S){var e=t.f.RGBA;e.fb+=(t.height-1)*e.A,e.A=-e.A}else e=t.f.kb,t=t.height,e.O+=(t-1)*e.fa,e.fa=-e.fa,e.N+=(t-1>>1)*e.Ab,e.Ab=-e.Ab,e.W+=(t-1>>1)*e.Db,e.Db=-e.Db,null!=e.F&&(e.J+=(t-1)*e.lb,e.lb=-e.lb);return 0}function qr(t,e,r,n){if(null==n||0>=t||0>=e)return 2;if(null!=r){if(r.Da){var i=r.cd,o=r.bd,s=-2&r.v,u=-2&r.j;if(0>s||0>u||0>=i||0>=o||s+i>t||u+o>e)return 2;t=i,e=o}if(r.da){if(!q(t,e,i=[r.ib],o=[r.hb]))return 2;t=i[0],e=o[0]}}n.width=t,n.height=e;t:{var c=n.width,l=n.height;if(t=n.S,0>=c||0>=l||!(t>=Mn&&13>t))t=2;else{if(0>=n.Rd&&null==n.sd){s=o=i=e=0;var h=(u=c*zi[t])*l;if(11>t||(o=(l+1)/2*(e=(c+1)/2),12==t&&(s=(i=c)*l)),null==(l=a(h+2*o+s))){t=1;break t}n.sd=l,11>t?((c=n.f.RGBA).eb=l,c.fb=0,c.A=u,c.size=h):((c=n.f.kb).y=l,c.O=0,c.fa=u,c.Fd=h,c.f=l,c.N=0+h,c.Ab=e,c.Cd=o,c.ea=l,c.W=0+h+o,c.Db=e,c.Ed=o,12==t&&(c.F=l,c.J=0+h+2*o),c.Tc=s,c.lb=i)}if(e=1,i=n.S,o=n.width,s=n.height,i>=Mn&&13>i)if(11>i)t=n.f.RGBA,e&=(u=Math.abs(t.A))*(s-1)+o<=t.size,e&=u>=o*zi[i],e&=null!=t.eb;else{t=n.f.kb,u=(o+1)/2,h=(s+1)/2,c=Math.abs(t.fa),l=Math.abs(t.Ab);var f=Math.abs(t.Db),d=Math.abs(t.lb),p=d*(s-1)+o;e&=c*(s-1)+o<=t.Fd,e&=l*(h-1)+u<=t.Cd,e=(e&=f*(h-1)+u<=t.Ed)&c>=o&l>=u&f>=u,e&=null!=t.y,e&=null!=t.f,e&=null!=t.ea,12==i&&(e&=d>=o,e&=p<=t.Tc,e&=null!=t.F)}else e=0;t=e?0:2}}return 0!=t||null!=r&&r.fd&&(t=Mr(n)),t}var Er=64,Rr=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535,131071,262143,524287,1048575,2097151,4194303,8388607,16777215],Dr=24,Tr=32,zr=8,Ur=[0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7];D(\"Predictor0\",\"PredictorAdd0\"),t.Predictor0=function(){return 4278190080},t.Predictor1=function(t){return t},t.Predictor2=function(t,e,r){return e[r+0]},t.Predictor3=function(t,e,r){return e[r+1]},t.Predictor4=function(t,e,r){return e[r-1]},t.Predictor5=function(t,e,r){return z(z(t,e[r+1]),e[r+0])},t.Predictor6=function(t,e,r){return z(t,e[r-1])},t.Predictor7=function(t,e,r){return z(t,e[r+0])},t.Predictor8=function(t,e,r){return z(e[r-1],e[r+0])},t.Predictor9=function(t,e,r){return z(e[r+0],e[r+1])},t.Predictor10=function(t,e,r){return z(z(t,e[r-1]),z(e[r+0],e[r+1]))},t.Predictor11=function(t,e,r){var n=e[r+0];return 0>=W(n>>24&255,t>>24&255,(e=e[r-1])>>24&255)+W(n>>16&255,t>>16&255,e>>16&255)+W(n>>8&255,t>>8&255,e>>8&255)+W(255&n,255&t,255&e)?n:t},t.Predictor12=function(t,e,r){var n=e[r+0];return(U((t>>24&255)+(n>>24&255)-((e=e[r-1])>>24&255))<<24|U((t>>16&255)+(n>>16&255)-(e>>16&255))<<16|U((t>>8&255)+(n>>8&255)-(e>>8&255))<<8|U((255&t)+(255&n)-(255&e)))>>>0},t.Predictor13=function(t,e,r){var n=e[r-1];return(H((t=z(t,e[r+0]))>>24&255,n>>24&255)<<24|H(t>>16&255,n>>16&255)<<16|H(t>>8&255,n>>8&255)<<8|H(255&t,255&n))>>>0};var Hr=t.PredictorAdd0;t.PredictorAdd1=V,D(\"Predictor2\",\"PredictorAdd2\"),D(\"Predictor3\",\"PredictorAdd3\"),D(\"Predictor4\",\"PredictorAdd4\"),D(\"Predictor5\",\"PredictorAdd5\"),D(\"Predictor6\",\"PredictorAdd6\"),D(\"Predictor7\",\"PredictorAdd7\"),D(\"Predictor8\",\"PredictorAdd8\"),D(\"Predictor9\",\"PredictorAdd9\"),D(\"Predictor10\",\"PredictorAdd10\"),D(\"Predictor11\",\"PredictorAdd11\"),D(\"Predictor12\",\"PredictorAdd12\"),D(\"Predictor13\",\"PredictorAdd13\");var Wr=t.PredictorAdd2;X(\"ColorIndexInverseTransform\",\"MapARGB\",\"32b\",function(t){return t>>8&255},function(t){return t}),X(\"VP8LColorIndexInverseTransformAlpha\",\"MapAlpha\",\"8b\",function(t){return t},function(t){return t>>8&255});var Vr,Gr=t.ColorIndexInverseTransform,Yr=t.MapARGB,Jr=t.VP8LColorIndexInverseTransformAlpha,Xr=t.MapAlpha,Kr=t.VP8LPredictorsAdd=[];Kr.length=16,(t.VP8LPredictors=[]).length=16,(t.VP8LPredictorsAdd_C=[]).length=16,(t.VP8LPredictors_C=[]).length=16;var Zr,$r,Qr,tn,en,rn,nn,an,on,sn,un,cn,ln,hn,fn,dn,pn,gn,mn,vn,bn,yn,wn,Nn,Ln,xn,An,Sn,_n=a(511),Pn=a(2041),kn=a(225),Fn=a(767),In=0,Cn=Pn,jn=kn,On=Fn,Bn=_n,Mn=0,qn=1,En=2,Rn=3,Dn=4,Tn=5,zn=6,Un=7,Hn=8,Wn=9,Vn=10,Gn=[2,3,7],Yn=[3,3,11],Jn=[280,256,256,256,40],Xn=[0,1,1,1,0],Kn=[17,18,0,1,2,3,4,5,16,6,7,8,9,10,11,12,13,14,15],Zn=[24,7,23,25,40,6,39,41,22,26,38,42,56,5,55,57,21,27,54,58,37,43,72,4,71,73,20,28,53,59,70,74,36,44,88,69,75,52,60,3,87,89,19,29,86,90,35,45,68,76,85,91,51,61,104,2,103,105,18,30,102,106,34,46,84,92,67,77,101,107,50,62,120,1,119,121,83,93,17,31,100,108,66,78,118,122,33,47,117,123,49,63,99,109,82,94,0,116,124,65,79,16,32,98,110,48,115,125,81,95,64,114,126,97,111,80,113,127,96,112],$n=[2954,2956,2958,2962,2970,2986,3018,3082,3212,3468,3980,5004],Qn=8,ti=[4,5,6,7,8,9,10,10,11,12,13,14,15,16,17,17,18,19,20,20,21,21,22,22,23,23,24,25,25,26,27,28,29,30,31,32,33,34,35,36,37,37,38,39,40,41,42,43,44,45,46,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,76,77,78,79,80,81,82,83,84,85,86,87,88,89,91,93,95,96,98,100,101,102,104,106,108,110,112,114,116,118,122,124,126,128,130,132,134,136,138,140,143,145,148,151,154,157],ei=[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,119,122,125,128,131,134,137,140,143,146,149,152,155,158,161,164,167,170,173,177,181,185,189,193,197,201,205,209,213,217,221,225,229,234,239,245,249,254,259,264,269,274,279,284],ri=null,ni=[[173,148,140,0],[176,155,140,135,0],[180,157,141,134,130,0],[254,254,243,230,196,177,153,140,133,130,129,0]],ii=[0,1,4,8,5,2,3,6,9,12,13,10,7,11,14,15],ai=[-0,1,-1,2,-2,3,4,6,-3,5,-4,-5,-6,7,-7,8,-8,-9],oi=[[[[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128]],[[253,136,254,255,228,219,128,128,128,128,128],[189,129,242,255,227,213,255,219,128,128,128],[106,126,227,252,214,209,255,255,128,128,128]],[[1,98,248,255,236,226,255,255,128,128,128],[181,133,238,254,221,234,255,154,128,128,128],[78,134,202,247,198,180,255,219,128,128,128]],[[1,185,249,255,243,255,128,128,128,128,128],[184,150,247,255,236,224,128,128,128,128,128],[77,110,216,255,236,230,128,128,128,128,128]],[[1,101,251,255,241,255,128,128,128,128,128],[170,139,241,252,236,209,255,255,128,128,128],[37,116,196,243,228,255,255,255,128,128,128]],[[1,204,254,255,245,255,128,128,128,128,128],[207,160,250,255,238,128,128,128,128,128,128],[102,103,231,255,211,171,128,128,128,128,128]],[[1,152,252,255,240,255,128,128,128,128,128],[177,135,243,255,234,225,128,128,128,128,128],[80,129,211,255,194,224,128,128,128,128,128]],[[1,1,255,128,128,128,128,128,128,128,128],[246,1,255,128,128,128,128,128,128,128,128],[255,128,128,128,128,128,128,128,128,128,128]]],[[[198,35,237,223,193,187,162,160,145,155,62],[131,45,198,221,172,176,220,157,252,221,1],[68,47,146,208,149,167,221,162,255,223,128]],[[1,149,241,255,221,224,255,255,128,128,128],[184,141,234,253,222,220,255,199,128,128,128],[81,99,181,242,176,190,249,202,255,255,128]],[[1,129,232,253,214,197,242,196,255,255,128],[99,121,210,250,201,198,255,202,128,128,128],[23,91,163,242,170,187,247,210,255,255,128]],[[1,200,246,255,234,255,128,128,128,128,128],[109,178,241,255,231,245,255,255,128,128,128],[44,130,201,253,205,192,255,255,128,128,128]],[[1,132,239,251,219,209,255,165,128,128,128],[94,136,225,251,218,190,255,255,128,128,128],[22,100,174,245,186,161,255,199,128,128,128]],[[1,182,249,255,232,235,128,128,128,128,128],[124,143,241,255,227,234,128,128,128,128,128],[35,77,181,251,193,211,255,205,128,128,128]],[[1,157,247,255,236,231,255,255,128,128,128],[121,141,235,255,225,227,255,255,128,128,128],[45,99,188,251,195,217,255,224,128,128,128]],[[1,1,251,255,213,255,128,128,128,128,128],[203,1,248,255,255,128,128,128,128,128,128],[137,1,177,255,224,255,128,128,128,128,128]]],[[[253,9,248,251,207,208,255,192,128,128,128],[175,13,224,243,193,185,249,198,255,255,128],[73,17,171,221,161,179,236,167,255,234,128]],[[1,95,247,253,212,183,255,255,128,128,128],[239,90,244,250,211,209,255,255,128,128,128],[155,77,195,248,188,195,255,255,128,128,128]],[[1,24,239,251,218,219,255,205,128,128,128],[201,51,219,255,196,186,128,128,128,128,128],[69,46,190,239,201,218,255,228,128,128,128]],[[1,191,251,255,255,128,128,128,128,128,128],[223,165,249,255,213,255,128,128,128,128,128],[141,124,248,255,255,128,128,128,128,128,128]],[[1,16,248,255,255,128,128,128,128,128,128],[190,36,230,255,236,255,128,128,128,128,128],[149,1,255,128,128,128,128,128,128,128,128]],[[1,226,255,128,128,128,128,128,128,128,128],[247,192,255,128,128,128,128,128,128,128,128],[240,128,255,128,128,128,128,128,128,128,128]],[[1,134,252,255,255,128,128,128,128,128,128],[213,62,250,255,255,128,128,128,128,128,128],[55,93,255,128,128,128,128,128,128,128,128]],[[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128]]],[[[202,24,213,235,186,191,220,160,240,175,255],[126,38,182,232,169,184,228,174,255,187,128],[61,46,138,219,151,178,240,170,255,216,128]],[[1,112,230,250,199,191,247,159,255,255,128],[166,109,228,252,211,215,255,174,128,128,128],[39,77,162,232,172,180,245,178,255,255,128]],[[1,52,220,246,198,199,249,220,255,255,128],[124,74,191,243,183,193,250,221,255,255,128],[24,71,130,219,154,170,243,182,255,255,128]],[[1,182,225,249,219,240,255,224,128,128,128],[149,150,226,252,216,205,255,171,128,128,128],[28,108,170,242,183,194,254,223,255,255,128]],[[1,81,230,252,204,203,255,192,128,128,128],[123,102,209,247,188,196,255,233,128,128,128],[20,95,153,243,164,173,255,203,128,128,128]],[[1,222,248,255,216,213,128,128,128,128,128],[168,175,246,252,235,205,255,255,128,128,128],[47,116,215,255,211,212,255,255,128,128,128]],[[1,121,236,253,212,214,255,255,128,128,128],[141,84,213,252,201,202,255,219,128,128,128],[42,80,160,240,162,185,255,205,128,128,128]],[[1,1,255,128,128,128,128,128,128,128,128],[244,1,255,128,128,128,128,128,128,128,128],[238,1,255,128,128,128,128,128,128,128,128]]]],si=[[[231,120,48,89,115,113,120,152,112],[152,179,64,126,170,118,46,70,95],[175,69,143,80,85,82,72,155,103],[56,58,10,171,218,189,17,13,152],[114,26,17,163,44,195,21,10,173],[121,24,80,195,26,62,44,64,85],[144,71,10,38,171,213,144,34,26],[170,46,55,19,136,160,33,206,71],[63,20,8,114,114,208,12,9,226],[81,40,11,96,182,84,29,16,36]],[[134,183,89,137,98,101,106,165,148],[72,187,100,130,157,111,32,75,80],[66,102,167,99,74,62,40,234,128],[41,53,9,178,241,141,26,8,107],[74,43,26,146,73,166,49,23,157],[65,38,105,160,51,52,31,115,128],[104,79,12,27,217,255,87,17,7],[87,68,71,44,114,51,15,186,23],[47,41,14,110,182,183,21,17,194],[66,45,25,102,197,189,23,18,22]],[[88,88,147,150,42,46,45,196,205],[43,97,183,117,85,38,35,179,61],[39,53,200,87,26,21,43,232,171],[56,34,51,104,114,102,29,93,77],[39,28,85,171,58,165,90,98,64],[34,22,116,206,23,34,43,166,73],[107,54,32,26,51,1,81,43,31],[68,25,106,22,64,171,36,225,114],[34,19,21,102,132,188,16,76,124],[62,18,78,95,85,57,50,48,51]],[[193,101,35,159,215,111,89,46,111],[60,148,31,172,219,228,21,18,111],[112,113,77,85,179,255,38,120,114],[40,42,1,196,245,209,10,25,109],[88,43,29,140,166,213,37,43,154],[61,63,30,155,67,45,68,1,209],[100,80,8,43,154,1,51,26,71],[142,78,78,16,255,128,34,197,171],[41,40,5,102,211,183,4,1,221],[51,50,17,168,209,192,23,25,82]],[[138,31,36,171,27,166,38,44,229],[67,87,58,169,82,115,26,59,179],[63,59,90,180,59,166,93,73,154],[40,40,21,116,143,209,34,39,175],[47,15,16,183,34,223,49,45,183],[46,17,33,183,6,98,15,32,183],[57,46,22,24,128,1,54,17,37],[65,32,73,115,28,128,23,128,205],[40,3,9,115,51,192,18,6,223],[87,37,9,115,59,77,64,21,47]],[[104,55,44,218,9,54,53,130,226],[64,90,70,205,40,41,23,26,57],[54,57,112,184,5,41,38,166,213],[30,34,26,133,152,116,10,32,134],[39,19,53,221,26,114,32,73,255],[31,9,65,234,2,15,1,118,73],[75,32,12,51,192,255,160,43,51],[88,31,35,67,102,85,55,186,85],[56,21,23,111,59,205,45,37,192],[55,38,70,124,73,102,1,34,98]],[[125,98,42,88,104,85,117,175,82],[95,84,53,89,128,100,113,101,45],[75,79,123,47,51,128,81,171,1],[57,17,5,71,102,57,53,41,49],[38,33,13,121,57,73,26,1,85],[41,10,67,138,77,110,90,47,114],[115,21,2,10,102,255,166,23,6],[101,29,16,10,85,128,101,196,26],[57,18,10,102,102,213,34,20,43],[117,20,15,36,163,128,68,1,26]],[[102,61,71,37,34,53,31,243,192],[69,60,71,38,73,119,28,222,37],[68,45,128,34,1,47,11,245,171],[62,17,19,70,146,85,55,62,70],[37,43,37,154,100,163,85,160,1],[63,9,92,136,28,64,32,201,85],[75,15,9,9,64,255,184,119,16],[86,6,28,5,64,255,25,248,1],[56,8,17,132,137,255,55,116,128],[58,15,20,82,135,57,26,121,40]],[[164,50,31,137,154,133,25,35,218],[51,103,44,131,131,123,31,6,158],[86,40,64,135,148,224,45,183,128],[22,26,17,131,240,154,14,1,209],[45,16,21,91,64,222,7,1,197],[56,21,39,155,60,138,23,102,213],[83,12,13,54,192,255,68,47,28],[85,26,85,85,128,128,32,146,171],[18,11,7,63,144,171,4,4,246],[35,27,10,146,174,171,12,26,128]],[[190,80,35,99,180,80,126,54,45],[85,126,47,87,176,51,41,20,32],[101,75,128,139,118,146,116,128,85],[56,41,15,176,236,85,37,9,62],[71,30,17,119,118,255,17,18,138],[101,38,60,138,55,70,43,26,142],[146,36,19,30,171,255,97,27,20],[138,45,61,62,219,1,81,188,64],[32,41,20,117,151,142,20,21,163],[112,19,12,61,195,128,48,4,24]]],ui=[[[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[176,246,255,255,255,255,255,255,255,255,255],[223,241,252,255,255,255,255,255,255,255,255],[249,253,253,255,255,255,255,255,255,255,255]],[[255,244,252,255,255,255,255,255,255,255,255],[234,254,254,255,255,255,255,255,255,255,255],[253,255,255,255,255,255,255,255,255,255,255]],[[255,246,254,255,255,255,255,255,255,255,255],[239,253,254,255,255,255,255,255,255,255,255],[254,255,254,255,255,255,255,255,255,255,255]],[[255,248,254,255,255,255,255,255,255,255,255],[251,255,254,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[251,254,254,255,255,255,255,255,255,255,255],[254,255,254,255,255,255,255,255,255,255,255]],[[255,254,253,255,254,255,255,255,255,255,255],[250,255,254,255,254,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[217,255,255,255,255,255,255,255,255,255,255],[225,252,241,253,255,255,254,255,255,255,255],[234,250,241,250,253,255,253,254,255,255,255]],[[255,254,255,255,255,255,255,255,255,255,255],[223,254,254,255,255,255,255,255,255,255,255],[238,253,254,254,255,255,255,255,255,255,255]],[[255,248,254,255,255,255,255,255,255,255,255],[249,254,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,255,255,255,255,255,255,255,255,255],[247,254,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[252,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,254,255,255,255,255,255,255,255,255],[253,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,253,255,255,255,255,255,255,255,255],[250,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[186,251,250,255,255,255,255,255,255,255,255],[234,251,244,254,255,255,255,255,255,255,255],[251,251,243,253,254,255,254,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[236,253,254,255,255,255,255,255,255,255,255],[251,253,253,254,254,255,255,255,255,255,255]],[[255,254,254,255,255,255,255,255,255,255,255],[254,254,254,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,255,255,255,255,255,255,255,255,255],[254,254,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[248,255,255,255,255,255,255,255,255,255,255],[250,254,252,254,255,255,255,255,255,255,255],[248,254,249,253,255,255,255,255,255,255,255]],[[255,253,253,255,255,255,255,255,255,255,255],[246,253,253,255,255,255,255,255,255,255,255],[252,254,251,254,254,255,255,255,255,255,255]],[[255,254,252,255,255,255,255,255,255,255,255],[248,254,253,255,255,255,255,255,255,255,255],[253,255,254,254,255,255,255,255,255,255,255]],[[255,251,254,255,255,255,255,255,255,255,255],[245,251,254,255,255,255,255,255,255,255,255],[253,253,254,255,255,255,255,255,255,255,255]],[[255,251,253,255,255,255,255,255,255,255,255],[252,253,254,255,255,255,255,255,255,255,255],[255,254,255,255,255,255,255,255,255,255,255]],[[255,252,255,255,255,255,255,255,255,255,255],[249,255,254,255,255,255,255,255,255,255,255],[255,255,254,255,255,255,255,255,255,255,255]],[[255,255,253,255,255,255,255,255,255,255,255],[250,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]]],ci=[0,1,2,3,6,4,5,6,6,6,6,6,6,6,6,7,0],li=[],hi=[],fi=[],di=1,pi=2,gi=[],mi=[];mr(\"UpsampleRgbLinePair\",Lr,3),mr(\"UpsampleBgrLinePair\",xr,3),mr(\"UpsampleRgbaLinePair\",kr,4),mr(\"UpsampleBgraLinePair\",Pr,4),mr(\"UpsampleArgbLinePair\",_r,4),mr(\"UpsampleRgba4444LinePair\",Sr,2),mr(\"UpsampleRgb565LinePair\",Ar,2);var vi=t.UpsampleRgbLinePair,bi=t.UpsampleBgrLinePair,yi=t.UpsampleRgbaLinePair,wi=t.UpsampleBgraLinePair,Ni=t.UpsampleArgbLinePair,Li=t.UpsampleRgba4444LinePair,xi=t.UpsampleRgb565LinePair,Ai=16,Si=1<<Ai-1,_i=-227,Pi=482,ki=6,Fi=(256<<ki)-1,Ii=0,Ci=a(256),ji=a(256),Oi=a(256),Bi=a(256),Mi=a(Pi-_i),qi=a(Pi-_i);Fr(\"YuvToRgbRow\",Lr,3),Fr(\"YuvToBgrRow\",xr,3),Fr(\"YuvToRgbaRow\",kr,4),Fr(\"YuvToBgraRow\",Pr,4),Fr(\"YuvToArgbRow\",_r,4),Fr(\"YuvToRgba4444Row\",Sr,2),Fr(\"YuvToRgb565Row\",Ar,2);var Ei=[0,4,8,12,128,132,136,140,256,260,264,268,384,388,392,396],Ri=[0,2,8],Di=[8,7,6,4,4,2,2,2,1,1,1,1],Ti=1;this.WebPDecodeRGBA=function(t,r,s,u,c){var l=qn,h=new er,f=new ot;h.ba=f,f.S=l,f.width=[f.width],f.height=[f.height];var d=f.width,p=f.height,g=new st;if(null==g||null==t)var m=2;else e(null!=g),m=Or(t,r,s,g.width,g.height,g.Pd,g.Qd,g.format,null);if(0!=m?d=0:(null!=d&&(d[0]=g.width[0]),null!=p&&(p[0]=g.height[0]),d=1),d){f.width=f.width[0],f.height=f.height[0],null!=u&&(u[0]=f.width),null!=c&&(c[0]=f.height);t:{if(u=new Gt,(c=new rr).data=t,c.w=r,c.ha=s,c.kd=1,r=[0],e(null!=c),(0==(t=Or(c.data,c.w,c.ha,null,null,null,r,null,c))||7==t)&&r[0]&&(t=4),0==(r=t)){if(e(null!=h),u.data=c.data,u.w=c.w+c.offset,u.ha=c.ha-c.offset,u.put=dt,u.ac=ft,u.bc=pt,u.ma=h,c.xa){if(null==(t=kt())){h=1;break t}if(function(t,r){var n=[0],i=[0],a=[0];e:for(;;){if(null==t)return 0;if(null==r)return t.a=2,0;if(t.l=r,t.a=0,v(t.m,r.data,r.w,r.ha),!gt(t.m,n,i,a)){t.a=3;break e}if(t.xb=pi,r.width=n[0],r.height=i[0],!Ft(n[0],i[0],1,t,null))break e;return 1}return e(0!=t.a),0}(t,u)){if(u=0==(r=qr(u.width,u.height,h.Oa,h.ba))){e:{u=t;r:for(;;){if(null==u){u=0;break e}if(e(null!=u.s.yc),e(null!=u.s.Ya),e(0<u.s.Wb),e(null!=(s=u.l)),e(null!=(c=s.ma)),0!=u.xb){if(u.ca=c.ba,u.tb=c.tb,e(null!=u.ca),!Br(c.Oa,s,Rn)){u.a=2;break r}if(!It(u,s.width))break r;if(s.da)break r;if((s.da||nt(u.ca.S))&&gr(),11>u.ca.S||(alert(\"todo:WebPInitConvertARGBToYUV\"),null!=u.ca.f.kb.F&&gr()),u.Pb&&0<u.s.ua&&null==u.s.vb.X&&!O(u.s.vb,u.s.Wa.Xa)){u.a=1;break r}u.xb=0}if(!_t(u,u.V,u.Ba,u.c,u.i,s.o,Lt))break r;c.Dc=u.Ma,u=1;break e}e(0!=u.a),u=0}u=!u}u&&(r=t.a)}else r=t.a}else{if(null==(t=new Yt)){h=1;break t}if(t.Fa=c.na,t.P=c.P,t.qc=c.Sa,Kt(t,u)){if(0==(r=qr(u.width,u.height,h.Oa,h.ba))){if(t.Aa=0,s=h.Oa,e(null!=(c=t)),null!=s){if(0<(d=0>(d=s.Md)?0:100<d?255:255*d/100)){for(p=g=0;4>p;++p)12>(m=c.pb[p]).lc&&(m.ia=d*Di[0>m.lc?0:m.lc]>>3),g|=m.ia;g&&(alert(\"todo:VP8InitRandom\"),c.ia=1)}c.Ga=s.Id,100<c.Ga?c.Ga=100:0>c.Ga&&(c.Ga=0)}(function(t,r){if(null==t)return 0;if(null==r)return Jt(t,2,\"NULL VP8Io parameter in VP8Decode().\");if(!t.cb&&!Kt(t,r))return 0;if(e(t.cb),null==r.ac||r.ac(r)){r.ob&&(t.L=0);var s=Ri[t.L];if(2==t.L?(t.yb=0,t.zb=0):(t.yb=r.v-s>>4,t.zb=r.j-s>>4,0>t.yb&&(t.yb=0),0>t.zb&&(t.zb=0)),t.Va=r.o+15+s>>4,t.Hb=r.va+15+s>>4,t.Hb>t.za&&(t.Hb=t.za),t.Va>t.Ub&&(t.Va=t.Ub),0<t.L){var u=t.ed;for(s=0;4>s;++s){var c;if(t.Qa.Cb){var l=t.Qa.Lb[s];t.Qa.Fb||(l+=u.Tb)}else l=u.Tb;for(c=0;1>=c;++c){var h=t.gd[s][c],f=l;if(u.Pc&&(f+=u.vd[0],c&&(f+=u.od[0])),0<(f=0>f?0:63<f?63:f)){var d=f;0<u.wb&&(d=4<u.wb?d>>2:d>>1)>9-u.wb&&(d=9-u.wb),1>d&&(d=1),h.dd=d,h.tc=2*f+d,h.ld=40<=f?2:15<=f?1:0}else h.tc=0;h.La=c}}}s=0}else Jt(t,6,\"Frame setup failed\"),s=t.a;if(s=0==s){if(s){t.$c=0,0<t.Aa||(t.Ic=Ti);e:{s=t.Ic,u=4*(d=t.za);var p=32*d,g=d+1,m=0<t.L?d*(0<t.Aa?2:1):0,v=(2==t.Aa?2:1)*d;if((h=u+832+(c=3*(16*s+Ri[t.L])/2*p)+(l=null!=t.Fa&&0<t.Fa.length?t.Kc.c*t.Kc.i:0))!=h)s=0;else{if(h>t.Vb){if(t.Vb=0,t.Ec=a(h),t.Fc=0,null==t.Ec){s=Jt(t,1,\"no memory during frame initialization.\");break e}t.Vb=h}h=t.Ec,f=t.Fc,t.Ac=h,t.Bc=f,f+=u,t.Gd=o(p,Ht),t.Hd=0,t.rb=o(g+1,Dt),t.sb=1,t.wa=m?o(m,Rt):null,t.Y=0,t.D.Nb=0,t.D.wa=t.wa,t.D.Y=t.Y,0<t.Aa&&(t.D.Y+=d),e(!0),t.oc=h,t.pc=f,f+=832,t.ya=o(v,zt),t.aa=0,t.D.ya=t.ya,t.D.aa=t.aa,2==t.Aa&&(t.D.aa+=d),t.R=16*d,t.B=8*d,d=(p=Ri[t.L])*t.R,p=p/2*t.B,t.sa=h,t.ta=f+d,t.qa=t.sa,t.ra=t.ta+16*s*t.R+p,t.Ha=t.qa,t.Ia=t.ra+8*s*t.B+p,t.$c=0,f+=c,t.mb=l?h:null,t.nb=l?f:null,e(f+l<=t.Fc+t.Vb),$t(t),i(t.Ac,t.Bc,0,u),s=1}}if(s){if(r.ka=0,r.y=t.sa,r.O=t.ta,r.f=t.qa,r.N=t.ra,r.ea=t.Ha,r.Vd=t.Ia,r.fa=t.R,r.Rc=t.B,r.F=null,r.J=0,!In){for(s=-255;255>=s;++s)_n[255+s]=0>s?-s:s;for(s=-1020;1020>=s;++s)Pn[1020+s]=-128>s?-128:127<s?127:s;for(s=-112;112>=s;++s)kn[112+s]=-16>s?-16:15<s?15:s;for(s=-255;510>=s;++s)Fn[255+s]=0>s?0:255<s?255:s;In=1}nn=ue,an=ie,sn=ae,un=oe,cn=se,on=ne,ln=Ye,hn=Je,fn=Ze,dn=$e,pn=Xe,gn=Ke,mn=Qe,vn=tr,bn=ze,yn=Ue,wn=He,Nn=We,hi[0]=xe,hi[1]=le,hi[2]=Ne,hi[3]=Le,hi[4]=Ae,hi[5]=_e,hi[6]=Se,hi[7]=Pe,hi[8]=Fe,hi[9]=ke,li[0]=me,li[1]=fe,li[2]=de,li[3]=pe,li[4]=ve,li[5]=be,li[6]=ye,fi[0]=Oe,fi[1]=he,fi[2]=Ie,fi[3]=Ce,fi[4]=Me,fi[5]=Be,fi[6]=qe,s=1}else s=0}s&&(s=function(t,r){for(t.M=0;t.M<t.Va;++t.M){var o,s=t.Jc[t.M&t.Xb],u=t.m,c=t;for(o=0;o<c.za;++o){var l=u,h=c,f=h.Ac,d=h.Bc+4*o,p=h.zc,g=h.ya[h.aa+o];if(h.Qa.Bb?g.$b=k(l,h.Pa.jb[0])?2+k(l,h.Pa.jb[2]):k(l,h.Pa.jb[1]):g.$b=0,h.kc&&(g.Ad=k(l,h.Bd)),g.Za=!k(l,145)+0,g.Za){var m=g.Ob,v=0;for(h=0;4>h;++h){var b,y=p[0+h];for(b=0;4>b;++b){y=si[f[d+b]][y];for(var w=ai[k(l,y[0])];0<w;)w=ai[2*w+k(l,y[w])];y=-w,f[d+b]=y}n(m,v,f,d,4),v+=4,p[0+h]=y}}else y=k(l,156)?k(l,128)?1:3:k(l,163)?2:0,g.Ob[0]=y,i(f,d,y,4),i(p,0,y,4);g.Dd=k(l,142)?k(l,114)?k(l,183)?1:3:2:0}if(c.m.Ka)return Jt(t,7,\"Premature end-of-partition0 encountered.\");for(;t.ja<t.za;++t.ja){if(c=s,l=(u=t).rb[u.sb-1],f=u.rb[u.sb+u.ja],o=u.ya[u.aa+u.ja],d=u.kc?o.Ad:0)l.la=f.la=0,o.Za||(l.Na=f.Na=0),o.Hc=0,o.Gc=0,o.ia=0;else{var N,L;if(l=f,f=c,d=u.Pa.Xc,p=u.ya[u.aa+u.ja],g=u.pb[p.$b],h=p.ad,m=0,v=u.rb[u.sb-1],y=b=0,i(h,m,0,384),p.Za)var x=0,A=d[3];else{w=a(16);var S=l.Na+v.Na;if(S=ri(f,d[1],S,g.Eb,0,w,0),l.Na=v.Na=(0<S)+0,1<S)nn(w,0,h,m);else{var _=w[0]+3>>3;for(w=0;256>w;w+=16)h[m+w]=_}x=1,A=d[0]}var P=15&l.la,F=15&v.la;for(w=0;4>w;++w){var I=1&F;for(_=L=0;4>_;++_)P=P>>1|(I=(S=ri(f,A,S=I+(1&P),g.Sc,x,h,m))>x)<<7,L=L<<2|(3<S?3:1<S?2:0!=h[m+0]),m+=16;P>>=4,F=F>>1|I<<7,b=(b<<8|L)>>>0}for(A=P,x=F>>4,N=0;4>N;N+=2){for(L=0,P=l.la>>4+N,F=v.la>>4+N,w=0;2>w;++w){for(I=1&F,_=0;2>_;++_)S=I+(1&P),P=P>>1|(I=0<(S=ri(f,d[2],S,g.Qc,0,h,m)))<<3,L=L<<2|(3<S?3:1<S?2:0!=h[m+0]),m+=16;P>>=2,F=F>>1|I<<5}y|=L<<4*N,A|=P<<4<<N,x|=(240&F)<<N}l.la=A,v.la=x,p.Hc=b,p.Gc=y,p.ia=43690&y?0:g.ia,d=!(b|y)}if(0<u.L&&(u.wa[u.Y+u.ja]=u.gd[o.$b][o.Za],u.wa[u.Y+u.ja].La|=!d),c.Ka)return Jt(t,7,\"Premature end-of-file encountered.\")}if($t(t),u=r,c=1,o=(s=t).D,l=0<s.L&&s.M>=s.zb&&s.M<=s.Va,0==s.Aa)e:{if(o.M=s.M,o.uc=l,jr(s,o),c=1,o=(L=s.D).Nb,l=(y=Ri[s.L])*s.R,f=y/2*s.B,w=16*o*s.R,_=8*o*s.B,d=s.sa,p=s.ta-l+w,g=s.qa,h=s.ra-f+_,m=s.Ha,v=s.Ia-f+_,F=0==(P=L.M),b=P>=s.Va-1,2==s.Aa&&jr(s,L),L.uc)for(I=(S=s).D.M,e(S.D.uc),L=S.yb;L<S.Hb;++L){x=L,A=I;var C=(j=(z=S).D).Nb;N=z.R;var j=j.wa[j.Y+x],O=z.sa,B=z.ta+16*C*N+16*x,M=j.dd,q=j.tc;if(0!=q)if(e(3<=q),1==z.L)0<x&&yn(O,B,N,q+4),j.La&&Nn(O,B,N,q),0<A&&bn(O,B,N,q+4),j.La&&wn(O,B,N,q);else{var E=z.B,R=z.qa,D=z.ra+8*C*E+8*x,T=z.Ha,z=z.Ia+8*C*E+8*x;C=j.ld,0<x&&(hn(O,B,N,q+4,M,C),dn(R,D,T,z,E,q+4,M,C)),j.La&&(gn(O,B,N,q,M,C),vn(R,D,T,z,E,q,M,C)),0<A&&(ln(O,B,N,q+4,M,C),fn(R,D,T,z,E,q+4,M,C)),j.La&&(pn(O,B,N,q,M,C),mn(R,D,T,z,E,q,M,C))}}if(s.ia&&alert(\"todo:DitherRow\"),null!=u.put){if(L=16*P,P=16*(P+1),F?(u.y=s.sa,u.O=s.ta+w,u.f=s.qa,u.N=s.ra+_,u.ea=s.Ha,u.W=s.Ia+_):(L-=y,u.y=d,u.O=p,u.f=g,u.N=h,u.ea=m,u.W=v),b||(P-=y),P>u.o&&(P=u.o),u.F=null,u.J=null,null!=s.Fa&&0<s.Fa.length&&L<P&&(u.J=lr(s,u,L,P-L),u.F=s.mb,null==u.F&&0==u.F.length)){c=Jt(s,3,\"Could not decode alpha data.\");break e}L<u.j&&(y=u.j-L,L=u.j,e(!(1&y)),u.O+=s.R*y,u.N+=s.B*(y>>1),u.W+=s.B*(y>>1),null!=u.F&&(u.J+=u.width*y)),L<P&&(u.O+=u.v,u.N+=u.v>>1,u.W+=u.v>>1,null!=u.F&&(u.J+=u.v),u.ka=L-u.j,u.U=u.va-u.v,u.T=P-L,c=u.put(u))}o+1!=s.Ic||b||(n(s.sa,s.ta-l,d,p+16*s.R,l),n(s.qa,s.ra-f,g,h+8*s.B,f),n(s.Ha,s.Ia-f,m,v+8*s.B,f))}if(!c)return Jt(t,6,\"Output aborted.\")}return 1}(t,r)),null!=r.bc&&r.bc(r),s&=1}return s?(t.cb=0,s):0})(t,u)||(r=t.a)}}else r=t.a}0==r&&null!=h.Oa&&h.Oa.fd&&(r=Mr(h.ba))}h=r}l=0!=h?null:11>l?f.f.RGBA.eb:f.f.kb.y}else l=null;return l};var zi=[3,4,3,4,4,2,2,4,4,4,2,1,1]};function c(t,e){for(var r=\"\",n=0;n<4;n++)r+=String.fromCharCode(t[e++]);return r}function l(t,e){return t[e+0]|t[e+1]<<8}function h(t,e){return(t[e+0]|t[e+1]<<8|t[e+2]<<16)>>>0}function f(t,e){return(t[e+0]|t[e+1]<<8|t[e+2]<<16|t[e+3]<<24)>>>0}new u;var d=[0],p=[0],g=[],m=new u,v=t,b=function(t,e){var r={},n=0,i=!1,a=0,o=0;if(r.frames=[],!\n/** @license\n * Copyright (c) 2017 Dominik Homberger\n Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n https://webpjs.appspot.com\n WebPRiffParser dominikhlbg@gmail.com\n */\nfunction(t,e){for(var r=0;r<4;r++)if(t[e+r]!=\"RIFF\".charCodeAt(r))return!0;return!1}(t,e)){for(f(t,e+=4),e+=8;e<t.length;){var s=c(t,e),u=f(t,e+=4);e+=4;var d=u+(1&u);switch(s){case\"VP8 \":case\"VP8L\":void 0===r.frames[n]&&(r.frames[n]={}),(m=r.frames[n]).src_off=i?o:e-8,m.src_size=a+u+8,n++,i&&(i=!1,a=0,o=0);break;case\"VP8X\":(m=r.header={}).feature_flags=t[e];var p=e+4;m.canvas_width=1+h(t,p),p+=3,m.canvas_height=1+h(t,p),p+=3;break;case\"ALPH\":i=!0,a=d+8,o=e-8;break;case\"ANIM\":(m=r.header).bgcolor=f(t,e),p=e+4,m.loop_count=l(t,p),p+=2;break;case\"ANMF\":var g,m;(m=r.frames[n]={}).offset_x=2*h(t,e),e+=3,m.offset_y=2*h(t,e),e+=3,m.width=1+h(t,e),e+=3,m.height=1+h(t,e),e+=3,m.duration=h(t,e),e+=3,g=t[e++],m.dispose=1&g,m.blend=g>>1&1}\"ANMF\"!=s&&(e+=d)}return r}}(v,0);b.response=v,b.rgbaoutput=!0,b.dataurl=!1;var y=b.header?b.header:null,w=b.frames?b.frames:null;if(y){y.loop_counter=y.loop_count,d=[y.canvas_height],p=[y.canvas_width];for(var N=0;N<w.length&&0!=w[N].blend;N++);}var L=w[0],x=m.WebPDecodeRGBA(v,L.src_off,L.src_size,p,d);L.rgba=x,L.imgwidth=p[0],L.imgheight=d[0];for(var A=0;A<p[0]*d[0]*4;A++)g[A]=x[A];return this.width=p,this.height=d,this.data=g,this}\n/** ====================================================================\n * @license\n * jsPDF XMP metadata plugin\n * Copyright (c) 2016 Jussi Utunen, u-jussi@suomi24.fi\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n * ====================================================================\n */\nfunction ce(){var t,e=this.internal.__metadata__.metadata,r=unescape(encodeURIComponent(e));t=this.internal.__metadata__.rawXml?r:'<x:xmpmeta xmlns:x=\"adobe:ns:meta/\"><rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"><rdf:Description rdf:about=\"\" xmlns:jspdf=\"'+this.internal.__metadata__.namespaceUri+'\"><jspdf:metadata>'+r.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&apos;\")+\"</jspdf:metadata></rdf:Description></rdf:RDF></x:xmpmeta>\",this.internal.__metadata__.metadataObjectNumber=this.internal.newObject(),this.internal.write(\"<< /Type /Metadata /Subtype /XML /Length \"+t.length+\" >>\"),this.internal.write(\"stream\"),this.internal.write(t),this.internal.write(\"endstream\"),this.internal.write(\"endobj\")}function le(){this.internal.__metadata__.metadataObjectNumber&&this.internal.write(\"/Metadata \"+this.internal.__metadata__.metadataObjectNumber+\" 0 R\")}!function(e){var r,n,i,a,s,u,c,l,f,d=function(t){return t=t||{},this.isStrokeTransparent=t.isStrokeTransparent||!1,this.strokeOpacity=t.strokeOpacity||1,this.strokeStyle=t.strokeStyle||\"#000000\",this.fillStyle=t.fillStyle||\"#000000\",this.isFillTransparent=t.isFillTransparent||!1,this.fillOpacity=t.fillOpacity||1,this.font=t.font||\"10px sans-serif\",this.textBaseline=t.textBaseline||\"alphabetic\",this.textAlign=t.textAlign||\"left\",this.lineWidth=t.lineWidth||1,this.lineJoin=t.lineJoin||\"miter\",this.lineCap=t.lineCap||\"butt\",this.path=t.path||[],this.transform=void 0!==t.transform?t.transform.clone():new l,this.globalCompositeOperation=t.globalCompositeOperation||\"normal\",this.globalAlpha=t.globalAlpha||1,this.clip_path=t.clip_path||[],this.currentPoint=t.currentPoint||new u,this.miterLimit=t.miterLimit||10,this.lastPoint=t.lastPoint||new u,this.lineDashOffset=t.lineDashOffset||0,this.lineDash=t.lineDash||[],this.margin=t.margin||[0,0,0,0],this.prevPageLastElemOffset=t.prevPageLastElemOffset||0,this.ignoreClearRect=\"boolean\"!=typeof t.ignoreClearRect||t.ignoreClearRect,this};e.events.push([\"initialized\",function(){this.context2d=new p(this),r=this.internal.f2,n=this.internal.getCoordinateString,i=this.internal.getVerticalCoordinateString,a=this.internal.getHorizontalCoordinate,s=this.internal.getVerticalCoordinate,u=this.internal.Point,c=this.internal.Rectangle,l=this.internal.Matrix,f=new d}]);var p=function(t){Object.defineProperty(this,\"canvas\",{get:function(){return{parentNode:!1,style:!1}}});var e=t;Object.defineProperty(this,\"pdf\",{get:function(){return e}});var r=!1;Object.defineProperty(this,\"pageWrapXEnabled\",{get:function(){return r},set:function(t){r=Boolean(t)}});var n=!1;Object.defineProperty(this,\"pageWrapYEnabled\",{get:function(){return n},set:function(t){n=Boolean(t)}});var i=0;Object.defineProperty(this,\"posX\",{get:function(){return i},set:function(t){isNaN(t)||(i=t)}});var a=0;Object.defineProperty(this,\"posY\",{get:function(){return a},set:function(t){isNaN(t)||(a=t)}}),Object.defineProperty(this,\"margin\",{get:function(){return f.margin},set:function(t){var e;\"number\"==typeof t?e=[t,t,t,t]:((e=new Array(4))[0]=t[0],e[1]=t.length>=2?t[1]:e[0],e[2]=t.length>=3?t[2]:e[0],e[3]=t.length>=4?t[3]:e[1]),f.margin=e}});var o=!1;Object.defineProperty(this,\"autoPaging\",{get:function(){return o},set:function(t){o=t}});var s=0;Object.defineProperty(this,\"lastBreak\",{get:function(){return s},set:function(t){s=t}});var u=[];Object.defineProperty(this,\"pageBreaks\",{get:function(){return u},set:function(t){u=t}}),Object.defineProperty(this,\"ctx\",{get:function(){return f},set:function(t){t instanceof d&&(f=t)}}),Object.defineProperty(this,\"path\",{get:function(){return f.path},set:function(t){f.path=t}});var c=[];Object.defineProperty(this,\"ctxStack\",{get:function(){return c},set:function(t){c=t}}),Object.defineProperty(this,\"fillStyle\",{get:function(){return this.ctx.fillStyle},set:function(t){var e;e=g(t),this.ctx.fillStyle=e.style,this.ctx.isFillTransparent=0===e.a,this.ctx.fillOpacity=e.a,this.pdf.setFillColor(e.r,e.g,e.b,{a:e.a}),this.pdf.setTextColor(e.r,e.g,e.b,{a:e.a})}}),Object.defineProperty(this,\"strokeStyle\",{get:function(){return this.ctx.strokeStyle},set:function(t){var e=g(t);this.ctx.strokeStyle=e.style,this.ctx.isStrokeTransparent=0===e.a,this.ctx.strokeOpacity=e.a,0===e.a?this.pdf.setDrawColor(255,255,255):(e.a,this.pdf.setDrawColor(e.r,e.g,e.b))}}),Object.defineProperty(this,\"lineCap\",{get:function(){return this.ctx.lineCap},set:function(t){-1!==[\"butt\",\"round\",\"square\"].indexOf(t)&&(this.ctx.lineCap=t,this.pdf.setLineCap(t))}}),Object.defineProperty(this,\"lineWidth\",{get:function(){return this.ctx.lineWidth},set:function(t){isNaN(t)||(this.ctx.lineWidth=t,this.pdf.setLineWidth(t))}}),Object.defineProperty(this,\"lineJoin\",{get:function(){return this.ctx.lineJoin},set:function(t){-1!==[\"bevel\",\"round\",\"miter\"].indexOf(t)&&(this.ctx.lineJoin=t,this.pdf.setLineJoin(t))}}),Object.defineProperty(this,\"miterLimit\",{get:function(){return this.ctx.miterLimit},set:function(t){isNaN(t)||(this.ctx.miterLimit=t,this.pdf.setMiterLimit(t))}}),Object.defineProperty(this,\"textBaseline\",{get:function(){return this.ctx.textBaseline},set:function(t){this.ctx.textBaseline=t}}),Object.defineProperty(this,\"textAlign\",{get:function(){return this.ctx.textAlign},set:function(t){-1!==[\"right\",\"end\",\"center\",\"left\",\"start\"].indexOf(t)&&(this.ctx.textAlign=t)}});var l=null,h=null;var p=null;Object.defineProperty(this,\"fontFaces\",{get:function(){return p},set:function(t){l=null,h=null,p=t}}),Object.defineProperty(this,\"font\",{get:function(){return this.ctx.font},set:function(t){var e;if(this.ctx.font=t,null!==(e=/^\\s*(?=(?:(?:[-a-z]+\\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\\1|\\2|\\3)\\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx]))(?:\\s*\\/\\s*(normal|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx])))?\\s*([-_,\\\"\\'\\sa-z0-9]+?)\\s*$/i.exec(t))){var r=e[1];e[2];var n=e[3],i=e[4];e[5];var a=e[6],o=/^([.\\d]+)((?:%|in|[cem]m|ex|p[ctx]))$/i.exec(i)[2];i=\"px\"===o?Math.floor(parseFloat(i)*this.pdf.internal.scaleFactor):\"em\"===o?Math.floor(parseFloat(i)*this.pdf.getFontSize()):Math.floor(parseFloat(i)*this.pdf.internal.scaleFactor),this.pdf.setFontSize(i);var s=function(t){var e,r,n=[],i=t.trim();if(\"\"===i)return Gt;if(i in qt)return[qt[i]];for(;\"\"!==i;){switch(r=null,e=(i=Rt(i)).charAt(0)){case'\"':case\"'\":r=Dt(i.substring(1),e);break;default:r=Tt(i)}if(null===r)return Gt;if(n.push(r[0]),\"\"!==(i=Rt(r[1]))&&\",\"!==i.charAt(0))return Gt;i=i.replace(/^,/,\"\")}return n}(a);if(this.fontFaces){var u=function(t,e){var r=t.getFontList(),n=JSON.stringify(r);if(null===l||h!==n){var i=function(t){var e=[];return Object.keys(t).forEach(function(r){t[r].forEach(function(t){var n=null;switch(t){case\"bold\":n={family:r,weight:\"bold\"};break;case\"italic\":n={family:r,style:\"italic\"};break;case\"bolditalic\":n={family:r,weight:\"bold\",style:\"italic\"};break;case\"\":case\"normal\":n={family:r}}null!==n&&(n.ref={name:r,style:t},e.push(n))})}),e}(r);l=function(t){for(var e={},r=0;r<t.length;++r){var n=Ot(t[r]),i=n.family,a=n.stretch,o=n.style,s=n.weight;e[i]=e[i]||{},e[i][a]=e[i][a]||{},e[i][a][o]=e[i][a][o]||{},e[i][a][o][s]=n}return e}(i.concat(e)),h=n}return l}(this.pdf,this.fontFaces),c=s.map(function(t){return{family:t,stretch:\"normal\",weight:n,style:r}}),f=function(t,e,r){for(var n=(r=r||{}).defaultFontFamily||\"times\",i=Object.assign({},Mt,r.genericFontFamilies||{}),a=null,o=null,s=0;s<e.length;++s)if(i[(a=Ot(e[s])).family]&&(a.family=i[a.family]),t.hasOwnProperty(a.family)){o=t[a.family];break}if(!(o=o||t[n]))throw new Error(\"Could not find a font-family for the rule '\"+Et(a)+\"' and default family '\"+n+\"'.\");if(o=function(t,e){if(e[t])return e[t];var r=It[t],n=r<=It.normal?-1:1,i=Bt(e,Ft,r,n);if(!i)throw new Error(\"Could not find a matching font-stretch value for \"+t);return i}(a.stretch,o),o=function(t,e){if(e[t])return e[t];for(var r=kt[t],n=0;n<r.length;++n)if(e[r[n]])return e[r[n]];throw new Error(\"Could not find a matching font-style for \"+t)}(a.style,o),!(o=function(t,e){if(e[t])return e[t];if(400===t&&e[500])return e[500];if(500===t&&e[400])return e[400];var r=jt[t],n=Bt(e,Ct,r,t<400?-1:1);if(!n)throw new Error(\"Could not find a matching font-weight for value \"+t);return n}(a.weight,o)))throw new Error(\"Failed to resolve a font for the rule '\"+Et(a)+\"'.\");return o}(u,c);this.pdf.setFont(f.ref.name,f.ref.style)}else{var d=\"\";(\"bold\"===n||parseInt(n,10)>=700||\"bold\"===r)&&(d=\"bold\"),\"italic\"===r&&(d+=\"italic\"),0===d.length&&(d=\"normal\");for(var p=\"\",g={arial:\"Helvetica\",Arial:\"Helvetica\",verdana:\"Helvetica\",Verdana:\"Helvetica\",helvetica:\"Helvetica\",Helvetica:\"Helvetica\",\"sans-serif\":\"Helvetica\",fixed:\"Courier\",monospace:\"Courier\",terminal:\"Courier\",cursive:\"Times\",fantasy:\"Times\",serif:\"Times\"},m=0;m<s.length;m++){if(void 0!==this.pdf.internal.getFont(s[m],d,{noFallback:!0,disableWarning:!0})){p=s[m];break}if(\"bolditalic\"===d&&void 0!==this.pdf.internal.getFont(s[m],\"bold\",{noFallback:!0,disableWarning:!0}))p=s[m],d=\"bold\";else if(void 0!==this.pdf.internal.getFont(s[m],\"normal\",{noFallback:!0,disableWarning:!0})){p=s[m],d=\"normal\";break}}if(\"\"===p)for(var v=0;v<s.length;v++)if(g[s[v]]){p=g[s[v]];break}p=\"\"===p?\"Times\":p,this.pdf.setFont(p,d)}}}}),Object.defineProperty(this,\"globalCompositeOperation\",{get:function(){return this.ctx.globalCompositeOperation},set:function(t){this.ctx.globalCompositeOperation=t}}),Object.defineProperty(this,\"globalAlpha\",{get:function(){return this.ctx.globalAlpha},set:function(t){this.ctx.globalAlpha=t}}),Object.defineProperty(this,\"lineDashOffset\",{get:function(){return this.ctx.lineDashOffset},set:function(t){this.ctx.lineDashOffset=t,T.call(this)}}),Object.defineProperty(this,\"lineDash\",{get:function(){return this.ctx.lineDash},set:function(t){this.ctx.lineDash=t,T.call(this)}}),Object.defineProperty(this,\"ignoreClearRect\",{get:function(){return this.ctx.ignoreClearRect},set:function(t){this.ctx.ignoreClearRect=Boolean(t)}})};p.prototype.setLineDash=function(t){this.lineDash=t},p.prototype.getLineDash=function(){return this.lineDash.length%2?this.lineDash.concat(this.lineDash):this.lineDash.slice()},p.prototype.fill=function(){x.call(this,\"fill\",!1)},p.prototype.stroke=function(){x.call(this,\"stroke\",!1)},p.prototype.beginPath=function(){this.path=[{type:\"begin\"}]},p.prototype.moveTo=function(t,e){if(isNaN(t)||isNaN(e))throw o.error(\"jsPDF.context2d.moveTo: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.moveTo\");var r=this.ctx.transform.applyToPoint(new u(t,e));this.path.push({type:\"mt\",x:r.x,y:r.y}),this.ctx.lastPoint=new u(t,e)},p.prototype.closePath=function(){var e=new u(0,0),r=0;for(r=this.path.length-1;-1!==r;r--)if(\"begin\"===this.path[r].type&&\"object\"===(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(this.path[r+1])&&\"number\"==typeof this.path[r+1].x){e=new u(this.path[r+1].x,this.path[r+1].y);break}this.path.push({type:\"close\"}),this.ctx.lastPoint=new u(e.x,e.y)},p.prototype.lineTo=function(t,e){if(isNaN(t)||isNaN(e))throw o.error(\"jsPDF.context2d.lineTo: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.lineTo\");var r=this.ctx.transform.applyToPoint(new u(t,e));this.path.push({type:\"lt\",x:r.x,y:r.y}),this.ctx.lastPoint=new u(r.x,r.y)},p.prototype.clip=function(){this.ctx.clip_path=JSON.parse(JSON.stringify(this.path)),x.call(this,null,!0)},p.prototype.quadraticCurveTo=function(t,e,r,n){if(isNaN(r)||isNaN(n)||isNaN(t)||isNaN(e))throw o.error(\"jsPDF.context2d.quadraticCurveTo: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.quadraticCurveTo\");var i=this.ctx.transform.applyToPoint(new u(r,n)),a=this.ctx.transform.applyToPoint(new u(t,e));this.path.push({type:\"qct\",x1:a.x,y1:a.y,x:i.x,y:i.y}),this.ctx.lastPoint=new u(i.x,i.y)},p.prototype.bezierCurveTo=function(t,e,r,n,i,a){if(isNaN(i)||isNaN(a)||isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n))throw o.error(\"jsPDF.context2d.bezierCurveTo: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.bezierCurveTo\");var s=this.ctx.transform.applyToPoint(new u(i,a)),c=this.ctx.transform.applyToPoint(new u(t,e)),l=this.ctx.transform.applyToPoint(new u(r,n));this.path.push({type:\"bct\",x1:c.x,y1:c.y,x2:l.x,y2:l.y,x:s.x,y:s.y}),this.ctx.lastPoint=new u(s.x,s.y)},p.prototype.arc=function(t,e,r,n,i,a){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n)||isNaN(i))throw o.error(\"jsPDF.context2d.arc: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.arc\");if(a=Boolean(a),!this.ctx.transform.isIdentity){var s=this.ctx.transform.applyToPoint(new u(t,e));t=s.x,e=s.y;var c=this.ctx.transform.applyToPoint(new u(0,r)),l=this.ctx.transform.applyToPoint(new u(0,0));r=Math.sqrt(Math.pow(c.x-l.x,2)+Math.pow(c.y-l.y,2))}Math.abs(i-n)>=2*Math.PI&&(n=0,i=2*Math.PI),this.path.push({type:\"arc\",x:t,y:e,radius:r,startAngle:n,endAngle:i,counterclockwise:a})},p.prototype.arcTo=function(t,e,r,n,i){throw new Error(\"arcTo not implemented.\")},p.prototype.rect=function(t,e,r,n){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n))throw o.error(\"jsPDF.context2d.rect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.rect\");this.moveTo(t,e),this.lineTo(t+r,e),this.lineTo(t+r,e+n),this.lineTo(t,e+n),this.lineTo(t,e),this.lineTo(t+r,e),this.lineTo(t,e)},p.prototype.fillRect=function(t,e,r,n){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n))throw o.error(\"jsPDF.context2d.fillRect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.fillRect\");if(!m.call(this)){var i={};\"butt\"!==this.lineCap&&(i.lineCap=this.lineCap,this.lineCap=\"butt\"),\"miter\"!==this.lineJoin&&(i.lineJoin=this.lineJoin,this.lineJoin=\"miter\"),this.beginPath(),this.rect(t,e,r,n),this.fill(),i.hasOwnProperty(\"lineCap\")&&(this.lineCap=i.lineCap),i.hasOwnProperty(\"lineJoin\")&&(this.lineJoin=i.lineJoin)}},p.prototype.strokeRect=function(t,e,r,n){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n))throw o.error(\"jsPDF.context2d.strokeRect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.strokeRect\");v.call(this)||(this.beginPath(),this.rect(t,e,r,n),this.stroke())},p.prototype.clearRect=function(t,e,r,n){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n))throw o.error(\"jsPDF.context2d.clearRect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.clearRect\");this.ignoreClearRect||(this.fillStyle=\"#ffffff\",this.fillRect(t,e,r,n))},p.prototype.save=function(t){t=\"boolean\"!=typeof t||t;for(var e=this.pdf.internal.getCurrentPageInfo().pageNumber,r=0;r<this.pdf.internal.getNumberOfPages();r++)this.pdf.setPage(r+1),this.pdf.internal.out(\"q\");if(this.pdf.setPage(e),t){this.ctx.fontSize=this.pdf.internal.getFontSize();var n=new d(this.ctx);this.ctxStack.push(this.ctx),this.ctx=n}},p.prototype.restore=function(t){t=\"boolean\"!=typeof t||t;for(var e=this.pdf.internal.getCurrentPageInfo().pageNumber,r=0;r<this.pdf.internal.getNumberOfPages();r++)this.pdf.setPage(r+1),this.pdf.internal.out(\"Q\");this.pdf.setPage(e),t&&0!==this.ctxStack.length&&(this.ctx=this.ctxStack.pop(),this.fillStyle=this.ctx.fillStyle,this.strokeStyle=this.ctx.strokeStyle,this.font=this.ctx.font,this.lineCap=this.ctx.lineCap,this.lineWidth=this.ctx.lineWidth,this.lineJoin=this.ctx.lineJoin,this.lineDash=this.ctx.lineDash,this.lineDashOffset=this.ctx.lineDashOffset)},p.prototype.toDataURL=function(){throw new Error(\"toDataUrl not implemented.\")};var g=function(t){var e,r,n,i;if(!0===t.isCanvasGradient&&(t=t.getColor()),!t)return{r:0,g:0,b:0,a:0,style:t};if(/transparent|rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*0+\\s*\\)/.test(t))e=0,r=0,n=0,i=0;else{var a=/rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/.exec(t);if(null!==a)e=parseInt(a[1]),r=parseInt(a[2]),n=parseInt(a[3]),i=1;else if(null!==(a=/rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d.]+)\\s*\\)/.exec(t)))e=parseInt(a[1]),r=parseInt(a[2]),n=parseInt(a[3]),i=parseFloat(a[4]);else{if(i=1,\"string\"==typeof t&&\"#\"!==t.charAt(0)){var o=new h(t);t=o.ok?o.toHex():\"#000000\"}4===t.length?(e=t.substring(1,2),e+=e,r=t.substring(2,3),r+=r,n=t.substring(3,4),n+=n):(e=t.substring(1,3),r=t.substring(3,5),n=t.substring(5,7)),e=parseInt(e,16),r=parseInt(r,16),n=parseInt(n,16)}}return{r:e,g:r,b:n,a:i,style:t}},m=function(){return this.ctx.isFillTransparent||0==this.globalAlpha},v=function(){return Boolean(this.ctx.isStrokeTransparent||0==this.globalAlpha)};p.prototype.fillText=function(t,e,r,n){if(isNaN(e)||isNaN(r)||\"string\"!=typeof t)throw o.error(\"jsPDF.context2d.fillText: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.fillText\");if(n=isNaN(n)?void 0:n,!m.call(this)){var i=E(this.ctx.transform.rotation),a=this.ctx.transform.scaleX;C.call(this,{text:t,x:e,y:r,scale:a,angle:i,align:this.textAlign,maxWidth:n})}},p.prototype.strokeText=function(t,e,r,n){if(isNaN(e)||isNaN(r)||\"string\"!=typeof t)throw o.error(\"jsPDF.context2d.strokeText: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.strokeText\");if(!v.call(this)){n=isNaN(n)?void 0:n;var i=E(this.ctx.transform.rotation),a=this.ctx.transform.scaleX;C.call(this,{text:t,x:e,y:r,scale:a,renderingMode:\"stroke\",angle:i,align:this.textAlign,maxWidth:n})}},p.prototype.measureText=function(t){if(\"string\"!=typeof t)throw o.error(\"jsPDF.context2d.measureText: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.measureText\");var e=this.pdf,r=this.pdf.internal.scaleFactor,n=e.internal.getFontSize(),i=e.getStringUnitWidth(t)*n/e.internal.scaleFactor;return new function(t){var e=(t=t||{}).width||0;return Object.defineProperty(this,\"width\",{get:function(){return e}}),this}({width:i*=Math.round(96*r/72*1e4)/1e4})},p.prototype.scale=function(t,e){if(isNaN(t)||isNaN(e))throw o.error(\"jsPDF.context2d.scale: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.scale\");var r=new l(t,0,0,e,0,0);this.ctx.transform=this.ctx.transform.multiply(r)},p.prototype.rotate=function(t){if(isNaN(t))throw o.error(\"jsPDF.context2d.rotate: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.rotate\");var e=new l(Math.cos(t),Math.sin(t),-Math.sin(t),Math.cos(t),0,0);this.ctx.transform=this.ctx.transform.multiply(e)},p.prototype.translate=function(t,e){if(isNaN(t)||isNaN(e))throw o.error(\"jsPDF.context2d.translate: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.translate\");var r=new l(1,0,0,1,t,e);this.ctx.transform=this.ctx.transform.multiply(r)},p.prototype.transform=function(t,e,r,n,i,a){if(isNaN(t)||isNaN(e)||isNaN(r)||isNaN(n)||isNaN(i)||isNaN(a))throw o.error(\"jsPDF.context2d.transform: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.transform\");var s=new l(t,e,r,n,i,a);this.ctx.transform=this.ctx.transform.multiply(s)},p.prototype.setTransform=function(t,e,r,n,i,a){t=isNaN(t)?1:t,e=isNaN(e)?0:e,r=isNaN(r)?0:r,n=isNaN(n)?1:n,i=isNaN(i)?0:i,a=isNaN(a)?0:a,this.ctx.transform=new l(t,e,r,n,i,a)};var b=function(){return this.margin[0]>0||this.margin[1]>0||this.margin[2]>0||this.margin[3]>0};p.prototype.drawImage=function(t,e,r,n,i,a,o,s,u){var h=this.pdf.getImageProperties(t),f=1,d=1,p=1,g=1;void 0!==n&&void 0!==s&&(p=s/n,g=u/i,f=h.width/n*s/n,d=h.height/i*u/i),void 0===a&&(a=e,o=r,e=0,r=0),void 0!==n&&void 0===s&&(s=n,u=i),void 0===n&&void 0===s&&(s=h.width,u=h.height);var m=this.ctx.transform.decompose(),v=E(m.rotate.shx),w=new l,x=(w=(w=(w=w.multiply(m.translate)).multiply(m.skew)).multiply(m.scale)).applyToRectangle(new c(a-e*p,o-r*g,n*f,i*d));if(this.autoPaging){for(var S,_=y.call(this,x),P=[],k=0;k<_.length;k+=1)-1===P.indexOf(_[k])&&P.push(_[k]);L(P);for(var F=P[0],I=P[P.length-1],C=F;C<I+1;C++){this.pdf.setPage(C);var j=this.pdf.internal.pageSize.width-this.margin[3]-this.margin[1],O=1===C?this.posY+this.margin[0]:this.margin[0],B=this.pdf.internal.pageSize.height-this.posY-this.margin[0]-this.margin[2],M=this.pdf.internal.pageSize.height-this.margin[0]-this.margin[2],q=1===C?0:B+(C-2)*M;if(0!==this.ctx.clip_path.length){var R=this.path;S=JSON.parse(JSON.stringify(this.ctx.clip_path)),this.path=N(S,this.posX+this.margin[3],-q+O+this.ctx.prevPageLastElemOffset),A.call(this,\"fill\",!0),this.path=R}var D=JSON.parse(JSON.stringify(x));D=N([D],this.posX+this.margin[3],-q+O+this.ctx.prevPageLastElemOffset)[0];var T=(C>F||C<I)&&b.call(this);T&&(this.pdf.saveGraphicsState(),this.pdf.rect(this.margin[3],this.margin[0],j,M,null).clip().discardPath()),this.pdf.addImage(t,\"JPEG\",D.x,D.y,D.w,D.h,null,null,v),T&&this.pdf.restoreGraphicsState()}}else this.pdf.addImage(t,\"JPEG\",x.x,x.y,x.w,x.h,null,null,v)};var y=function(t,e,r){var n=[];e=e||this.pdf.internal.pageSize.width,r=r||this.pdf.internal.pageSize.height-this.margin[0]-this.margin[2];var i=this.posY+this.ctx.prevPageLastElemOffset;switch(t.type){default:case\"mt\":case\"lt\":n.push(Math.floor((t.y+i)/r)+1);break;case\"arc\":n.push(Math.floor((t.y+i-t.radius)/r)+1),n.push(Math.floor((t.y+i+t.radius)/r)+1);break;case\"qct\":var a=R(this.ctx.lastPoint.x,this.ctx.lastPoint.y,t.x1,t.y1,t.x,t.y);n.push(Math.floor((a.y+i)/r)+1),n.push(Math.floor((a.y+a.h+i)/r)+1);break;case\"bct\":var o=D(this.ctx.lastPoint.x,this.ctx.lastPoint.y,t.x1,t.y1,t.x2,t.y2,t.x,t.y);n.push(Math.floor((o.y+i)/r)+1),n.push(Math.floor((o.y+o.h+i)/r)+1);break;case\"rect\":n.push(Math.floor((t.y+i)/r)+1),n.push(Math.floor((t.y+t.h+i)/r)+1)}for(var s=0;s<n.length;s+=1)for(;this.pdf.internal.getNumberOfPages()<n[s];)w.call(this);return n},w=function(){var t=this.fillStyle,e=this.strokeStyle,r=this.font,n=this.lineCap,i=this.lineWidth,a=this.lineJoin;this.pdf.addPage(),this.fillStyle=t,this.strokeStyle=e,this.font=r,this.lineCap=n,this.lineWidth=i,this.lineJoin=a},N=function(t,e,r){for(var n=0;n<t.length;n++)switch(t[n].type){case\"bct\":t[n].x2+=e,t[n].y2+=r;case\"qct\":t[n].x1+=e,t[n].y1+=r;default:t[n].x+=e,t[n].y+=r}return t},L=function(t){return t.sort(function(t,e){return t-e})},x=function(t,e){var r=this.fillStyle,n=this.strokeStyle,i=this.lineCap,a=this.lineWidth,o=Math.abs(a*this.ctx.transform.scaleX),s=this.lineJoin;if(this.autoPaging){for(var u,c,l=JSON.parse(JSON.stringify(this.path)),h=JSON.parse(JSON.stringify(this.path)),f=[],d=0;d<h.length;d++)if(void 0!==h[d].x)for(var p=y.call(this,h[d]),g=0;g<p.length;g+=1)-1===f.indexOf(p[g])&&f.push(p[g]);for(var m=0;m<f.length;m++)for(;this.pdf.internal.getNumberOfPages()<f[m];)w.call(this);L(f);for(var v=f[0],x=f[f.length-1],S=v;S<x+1;S++){this.pdf.setPage(S),this.fillStyle=r,this.strokeStyle=n,this.lineCap=i,this.lineWidth=o,this.lineJoin=s;var _=this.pdf.internal.pageSize.width-this.margin[3]-this.margin[1],P=1===S?this.posY+this.margin[0]:this.margin[0],k=this.pdf.internal.pageSize.height-this.posY-this.margin[0]-this.margin[2],F=this.pdf.internal.pageSize.height-this.margin[0]-this.margin[2],I=1===S?0:k+(S-2)*F;if(0!==this.ctx.clip_path.length){var C=this.path;u=JSON.parse(JSON.stringify(this.ctx.clip_path)),this.path=N(u,this.posX+this.margin[3],-I+P+this.ctx.prevPageLastElemOffset),A.call(this,t,!0),this.path=C}if(c=JSON.parse(JSON.stringify(l)),this.path=N(c,this.posX+this.margin[3],-I+P+this.ctx.prevPageLastElemOffset),!1===e||0===S){var j=(S>v||S<x)&&b.call(this);j&&(this.pdf.saveGraphicsState(),this.pdf.rect(this.margin[3],this.margin[0],_,F,null).clip().discardPath()),A.call(this,t,e),j&&this.pdf.restoreGraphicsState()}this.lineWidth=a}this.path=l}else this.lineWidth=o,A.call(this,t,e),this.lineWidth=a},A=function(t,e){if((\"stroke\"!==t||e||!v.call(this))&&(\"stroke\"===t||e||!m.call(this))){for(var r,n,i=[],a=this.path,o=0;o<a.length;o++){var s=a[o];switch(s.type){case\"begin\":i.push({begin:!0});break;case\"close\":i.push({close:!0});break;case\"mt\":i.push({start:s,deltas:[],abs:[]});break;case\"lt\":var u=i.length;if(a[o-1]&&!isNaN(a[o-1].x)&&(r=[s.x-a[o-1].x,s.y-a[o-1].y],u>0))for(;u>=0;u--)if(!0!==i[u-1].close&&!0!==i[u-1].begin){i[u-1].deltas.push(r),i[u-1].abs.push(s);break}break;case\"bct\":r=[s.x1-a[o-1].x,s.y1-a[o-1].y,s.x2-a[o-1].x,s.y2-a[o-1].y,s.x-a[o-1].x,s.y-a[o-1].y],i[i.length-1].deltas.push(r);break;case\"qct\":var c=a[o-1].x+2/3*(s.x1-a[o-1].x),l=a[o-1].y+2/3*(s.y1-a[o-1].y),h=s.x+2/3*(s.x1-s.x),f=s.y+2/3*(s.y1-s.y),d=s.x,p=s.y;r=[c-a[o-1].x,l-a[o-1].y,h-a[o-1].x,f-a[o-1].y,d-a[o-1].x,p-a[o-1].y],i[i.length-1].deltas.push(r);break;case\"arc\":i.push({deltas:[],abs:[],arc:!0}),Array.isArray(i[i.length-1].abs)&&i[i.length-1].abs.push(s)}}n=e?null:\"stroke\"===t?\"stroke\":\"fill\";for(var g=!1,b=0;b<i.length;b++)if(i[b].arc)for(var y=i[b].abs,w=0;w<y.length;w++){var N=y[w];\"arc\"===N.type?P.call(this,N.x,N.y,N.radius,N.startAngle,N.endAngle,N.counterclockwise,void 0,e,!g):j.call(this,N.x,N.y),g=!0}else if(!0===i[b].close)this.pdf.internal.out(\"h\"),g=!1;else if(!0!==i[b].begin){var L=i[b].start.x,x=i[b].start.y;O.call(this,i[b].deltas,L,x),g=!0}n&&k.call(this,n),e&&F.call(this)}},S=function(t){var e=this.pdf.internal.getFontSize()/this.pdf.internal.scaleFactor,r=e*(this.pdf.internal.getLineHeightFactor()-1);switch(this.ctx.textBaseline){case\"bottom\":return t-r;case\"top\":return t+e-r;case\"hanging\":return t+e-2*r;case\"middle\":return t+e/2-r;default:return t}},_=function(t){return t+this.pdf.internal.getFontSize()/this.pdf.internal.scaleFactor*(this.pdf.internal.getLineHeightFactor()-1)};p.prototype.createLinearGradient=function(){var t=function(){};return t.colorStops=[],t.addColorStop=function(t,e){this.colorStops.push([t,e])},t.getColor=function(){return 0===this.colorStops.length?\"#000000\":this.colorStops[0][1]},t.isCanvasGradient=!0,t},p.prototype.createPattern=function(){return this.createLinearGradient()},p.prototype.createRadialGradient=function(){return this.createLinearGradient()};var P=function(t,e,r,n,i,a,o,s,u){for(var c=M.call(this,r,n,i,a),l=0;l<c.length;l++){var h=c[l];0===l&&(u?I.call(this,h.x1+t,h.y1+e):j.call(this,h.x1+t,h.y1+e)),B.call(this,t,e,h.x2,h.y2,h.x3,h.y3,h.x4,h.y4)}s?F.call(this):k.call(this,o)},k=function(t){switch(t){case\"stroke\":this.pdf.internal.out(\"S\");break;case\"fill\":this.pdf.internal.out(\"f\")}},F=function(){this.pdf.clip(),this.pdf.discardPath()},I=function(t,e){this.pdf.internal.out(n(t)+\" \"+i(e)+\" m\")},C=function(t){var e;switch(t.align){case\"right\":case\"end\":e=\"right\";break;case\"center\":e=\"center\";break;default:e=\"left\"}var r,n,i,a=this.pdf.getTextDimensions(t.text),o=S.call(this,t.y),s=_.call(this,o)-a.h,h=this.ctx.transform.applyToPoint(new u(t.x,o));if(this.autoPaging){var f=this.ctx.transform.decompose(),d=new l;d=(d=(d=d.multiply(f.translate)).multiply(f.skew)).multiply(f.scale);for(var p=this.ctx.transform.applyToRectangle(new c(t.x,o,a.w,a.h)),g=d.applyToRectangle(new c(t.x,s,a.w,a.h)),m=y.call(this,g),v=[],w=0;w<m.length;w+=1)-1===v.indexOf(m[w])&&v.push(m[w]);L(v);for(var x=v[0],P=v[v.length-1],k=x;k<P+1;k++){this.pdf.setPage(k);var F=1===k?this.posY+this.margin[0]:this.margin[0],I=this.pdf.internal.pageSize.height-this.posY-this.margin[0]-this.margin[2],C=this.pdf.internal.pageSize.height-this.margin[2],j=C-this.margin[0],O=this.pdf.internal.pageSize.width-this.margin[1],B=O-this.margin[3],M=1===k?0:I+(k-2)*j;if(0!==this.ctx.clip_path.length){var q=this.path;r=JSON.parse(JSON.stringify(this.ctx.clip_path)),this.path=N(r,this.posX+this.margin[3],-1*M+F),A.call(this,\"fill\",!0),this.path=q}var E=N([JSON.parse(JSON.stringify(g))],this.posX+this.margin[3],-M+F+this.ctx.prevPageLastElemOffset)[0];t.scale>=.01&&(n=this.pdf.internal.getFontSize(),this.pdf.setFontSize(n*t.scale),i=this.lineWidth,this.lineWidth=i*t.scale);var R=\"text\"!==this.autoPaging;if(R||E.y+E.h<=C){if(R||E.y>=F&&E.x<=O){var D=R?t.text:this.pdf.splitTextToSize(t.text,t.maxWidth||O-E.x)[0],T=N([JSON.parse(JSON.stringify(p))],this.posX+this.margin[3],-M+F+this.ctx.prevPageLastElemOffset)[0],z=R&&(k>x||k<P)&&b.call(this);z&&(this.pdf.saveGraphicsState(),this.pdf.rect(this.margin[3],this.margin[0],B,j,null).clip().discardPath()),this.pdf.text(D,T.x,T.y,{angle:t.angle,align:e,renderingMode:t.renderingMode}),z&&this.pdf.restoreGraphicsState()}}else E.y<C&&(this.ctx.prevPageLastElemOffset+=C-E.y);t.scale>=.01&&(this.pdf.setFontSize(n),this.lineWidth=i)}}else t.scale>=.01&&(n=this.pdf.internal.getFontSize(),this.pdf.setFontSize(n*t.scale),i=this.lineWidth,this.lineWidth=i*t.scale),this.pdf.text(t.text,h.x+this.posX,h.y+this.posY,{angle:t.angle,align:e,renderingMode:t.renderingMode,maxWidth:t.maxWidth}),t.scale>=.01&&(this.pdf.setFontSize(n),this.lineWidth=i)},j=function(t,e,r,a){r=r||0,a=a||0,this.pdf.internal.out(n(t+r)+\" \"+i(e+a)+\" l\")},O=function(t,e,r){return this.pdf.lines(t,e,r,null,null)},B=function(t,e,n,i,o,u,c,l){this.pdf.internal.out([r(a(n+t)),r(s(i+e)),r(a(o+t)),r(s(u+e)),r(a(c+t)),r(s(l+e)),\"c\"].join(\" \"))},M=function(t,e,r,n){for(var i=2*Math.PI,a=Math.PI/2;e>r;)e-=i;var o=Math.abs(r-e);o<i&&n&&(o=i-o);for(var s=[],u=n?-1:1,c=e;o>1e-5;){var l=c+u*Math.min(o,a);s.push(q.call(this,t,c,l)),o-=Math.abs(l-c),c=l}return s},q=function(t,e,r){var n=(r-e)/2,i=t*Math.cos(n),a=t*Math.sin(n),o=i,s=-a,u=o*o+s*s,c=u+o*i+s*a,l=4/3*(Math.sqrt(2*u*c)-c)/(o*a-s*i),h=o-l*s,f=s+l*o,d=h,p=-f,g=n+e,m=Math.cos(g),v=Math.sin(g);return{x1:t*Math.cos(e),y1:t*Math.sin(e),x2:h*m-f*v,y2:h*v+f*m,x3:d*m-p*v,y3:d*v+p*m,x4:t*Math.cos(r),y4:t*Math.sin(r)}},E=function(t){return 180*t/Math.PI},R=function(t,e,r,n,i,a){var o=t+.5*(r-t),s=e+.5*(n-e),u=i+.5*(r-i),l=a+.5*(n-a),h=Math.min(t,i,o,u),f=Math.max(t,i,o,u),d=Math.min(e,a,s,l),p=Math.max(e,a,s,l);return new c(h,d,f-h,p-d)},D=function(t,e,r,n,i,a,o,s){var u,l,h,f,d,p,g,m,v,b,y,w,N,L,x=r-t,A=n-e,S=i-r,_=a-n,P=o-i,k=s-a;for(l=0;l<41;l++)v=(g=(h=t+(u=l/40)*x)+u*((d=r+u*S)-h))+u*(d+u*(i+u*P-d)-g),b=(m=(f=e+u*A)+u*((p=n+u*_)-f))+u*(p+u*(a+u*k-p)-m),0==l?(y=v,w=b,N=v,L=b):(y=Math.min(y,v),w=Math.min(w,b),N=Math.max(N,v),L=Math.max(L,b));return new c(Math.round(y),Math.round(w),Math.round(N-y),Math.round(L-w))},T=function(){if(this.prevLineDash||this.ctx.lineDash.length||this.ctx.lineDashOffset){var t,e,r=(t=this.ctx.lineDash,e=this.ctx.lineDashOffset,JSON.stringify({lineDash:t,lineDashOffset:e}));this.prevLineDash!==r&&(this.pdf.setLineDash(this.ctx.lineDash,this.ctx.lineDashOffset),this.prevLineDash=r)}}}(E.API),\n/**\n * @license\n * jsPDF filters PlugIn\n * Copyright (c) 2014 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(t){var r=function(t){var e,r,n,i,a,o,s,u,c,l;for(/[^\\x00-\\xFF]/.test(t),r=[],n=0,i=(t+=e=\"\\0\\0\\0\\0\".slice(t.length%4||4)).length;i>n;n+=4)0!==(a=(t.charCodeAt(n)<<24)+(t.charCodeAt(n+1)<<16)+(t.charCodeAt(n+2)<<8)+t.charCodeAt(n+3))?(o=(a=((a=((a=((a=(a-(l=a%85))/85)-(c=a%85))/85)-(u=a%85))/85)-(s=a%85))/85)%85,r.push(o+33,s+33,u+33,c+33,l+33)):r.push(122);return function(t,e){for(var r=e;r>0;r--)t.pop()}(r,e.length),String.fromCharCode.apply(String,r)+\"~>\"},n=function(t){var e,r,n,i,a,o=String,s=\"length\",u=255,c=\"charCodeAt\",l=\"slice\",h=\"replace\";for(t[l](-2),t=t[l](0,-2)[h](/\\s/g,\"\")[h](\"z\",\"!!!!!\"),n=[],i=0,a=(t+=e=\"uuuuu\"[l](t[s]%5||5))[s];a>i;i+=5)r=52200625*(t[c](i)-33)+614125*(t[c](i+1)-33)+7225*(t[c](i+2)-33)+85*(t[c](i+3)-33)+(t[c](i+4)-33),n.push(u&r>>24,u&r>>16,u&r>>8,u&r);return function(t,e){for(var r=e;r>0;r--)t.pop()}(n,e[s]),o.fromCharCode.apply(o,n)},i=function(t){return t.split(\"\").map(function(t){return(\"0\"+t.charCodeAt().toString(16)).slice(-2)}).join(\"\")+\">\"},a=function(t){var e=new RegExp(/^([0-9A-Fa-f]{2})+$/);if(-1!==(t=t.replace(/\\s/g,\"\")).indexOf(\">\")&&(t=t.substr(0,t.indexOf(\">\"))),t.length%2&&(t+=\"0\"),!1===e.test(t))return\"\";for(var r=\"\",n=0;n<t.length;n+=2)r+=String.fromCharCode(\"0x\"+(t[n]+t[n+1]));return r},o=function(t){for(var r=new Uint8Array(t.length),n=t.length;n--;)r[n]=t.charCodeAt(n);return(r=(0,fflate__WEBPACK_IMPORTED_MODULE_3__.zlibSync)(r)).reduce(function(t,e){return t+String.fromCharCode(e)},\"\")};t.processDataByFilters=function(t,e){var s=0,u=t||\"\",c=[];for(\"string\"==typeof(e=e||[])&&(e=[e]),s=0;s<e.length;s+=1)switch(e[s]){case\"ASCII85Decode\":case\"/ASCII85Decode\":u=n(u),c.push(\"/ASCII85Encode\");break;case\"ASCII85Encode\":case\"/ASCII85Encode\":u=r(u),c.push(\"/ASCII85Decode\");break;case\"ASCIIHexDecode\":case\"/ASCIIHexDecode\":u=a(u),c.push(\"/ASCIIHexEncode\");break;case\"ASCIIHexEncode\":case\"/ASCIIHexEncode\":u=i(u),c.push(\"/ASCIIHexDecode\");break;case\"FlateEncode\":case\"/FlateEncode\":u=o(u),c.push(\"/FlateDecode\");break;default:throw new Error('The filter: \"'+e[s]+'\" is not implemented')}return{data:u,reverseChain:c.reverse().join(\" \")}}}(E.API),\n/**\n * @license\n * jsPDF fileloading PlugIn\n * Copyright (c) 2018 Aras Abbasi (aras.abbasi@gmail.com)\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(t){t.loadFile=function(t,e,r){return function(t,e,r){e=!1!==e,r=\"function\"==typeof r?r:function(){};var n=void 0;try{n=function(t,e,r){var n=new XMLHttpRequest,i=0,a=function(t){var e=t.length,r=[],n=String.fromCharCode;for(i=0;i<e;i+=1)r.push(n(255&t.charCodeAt(i)));return r.join(\"\")};if(n.open(\"GET\",t,!e),n.overrideMimeType(\"text/plain; charset=x-user-defined\"),!1===e&&(n.onload=function(){200===n.status?r(a(this.responseText)):r(void 0)}),n.send(null),e&&200===n.status)return a(n.responseText)}(t,e,r)}catch(i){}return n}(t,e,r)},t.allowFsRead=void 0,t.loadImageFile=t.loadFile}(E.API),function(e){function r(){return(i.html2canvas?Promise.resolve(i.html2canvas):__webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_html2canvas_dist_html2canvas_js\").then(__webpack_require__.t.bind(__webpack_require__, /*! html2canvas */ \"(app-pages-browser)/./node_modules/html2canvas/dist/html2canvas.js\", 23))).catch(function(t){return Promise.reject(new Error(\"Could not load html2canvas: \"+t))}).then(function(t){return t.default?t.default:t})}function n(){return(i.DOMPurify?Promise.resolve(i.DOMPurify):__webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_dompurify_dist_purify_es_mjs\").then(__webpack_require__.bind(__webpack_require__, /*! dompurify */ \"(app-pages-browser)/./node_modules/dompurify/dist/purify.es.mjs\"))).catch(function(t){return Promise.reject(new Error(\"Could not load dompurify: \"+t))}).then(function(t){return t.default?t.default:t})}var a=function(e){var r=(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(e);return\"undefined\"===r?\"undefined\":\"string\"===r||e instanceof String?\"string\":\"number\"===r||e instanceof Number?\"number\":\"function\"===r||e instanceof Function?\"function\":e&&e.constructor===Array?\"array\":e&&1===e.nodeType?\"element\":\"object\"===r?\"object\":\"unknown\"},o=function(t,e){var r=document.createElement(t);for(var n in e.className&&(r.className=e.className),e.innerHTML&&e.dompurify&&(r.innerHTML=e.dompurify.sanitize(e.innerHTML)),e.style)r.style[n]=e.style[n];return r},s=function t(e,r){for(var n=3===e.nodeType?document.createTextNode(e.nodeValue):e.cloneNode(!1),i=e.firstChild;i;i=i.nextSibling)!0!==r&&1===i.nodeType&&\"SCRIPT\"===i.nodeName||n.appendChild(t(i,r));return 1===e.nodeType&&(\"CANVAS\"===e.nodeName?(n.width=e.width,n.height=e.height,n.getContext(\"2d\").drawImage(e,0,0)):\"TEXTAREA\"!==e.nodeName&&\"SELECT\"!==e.nodeName||(n.value=e.value),n.addEventListener(\"load\",function(){n.scrollTop=e.scrollTop,n.scrollLeft=e.scrollLeft},!0)),n},u=function t(e){var r=Object.assign(t.convert(Promise.resolve()),JSON.parse(JSON.stringify(t.template))),n=t.convert(Promise.resolve(),r);return(n=n.setProgress(1,t,1,[t])).set(e)};(u.prototype=Object.create(Promise.prototype)).constructor=u,u.convert=function(t,e){return t.__proto__=e||u.prototype,t},u.template={prop:{src:null,container:null,overlay:null,canvas:null,img:null,pdf:null,pageSize:null,callback:function(){}},progress:{val:0,state:null,n:0,stack:[]},opt:{filename:\"file.pdf\",margin:[0,0,0,0],enableLinks:!0,x:0,y:0,html2canvas:{},jsPDF:{},backgroundColor:\"transparent\"}},u.prototype.from=function(t,e){return this.then(function(){switch(e=e||function(t){switch(a(t)){case\"string\":return\"string\";case\"element\":return\"canvas\"===t.nodeName.toLowerCase()?\"canvas\":\"element\";default:return\"unknown\"}}(t),e){case\"string\":return this.then(n).then(function(e){return this.set({src:o(\"div\",{innerHTML:t,dompurify:e})})});case\"element\":return this.set({src:t});case\"canvas\":return this.set({canvas:t});case\"img\":return this.set({img:t});default:return this.error(\"Unknown source type.\")}})},u.prototype.to=function(t){switch(t){case\"container\":return this.toContainer();case\"canvas\":return this.toCanvas();case\"img\":return this.toImg();case\"pdf\":return this.toPdf();default:return this.error(\"Invalid target.\")}},u.prototype.toContainer=function(){return this.thenList([function(){return this.prop.src||this.error(\"Cannot duplicate - no source HTML.\")},function(){return this.prop.pageSize||this.setPageSize()}]).then(function(){var t={position:\"relative\",display:\"inline-block\",width:(\"number\"!=typeof this.opt.width||isNaN(this.opt.width)||\"number\"!=typeof this.opt.windowWidth||isNaN(this.opt.windowWidth)?Math.max(this.prop.src.clientWidth,this.prop.src.scrollWidth,this.prop.src.offsetWidth):this.opt.windowWidth)+\"px\",left:0,right:0,top:0,margin:\"auto\",backgroundColor:this.opt.backgroundColor},e=s(this.prop.src,this.opt.html2canvas.javascriptEnabled);\"BODY\"===e.tagName&&(t.height=Math.max(document.body.scrollHeight,document.body.offsetHeight,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)+\"px\"),this.prop.overlay=o(\"div\",{className:\"html2pdf__overlay\",style:{position:\"fixed\",overflow:\"hidden\",zIndex:1e3,left:\"-100000px\",right:0,bottom:0,top:0}}),this.prop.container=o(\"div\",{className:\"html2pdf__container\",style:t}),this.prop.container.appendChild(e),this.prop.container.firstChild.appendChild(o(\"div\",{style:{clear:\"both\",border:\"0 none transparent\",margin:0,padding:0,height:0}})),this.prop.container.style.float=\"none\",this.prop.overlay.appendChild(this.prop.container),document.body.appendChild(this.prop.overlay),this.prop.container.firstChild.style.position=\"relative\",this.prop.container.height=Math.max(this.prop.container.firstChild.clientHeight,this.prop.container.firstChild.scrollHeight,this.prop.container.firstChild.offsetHeight)+\"px\"})},u.prototype.toCanvas=function(){var t=[function(){return document.body.contains(this.prop.container)||this.toContainer()}];return this.thenList(t).then(r).then(function(t){var e=Object.assign({},this.opt.html2canvas);return delete e.onrendered,t(this.prop.container,e)}).then(function(t){(this.opt.html2canvas.onrendered||function(){})(t),this.prop.canvas=t,document.body.removeChild(this.prop.overlay)})},u.prototype.toContext2d=function(){var t=[function(){return document.body.contains(this.prop.container)||this.toContainer()}];return this.thenList(t).then(r).then(function(t){var e=this.opt.jsPDF,r=this.opt.fontFaces,n=\"number\"!=typeof this.opt.width||isNaN(this.opt.width)||\"number\"!=typeof this.opt.windowWidth||isNaN(this.opt.windowWidth)?1:this.opt.width/this.opt.windowWidth,i=Object.assign({async:!0,allowTaint:!0,scale:n,scrollX:this.opt.scrollX||0,scrollY:this.opt.scrollY||0,backgroundColor:\"#ffffff\",imageTimeout:15e3,logging:!0,proxy:null,removeContainer:!0,foreignObjectRendering:!1,useCORS:!1},this.opt.html2canvas);if(delete i.onrendered,e.context2d.autoPaging=void 0===this.opt.autoPaging||this.opt.autoPaging,e.context2d.posX=this.opt.x,e.context2d.posY=this.opt.y,e.context2d.margin=this.opt.margin,e.context2d.fontFaces=r,r)for(var a=0;a<r.length;++a){var o=r[a],s=o.src.find(function(t){return\"truetype\"===t.format});s&&e.addFont(s.url,o.ref.name,o.ref.style)}return i.windowHeight=i.windowHeight||0,i.windowHeight=0==i.windowHeight?Math.max(this.prop.container.clientHeight,this.prop.container.scrollHeight,this.prop.container.offsetHeight):i.windowHeight,e.context2d.save(!0),t(this.prop.container,i)}).then(function(t){this.opt.jsPDF.context2d.restore(!0),(this.opt.html2canvas.onrendered||function(){})(t),this.prop.canvas=t,document.body.removeChild(this.prop.overlay)})},u.prototype.toImg=function(){return this.thenList([function(){return this.prop.canvas||this.toCanvas()}]).then(function(){var t=this.prop.canvas.toDataURL(\"image/\"+this.opt.image.type,this.opt.image.quality);this.prop.img=document.createElement(\"img\"),this.prop.img.src=t})},u.prototype.toPdf=function(){return this.thenList([function(){return this.toContext2d()}]).then(function(){this.prop.pdf=this.prop.pdf||this.opt.jsPDF})},u.prototype.output=function(t,e,r){return\"img\"===(r=r||\"pdf\").toLowerCase()||\"image\"===r.toLowerCase()?this.outputImg(t,e):this.outputPdf(t,e)},u.prototype.outputPdf=function(t,e){return this.thenList([function(){return this.prop.pdf||this.toPdf()}]).then(function(){return this.prop.pdf.output(t,e)})},u.prototype.outputImg=function(t){return this.thenList([function(){return this.prop.img||this.toImg()}]).then(function(){switch(t){case void 0:case\"img\":return this.prop.img;case\"datauristring\":case\"dataurlstring\":return this.prop.img.src;case\"datauri\":case\"dataurl\":return document.location.href=this.prop.img.src;default:throw'Image output type \"'+t+'\" is not supported.'}})},u.prototype.save=function(t){return this.thenList([function(){return this.prop.pdf||this.toPdf()}]).set(t?{filename:t}:null).then(function(){this.prop.pdf.save(this.opt.filename)})},u.prototype.doCallback=function(){return this.thenList([function(){return this.prop.pdf||this.toPdf()}]).then(function(){this.prop.callback(this.prop.pdf)})},u.prototype.set=function(t){if(\"object\"!==a(t))return this;var e=Object.keys(t||{}).map(function(e){if(e in u.template.prop)return function(){this.prop[e]=t[e]};switch(e){case\"margin\":return this.setMargin.bind(this,t.margin);case\"jsPDF\":return function(){return this.opt.jsPDF=t.jsPDF,this.setPageSize()};case\"pageSize\":return this.setPageSize.bind(this,t.pageSize);default:return function(){this.opt[e]=t[e]}}},this);return this.then(function(){return this.thenList(e)})},u.prototype.get=function(t,e){return this.then(function(){var r=t in u.template.prop?this.prop[t]:this.opt[t];return e?e(r):r})},u.prototype.setMargin=function(t){return this.then(function(){switch(a(t)){case\"number\":t=[t,t,t,t];case\"array\":if(2===t.length&&(t=[t[0],t[1],t[0],t[1]]),4===t.length)break;default:return this.error(\"Invalid margin array.\")}this.opt.margin=t}).then(this.setPageSize)},u.prototype.setPageSize=function(t){function e(t,e){return Math.floor(t*e/72*96)}return this.then(function(){(t=t||E.getPageSize(this.opt.jsPDF)).hasOwnProperty(\"inner\")||(t.inner={width:t.width-this.opt.margin[1]-this.opt.margin[3],height:t.height-this.opt.margin[0]-this.opt.margin[2]},t.inner.px={width:e(t.inner.width,t.k),height:e(t.inner.height,t.k)},t.inner.ratio=t.inner.height/t.inner.width),this.prop.pageSize=t})},u.prototype.setProgress=function(t,e,r,n){return null!=t&&(this.progress.val=t),null!=e&&(this.progress.state=e),null!=r&&(this.progress.n=r),null!=n&&(this.progress.stack=n),this.progress.ratio=this.progress.val/this.progress.state,this},u.prototype.updateProgress=function(t,e,r,n){return this.setProgress(t?this.progress.val+t:null,e||null,r?this.progress.n+r:null,n?this.progress.stack.concat(n):null)},u.prototype.then=function(t,e){var r=this;return this.thenCore(t,e,function(t,e){return r.updateProgress(null,null,1,[t]),Promise.prototype.then.call(this,function(e){return r.updateProgress(null,t),e}).then(t,e).then(function(t){return r.updateProgress(1),t})})},u.prototype.thenCore=function(t,e,r){r=r||Promise.prototype.then;var n=this;t&&(t=t.bind(n)),e&&(e=e.bind(n));var i=-1!==Promise.toString().indexOf(\"[native code]\")&&\"Promise\"===Promise.name?n:u.convert(Object.assign({},n),Promise.prototype),a=r.call(i,t,e);return u.convert(a,n.__proto__)},u.prototype.thenExternal=function(t,e){return Promise.prototype.then.call(this,t,e)},u.prototype.thenList=function(t){var e=this;return t.forEach(function(t){e=e.thenCore(t)}),e},u.prototype.catch=function(t){t&&(t=t.bind(this));var e=Promise.prototype.catch.call(this,t);return u.convert(e,this)},u.prototype.catchExternal=function(t){return Promise.prototype.catch.call(this,t)},u.prototype.error=function(t){return this.then(function(){throw new Error(t)})},u.prototype.using=u.prototype.set,u.prototype.saveAs=u.prototype.save,u.prototype.export=u.prototype.output,u.prototype.run=u.prototype.then,E.getPageSize=function(e,r,n){if(\"object\"===(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(e)){var i=e;e=i.orientation,r=i.unit||r,n=i.format||n}r=r||\"mm\",n=n||\"a4\",e=(\"\"+(e||\"P\")).toLowerCase();var a,o=(\"\"+n).toLowerCase(),s={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],\"government-letter\":[576,756],legal:[612,1008],\"junior-legal\":[576,360],ledger:[1224,792],tabloid:[792,1224],\"credit-card\":[153,243]};switch(r){case\"pt\":a=1;break;case\"mm\":a=72/25.4;break;case\"cm\":a=72/2.54;break;case\"in\":a=72;break;case\"px\":a=.75;break;case\"pc\":case\"em\":a=12;break;case\"ex\":a=6;break;default:throw\"Invalid unit: \"+r}var u,c=0,l=0;if(s.hasOwnProperty(o))c=s[o][1]/a,l=s[o][0]/a;else try{c=n[1],l=n[0]}catch(h){throw new Error(\"Invalid format: \"+n)}if(\"p\"===e||\"portrait\"===e)e=\"p\",l>c&&(u=l,l=c,c=u);else{if(\"l\"!==e&&\"landscape\"!==e)throw\"Invalid orientation: \"+e;e=\"l\",c>l&&(u=l,l=c,c=u)}return{width:l,height:c,unit:r,k:a,orientation:e}},e.html=function(t,e){(e=e||{}).callback=e.callback||function(){},e.html2canvas=e.html2canvas||{},e.html2canvas.canvas=e.html2canvas.canvas||this.canvas,e.jsPDF=e.jsPDF||this,e.fontFaces=e.fontFaces?e.fontFaces.map(Ot):null;var r=new u(e);return e.worker?r:r.from(t).doCallback()}}(E.API),E.API.addJS=function(t){var e,r,n=function(t){for(var e=\"\",r=0;r<t.length;r++){var n=t[r];if(\"(\"===n||\")\"===n){for(var i=0,a=r-1;a>=0&&\"\\\\\"===t[a];a--)i++;e+=i%2==0?\"\\\\\"+n:n}else e+=n}return e}(t);return this.internal.events.subscribe(\"postPutResources\",function(){e=this.internal.newObject(),this.internal.out(\"<<\"),this.internal.out(\"/Names [(EmbeddedJS) \"+(e+1)+\" 0 R]\"),this.internal.out(\">>\"),this.internal.out(\"endobj\"),r=this.internal.newObject(),this.internal.out(\"<<\"),this.internal.out(\"/S /JavaScript\"),this.internal.out(\"/JS (\"+n+\")\"),this.internal.out(\">>\"),this.internal.out(\"endobj\")}),this.internal.events.subscribe(\"putCatalog\",function(){void 0!==e&&void 0!==r&&this.internal.out(\"/Names <</JavaScript \"+e+\" 0 R>>\")}),this},\n/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(t){var e;t.events.push([\"postPutResources\",function(){var t=this,r=/^(\\d+) 0 obj$/;if(this.outline.root.children.length>0)for(var n=t.outline.render().split(/\\r\\n/),i=0;i<n.length;i++){var a=n[i],o=r.exec(a);if(null!=o){var s=o[1];t.internal.newObjectDeferredBegin(s,!1)}t.internal.write(a)}if(this.outline.createNamedDestinations){var u=this.internal.pages.length,c=[];for(i=0;i<u;i++){var l=t.internal.newObject();c.push(l);var h=t.internal.getPageInfo(i+1);t.internal.write(\"<< /D[\"+h.objId+\" 0 R /XYZ null null null]>> endobj\")}var f=t.internal.newObject();for(t.internal.write(\"<< /Names [ \"),i=0;i<c.length;i++)t.internal.write(\"(page_\"+(i+1)+\")\"+c[i]+\" 0 R\");t.internal.write(\" ] >>\",\"endobj\"),e=t.internal.newObject(),t.internal.write(\"<< /Dests \"+f+\" 0 R\"),t.internal.write(\">>\",\"endobj\")}}]),t.events.push([\"putCatalog\",function(){var t=this;t.outline.root.children.length>0&&(t.internal.write(\"/Outlines\",this.outline.makeRef(this.outline.root)),this.outline.createNamedDestinations&&t.internal.write(\"/Names \"+e+\" 0 R\"))}]),t.events.push([\"initialized\",function(){var t=this;t.outline={createNamedDestinations:!1,root:{children:[]}},t.outline.add=function(t,e,r){var n={title:e,options:r,children:[]};return null==t&&(t=this.root),t.children.push(n),n},t.outline.render=function(){return this.ctx={},this.ctx.val=\"\",this.ctx.pdf=t,this.genIds_r(this.root),this.renderRoot(this.root),this.renderItems(this.root),this.ctx.val},t.outline.genIds_r=function(e){e.id=t.internal.newObjectDeferred();for(var r=0;r<e.children.length;r++)this.genIds_r(e.children[r])},t.outline.renderRoot=function(t){this.objStart(t),this.line(\"/Type /Outlines\"),t.children.length>0&&(this.line(\"/First \"+this.makeRef(t.children[0])),this.line(\"/Last \"+this.makeRef(t.children[t.children.length-1]))),this.line(\"/Count \"+this.count_r({count:0},t)),this.objEnd()},t.outline.renderItems=function(e){for(var r=this.ctx.pdf.internal.getVerticalCoordinateString,n=0;n<e.children.length;n++){var i=e.children[n];this.objStart(i),this.line(\"/Title \"+this.makeString(i.title)),this.line(\"/Parent \"+this.makeRef(e)),n>0&&this.line(\"/Prev \"+this.makeRef(e.children[n-1])),n<e.children.length-1&&this.line(\"/Next \"+this.makeRef(e.children[n+1])),i.children.length>0&&(this.line(\"/First \"+this.makeRef(i.children[0])),this.line(\"/Last \"+this.makeRef(i.children[i.children.length-1])));var a=this.count=this.count_r({count:0},i);if(a>0&&this.line(\"/Count \"+a),i.options&&i.options.pageNumber){var o=t.internal.getPageInfo(i.options.pageNumber);this.line(\"/Dest [\"+o.objId+\" 0 R /XYZ 0 \"+r(0)+\" 0]\")}this.objEnd()}for(var s=0;s<e.children.length;s++)this.renderItems(e.children[s])},t.outline.line=function(t){this.ctx.val+=t+\"\\r\\n\"},t.outline.makeRef=function(t){return t.id+\" 0 R\"},t.outline.makeString=function(e){return\"(\"+t.internal.pdfEscape(e)+\")\"},t.outline.objStart=function(t){this.ctx.val+=\"\\r\\n\"+t.id+\" 0 obj\\r\\n<<\\r\\n\"},t.outline.objEnd=function(){this.ctx.val+=\">> \\r\\nendobj\\r\\n\"},t.outline.count_r=function(t,e){for(var r=0;r<e.children.length;r++)t.count++,this.count_r(t,e.children[r]);return t.count}}])}(E.API),\n/**\n * @license\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(t){var e=[192,193,194,195,196,197,198,199];t.processJPEG=function(t,r,n,i,a,o){var s,u=this.decode.DCT_DECODE,c=null;if(\"string\"==typeof t||this.__addimage__.isArrayBuffer(t)||this.__addimage__.isArrayBufferView(t)){switch(t=a||t,t=this.__addimage__.isArrayBuffer(t)?new Uint8Array(t):t,s=function(t){for(var r,n=256*t.charCodeAt(4)+t.charCodeAt(5),i=t.length,a={width:0,height:0,numcomponents:1},o=4;o<i;o+=2){if(o+=n,-1!==e.indexOf(t.charCodeAt(o+1))){r=256*t.charCodeAt(o+5)+t.charCodeAt(o+6),a={width:256*t.charCodeAt(o+7)+t.charCodeAt(o+8),height:r,numcomponents:t.charCodeAt(o+9)};break}n=256*t.charCodeAt(o+2)+t.charCodeAt(o+3)}return a}(t=this.__addimage__.isArrayBufferView(t)?this.__addimage__.arrayBufferToBinaryString(t):t),s.numcomponents){case 1:o=this.color_spaces.DEVICE_GRAY;break;case 4:o=this.color_spaces.DEVICE_CMYK;break;case 3:o=this.color_spaces.DEVICE_RGB}c={data:t,width:s.width,height:s.height,colorSpace:o,bitsPerComponent:8,filter:u,index:r,alias:n}}return c}}(E.API),E.API.processPNG=function(t,i,a,o){if(this.__addimage__.isArrayBuffer(t)&&(t=new Uint8Array(t)),this.__addimage__.isArrayBufferView(t)){var s,u=(0,fast_png__WEBPACK_IMPORTED_MODULE_2__.decode)(t,{checkCrc:!0}),c=u.width,l=u.height,h=u.channels,f=u.palette,d=u.depth;s=f&&1===h?function(t){for(var e=t.width,n=t.height,i=t.data,a=t.palette,o=t.depth,s=!1,u=[],c=[],l=void 0,h=!1,f=0,d=0;d<a.length;d++){var p=(0,_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(a[d],4),g=p[0],m=p[1],v=p[2],b=p[3];u.push(g,m,v),null!=b&&(0===b?(f++,c.length<1&&c.push(d)):b<255&&(h=!0))}if(h||f>1){s=!0,c=void 0;var y=e*n;l=new Uint8Array(y);for(var w=new DataView(i.buffer),N=0;N<y;N++){var L=ee(w,N,o),x=(0,_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(a[L],4)[3];l[N]=x}}else 0===f&&(c=void 0);return{colorSpace:\"Indexed\",colorsPerPixel:1,sMaskBitsPerComponent:s?8:void 0,colorBytes:i,alphaBytes:l,needSMask:s,palette:u,mask:c}}(u):2===h||4===h?function(t){for(var e=t.data,r=t.width,n=t.height,i=t.channels,a=t.depth,o=2===i?\"DeviceGray\":\"DeviceRGB\",s=i-1,u=r*n,c=s,l=u*c,h=1*u,f=Math.ceil(l*a/8),d=Math.ceil(h*a/8),p=new Uint8Array(f),g=new Uint8Array(d),m=new DataView(e.buffer),v=new DataView(p.buffer),b=new DataView(g.buffer),y=!1,w=0;w<u;w++){for(var N=w*i,L=0;L<c;L++)re(v,ee(m,N+L,a),w*c+L,a);var x=ee(m,N+c,a);x<(1<<a)-1&&(y=!0),re(b,x,1*w,a)}return{colorSpace:o,colorsPerPixel:s,sMaskBitsPerComponent:y?a:void 0,colorBytes:p,alphaBytes:g,needSMask:y}}(u):function(t){var e=t.data,r=1===t.channels?\"DeviceGray\":\"DeviceRGB\";return{colorSpace:r,colorsPerPixel:\"DeviceGray\"===r?1:3,colorBytes:e instanceof Uint16Array?function(t){for(var e=t.length,r=new Uint8Array(2*e),n=new DataView(r.buffer,r.byteOffset,r.byteLength),i=0;i<e;i++)n.setUint16(2*i,t[i],!1);return r}(e):e,needSMask:!1}}(u);var p,g,m,v=s,b=v.colorSpace,y=v.colorsPerPixel,w=v.sMaskBitsPerComponent,N=v.colorBytes,L=v.alphaBytes,x=v.needSMask,A=v.palette,S=v.mask,_=null;return o!==E.API.image_compression.NONE&&\"function\"==typeof fflate__WEBPACK_IMPORTED_MODULE_3__.zlibSync?(_=function(t){var e;switch(t){case E.API.image_compression.FAST:e=11;break;case E.API.image_compression.MEDIUM:e=13;break;case E.API.image_compression.SLOW:e=14;break;default:e=12}return e}(o),p=this.decode.FLATE_DECODE,g=\"/Predictor \".concat(_,\" /Colors \").concat(y,\" /BitsPerComponent \").concat(d,\" /Columns \").concat(c),t=Yt(N,Math.ceil(c*y*d/8),y,d,o),x&&(m=Yt(L,Math.ceil(c*w/8),1,w,o))):(p=void 0,g=void 0,t=N,x&&(m=L)),(this.__addimage__.isArrayBuffer(t)||this.__addimage__.isArrayBufferView(t))&&(t=this.__addimage__.arrayBufferToBinaryString(t)),(m&&this.__addimage__.isArrayBuffer(m)||this.__addimage__.isArrayBufferView(m))&&(m=this.__addimage__.arrayBufferToBinaryString(m)),{alias:a,data:t,index:i,filter:p,decodeParameters:g,transparency:S,palette:A,sMask:m,predictor:_,width:c,height:l,bitsPerComponent:d,sMaskBitsPerComponent:w,colorSpace:b}}},function(t){t.processGIF89A=function(e,r,n,i){var a=new ie(e),o=a.width,s=a.height,u=[];a.decodeAndBlitFrameRGBA(0,u);var c={data:u,width:o,height:s},l=new oe(100).encode(c,100);return t.processJPEG.call(this,l,r,n,i)},t.processGIF87A=t.processGIF89A}(E.API),se.prototype.parseHeader=function(){if(this.fileSize=this.datav.getUint32(this.pos,!0),this.pos+=4,this.reserved=this.datav.getUint32(this.pos,!0),this.pos+=4,this.offset=this.datav.getUint32(this.pos,!0),this.pos+=4,this.headerSize=this.datav.getUint32(this.pos,!0),this.pos+=4,this.width=this.datav.getUint32(this.pos,!0),this.pos+=4,this.height=this.datav.getInt32(this.pos,!0),this.pos+=4,this.planes=this.datav.getUint16(this.pos,!0),this.pos+=2,this.bitPP=this.datav.getUint16(this.pos,!0),this.pos+=2,this.compress=this.datav.getUint32(this.pos,!0),this.pos+=4,this.rawSize=this.datav.getUint32(this.pos,!0),this.pos+=4,this.hr=this.datav.getUint32(this.pos,!0),this.pos+=4,this.vr=this.datav.getUint32(this.pos,!0),this.pos+=4,this.colors=this.datav.getUint32(this.pos,!0),this.pos+=4,this.importantColors=this.datav.getUint32(this.pos,!0),this.pos+=4,16===this.bitPP&&this.is_with_alpha&&(this.bitPP=15),this.bitPP<15){var t=0===this.colors?1<<this.bitPP:this.colors;this.palette=new Array(t);for(var e=0;e<t;e++){var r=this.datav.getUint8(this.pos++,!0),n=this.datav.getUint8(this.pos++,!0),i=this.datav.getUint8(this.pos++,!0),a=this.datav.getUint8(this.pos++,!0);this.palette[e]={red:i,green:n,blue:r,quad:a}}}this.height<0&&(this.height*=-1,this.bottom_up=!1)},se.prototype.parseBGR=function(){this.pos=this.offset;var t=\"bit\"+this.bitPP,e=this.width*this.height*4;if(e>536870912)throw new Error(\"Image dimensions exceed 512MB, which is too large.\");this.data=new Uint8Array(e);try{this[t]()}catch(r){o.log(\"bit decode error:\"+r)}},se.prototype.bit1=function(){var t,e=Math.ceil(this.width/8),r=e%4;for(t=this.height-1;t>=0;t--){for(var n=this.bottom_up?t:this.height-1-t,i=0;i<e;i++)for(var a=this.datav.getUint8(this.pos++,!0),o=n*this.width*4+8*i*4,s=0;s<8&&8*i+s<this.width;s++){var u=this.palette[a>>7-s&1];this.data[o+4*s]=u.blue,this.data[o+4*s+1]=u.green,this.data[o+4*s+2]=u.red,this.data[o+4*s+3]=255}0!==r&&(this.pos+=4-r)}},se.prototype.bit4=function(){for(var t=Math.ceil(this.width/2),e=t%4,r=this.height-1;r>=0;r--){for(var n=this.bottom_up?r:this.height-1-r,i=0;i<t;i++){var a=this.datav.getUint8(this.pos++,!0),o=n*this.width*4+2*i*4,s=a>>4,u=15&a,c=this.palette[s];if(this.data[o]=c.blue,this.data[o+1]=c.green,this.data[o+2]=c.red,this.data[o+3]=255,2*i+1>=this.width)break;c=this.palette[u],this.data[o+4]=c.blue,this.data[o+4+1]=c.green,this.data[o+4+2]=c.red,this.data[o+4+3]=255}0!==e&&(this.pos+=4-e)}},se.prototype.bit8=function(){for(var t=this.width%4,e=this.height-1;e>=0;e--){for(var r=this.bottom_up?e:this.height-1-e,n=0;n<this.width;n++){var i=this.datav.getUint8(this.pos++,!0),a=r*this.width*4+4*n;if(i<this.palette.length){var o=this.palette[i];this.data[a]=o.red,this.data[a+1]=o.green,this.data[a+2]=o.blue,this.data[a+3]=255}else this.data[a]=255,this.data[a+1]=255,this.data[a+2]=255,this.data[a+3]=255}0!==t&&(this.pos+=4-t)}},se.prototype.bit15=function(){for(var t=this.width%3,e=parseInt(\"11111\",2),r=this.height-1;r>=0;r--){for(var n=this.bottom_up?r:this.height-1-r,i=0;i<this.width;i++){var a=this.datav.getUint16(this.pos,!0);this.pos+=2;var o=(a&e)/e*255|0,s=(a>>5&e)/e*255|0,u=(a>>10&e)/e*255|0,c=a>>15?255:0,l=n*this.width*4+4*i;this.data[l]=u,this.data[l+1]=s,this.data[l+2]=o,this.data[l+3]=c}this.pos+=t}},se.prototype.bit16=function(){for(var t=this.width%3,e=parseInt(\"11111\",2),r=parseInt(\"111111\",2),n=this.height-1;n>=0;n--){for(var i=this.bottom_up?n:this.height-1-n,a=0;a<this.width;a++){var o=this.datav.getUint16(this.pos,!0);this.pos+=2;var s=(o&e)/e*255|0,u=(o>>5&r)/r*255|0,c=(o>>11)/e*255|0,l=i*this.width*4+4*a;this.data[l]=c,this.data[l+1]=u,this.data[l+2]=s,this.data[l+3]=255}this.pos+=t}},se.prototype.bit24=function(){for(var t=this.height-1;t>=0;t--){for(var e=this.bottom_up?t:this.height-1-t,r=0;r<this.width;r++){var n=this.datav.getUint8(this.pos++,!0),i=this.datav.getUint8(this.pos++,!0),a=this.datav.getUint8(this.pos++,!0),o=e*this.width*4+4*r;this.data[o]=a,this.data[o+1]=i,this.data[o+2]=n,this.data[o+3]=255}this.pos+=this.width%4}},se.prototype.bit32=function(){for(var t=this.height-1;t>=0;t--)for(var e=this.bottom_up?t:this.height-1-t,r=0;r<this.width;r++){var n=this.datav.getUint8(this.pos++,!0),i=this.datav.getUint8(this.pos++,!0),a=this.datav.getUint8(this.pos++,!0),o=this.datav.getUint8(this.pos++,!0),s=e*this.width*4+4*r;this.data[s]=a,this.data[s+1]=i,this.data[s+2]=n,this.data[s+3]=o}},se.prototype.getData=function(){return this.data},\n/**\n * @license\n * Copyright (c) 2018 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(t){t.processBMP=function(e,r,n,i){var a=new se(e,!1),o=a.width,s=a.height,u={data:a.getData(),width:o,height:s},c=new oe(100).encode(u,100);return t.processJPEG.call(this,c,r,n,i)}}(E.API),ue.prototype.getData=function(){return this.data},\n/**\n * @license\n * Copyright (c) 2019 Aras Abbasi\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(t){t.processWEBP=function(e,r,n,i){var a=new ue(e),o=a.width,s=a.height,u={data:a.getData(),width:o,height:s},c=new oe(100).encode(u,100);return t.processJPEG.call(this,c,r,n,i)}}(E.API),E.API.processRGBA=function(t,e,r){for(var n=t.data,i=n.length,a=new Uint8Array(i/4*3),o=new Uint8Array(i/4),s=0,u=0,c=0;c<i;c+=4){var l=n[c],h=n[c+1],f=n[c+2],d=n[c+3];a[s++]=l,a[s++]=h,a[s++]=f,o[u++]=d}var p=this.__addimage__.arrayBufferToBinaryString(a);return{alpha:this.__addimage__.arrayBufferToBinaryString(o),data:p,index:e,alias:r,colorSpace:\"DeviceRGB\",bitsPerComponent:8,width:t.width,height:t.height}},E.API.setLanguage=function(t){return void 0===this.internal.languageSettings&&(this.internal.languageSettings={},this.internal.languageSettings.isSubscribed=!1),void 0!=={af:\"Afrikaans\",sq:\"Albanian\",ar:\"Arabic (Standard)\",\"ar-DZ\":\"Arabic (Algeria)\",\"ar-BH\":\"Arabic (Bahrain)\",\"ar-EG\":\"Arabic (Egypt)\",\"ar-IQ\":\"Arabic (Iraq)\",\"ar-JO\":\"Arabic (Jordan)\",\"ar-KW\":\"Arabic (Kuwait)\",\"ar-LB\":\"Arabic (Lebanon)\",\"ar-LY\":\"Arabic (Libya)\",\"ar-MA\":\"Arabic (Morocco)\",\"ar-OM\":\"Arabic (Oman)\",\"ar-QA\":\"Arabic (Qatar)\",\"ar-SA\":\"Arabic (Saudi Arabia)\",\"ar-SY\":\"Arabic (Syria)\",\"ar-TN\":\"Arabic (Tunisia)\",\"ar-AE\":\"Arabic (U.A.E.)\",\"ar-YE\":\"Arabic (Yemen)\",an:\"Aragonese\",hy:\"Armenian\",as:\"Assamese\",ast:\"Asturian\",az:\"Azerbaijani\",eu:\"Basque\",be:\"Belarusian\",bn:\"Bengali\",bs:\"Bosnian\",br:\"Breton\",bg:\"Bulgarian\",my:\"Burmese\",ca:\"Catalan\",ch:\"Chamorro\",ce:\"Chechen\",zh:\"Chinese\",\"zh-HK\":\"Chinese (Hong Kong)\",\"zh-CN\":\"Chinese (PRC)\",\"zh-SG\":\"Chinese (Singapore)\",\"zh-TW\":\"Chinese (Taiwan)\",cv:\"Chuvash\",co:\"Corsican\",cr:\"Cree\",hr:\"Croatian\",cs:\"Czech\",da:\"Danish\",nl:\"Dutch (Standard)\",\"nl-BE\":\"Dutch (Belgian)\",en:\"English\",\"en-AU\":\"English (Australia)\",\"en-BZ\":\"English (Belize)\",\"en-CA\":\"English (Canada)\",\"en-IE\":\"English (Ireland)\",\"en-JM\":\"English (Jamaica)\",\"en-NZ\":\"English (New Zealand)\",\"en-PH\":\"English (Philippines)\",\"en-ZA\":\"English (South Africa)\",\"en-TT\":\"English (Trinidad & Tobago)\",\"en-GB\":\"English (United Kingdom)\",\"en-US\":\"English (United States)\",\"en-ZW\":\"English (Zimbabwe)\",eo:\"Esperanto\",et:\"Estonian\",fo:\"Faeroese\",fj:\"Fijian\",fi:\"Finnish\",fr:\"French (Standard)\",\"fr-BE\":\"French (Belgium)\",\"fr-CA\":\"French (Canada)\",\"fr-FR\":\"French (France)\",\"fr-LU\":\"French (Luxembourg)\",\"fr-MC\":\"French (Monaco)\",\"fr-CH\":\"French (Switzerland)\",fy:\"Frisian\",fur:\"Friulian\",gd:\"Gaelic (Scots)\",\"gd-IE\":\"Gaelic (Irish)\",gl:\"Galacian\",ka:\"Georgian\",de:\"German (Standard)\",\"de-AT\":\"German (Austria)\",\"de-DE\":\"German (Germany)\",\"de-LI\":\"German (Liechtenstein)\",\"de-LU\":\"German (Luxembourg)\",\"de-CH\":\"German (Switzerland)\",el:\"Greek\",gu:\"Gujurati\",ht:\"Haitian\",he:\"Hebrew\",hi:\"Hindi\",hu:\"Hungarian\",is:\"Icelandic\",id:\"Indonesian\",iu:\"Inuktitut\",ga:\"Irish\",it:\"Italian (Standard)\",\"it-CH\":\"Italian (Switzerland)\",ja:\"Japanese\",kn:\"Kannada\",ks:\"Kashmiri\",kk:\"Kazakh\",km:\"Khmer\",ky:\"Kirghiz\",tlh:\"Klingon\",ko:\"Korean\",\"ko-KP\":\"Korean (North Korea)\",\"ko-KR\":\"Korean (South Korea)\",la:\"Latin\",lv:\"Latvian\",lt:\"Lithuanian\",lb:\"Luxembourgish\",mk:\"North Macedonia\",ms:\"Malay\",ml:\"Malayalam\",mt:\"Maltese\",mi:\"Maori\",mr:\"Marathi\",mo:\"Moldavian\",nv:\"Navajo\",ng:\"Ndonga\",ne:\"Nepali\",no:\"Norwegian\",nb:\"Norwegian (Bokmal)\",nn:\"Norwegian (Nynorsk)\",oc:\"Occitan\",or:\"Oriya\",om:\"Oromo\",fa:\"Persian\",\"fa-IR\":\"Persian/Iran\",pl:\"Polish\",pt:\"Portuguese\",\"pt-BR\":\"Portuguese (Brazil)\",pa:\"Punjabi\",\"pa-IN\":\"Punjabi (India)\",\"pa-PK\":\"Punjabi (Pakistan)\",qu:\"Quechua\",rm:\"Rhaeto-Romanic\",ro:\"Romanian\",\"ro-MO\":\"Romanian (Moldavia)\",ru:\"Russian\",\"ru-MO\":\"Russian (Moldavia)\",sz:\"Sami (Lappish)\",sg:\"Sango\",sa:\"Sanskrit\",sc:\"Sardinian\",sd:\"Sindhi\",si:\"Singhalese\",sr:\"Serbian\",sk:\"Slovak\",sl:\"Slovenian\",so:\"Somani\",sb:\"Sorbian\",es:\"Spanish\",\"es-AR\":\"Spanish (Argentina)\",\"es-BO\":\"Spanish (Bolivia)\",\"es-CL\":\"Spanish (Chile)\",\"es-CO\":\"Spanish (Colombia)\",\"es-CR\":\"Spanish (Costa Rica)\",\"es-DO\":\"Spanish (Dominican Republic)\",\"es-EC\":\"Spanish (Ecuador)\",\"es-SV\":\"Spanish (El Salvador)\",\"es-GT\":\"Spanish (Guatemala)\",\"es-HN\":\"Spanish (Honduras)\",\"es-MX\":\"Spanish (Mexico)\",\"es-NI\":\"Spanish (Nicaragua)\",\"es-PA\":\"Spanish (Panama)\",\"es-PY\":\"Spanish (Paraguay)\",\"es-PE\":\"Spanish (Peru)\",\"es-PR\":\"Spanish (Puerto Rico)\",\"es-ES\":\"Spanish (Spain)\",\"es-UY\":\"Spanish (Uruguay)\",\"es-VE\":\"Spanish (Venezuela)\",sx:\"Sutu\",sw:\"Swahili\",sv:\"Swedish\",\"sv-FI\":\"Swedish (Finland)\",\"sv-SV\":\"Swedish (Sweden)\",ta:\"Tamil\",tt:\"Tatar\",te:\"Teluga\",th:\"Thai\",tig:\"Tigre\",ts:\"Tsonga\",tn:\"Tswana\",tr:\"Turkish\",tk:\"Turkmen\",uk:\"Ukrainian\",hsb:\"Upper Sorbian\",ur:\"Urdu\",ve:\"Venda\",vi:\"Vietnamese\",vo:\"Volapuk\",wa:\"Walloon\",cy:\"Welsh\",xh:\"Xhosa\",ji:\"Yiddish\",zu:\"Zulu\"}[t]&&(this.internal.languageSettings.languageCode=t,!1===this.internal.languageSettings.isSubscribed&&(this.internal.events.subscribe(\"putCatalog\",function(){this.internal.write(\"/Lang (\"+this.internal.languageSettings.languageCode+\")\")}),this.internal.languageSettings.isSubscribed=!0)),this},zt=E.API,Ut=zt.getCharWidthsArray=function(e,r){var n,i,a=(r=r||{}).font||this.internal.getFont(),o=r.fontSize||this.internal.getFontSize(),s=r.charSpace||this.internal.getCharSpace(),u=r.widths?r.widths:a.metadata.Unicode.widths,c=u.fof?u.fof:1,l=r.kerning?r.kerning:a.metadata.Unicode.kerning,h=l.fof?l.fof:1,f=!1!==r.doKerning,d=0,p=e.length,g=0,m=u[0]||c,v=[];for(n=0;n<p;n++)i=e.charCodeAt(n),\"function\"==typeof a.metadata.widthOfString?v.push((a.metadata.widthOfGlyph(a.metadata.characterToGlyph(i))+s*(1e3/o)||0)/1e3):(d=f&&\"object\"===(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(l[i])&&!isNaN(parseInt(l[i][g],10))?l[i][g]/h:0,v.push((u[i]||m)/c+d)),g=i;return v},Ht=zt.getStringUnitWidth=function(t,e){var r=(e=e||{}).fontSize||this.internal.getFontSize(),n=e.font||this.internal.getFont(),i=e.charSpace||this.internal.getCharSpace();return zt.processArabic&&(t=zt.processArabic(t)),\"function\"==typeof n.metadata.widthOfString?n.metadata.widthOfString(t,r,i)/r:Ut.apply(this,arguments).reduce(function(t,e){return t+e},0)},Wt=function(t,e,r,n){for(var i=[],a=0,o=t.length,s=0;a!==o&&s+e[a]<r;)s+=e[a],a++;i.push(t.slice(0,a));var u=a;for(s=0;a!==o;)s+e[a]>n&&(i.push(t.slice(u,a)),s=0,u=a),s+=e[a],a++;return u!==a&&i.push(t.slice(u,a)),i},Vt=function(t,e,r){r||(r={});var n,i,a,o,s,u,c,l=[],h=[l],f=r.textIndent||0,d=0,p=0,g=t.split(\" \"),m=Ut.apply(this,[\" \",r])[0];if(u=-1===r.lineIndent?g[0].length+2:r.lineIndent||0){var v=Array(u).join(\" \"),b=[];g.map(function(t){(t=t.split(/\\s*\\n/)).length>1?b=b.concat(t.map(function(t,e){return(e&&t.length?\"\\n\":\"\")+t})):b.push(t[0])}),g=b,u=Ht.apply(this,[v,r])}for(a=0,o=g.length;a<o;a++){var y=0;if(n=g[a],u&&\"\\n\"==n[0]&&(n=n.substr(1),y=1),f+d+(p=(i=Ut.apply(this,[n,r])).reduce(function(t,e){return t+e},0))>e||y){if(p>e){for(s=Wt.apply(this,[n,i,e-(f+d),e]),l.push(s.shift()),l=[s.pop()];s.length;)h.push([s.shift()]);p=i.slice(n.length-(l[0]?l[0].length:0)).reduce(function(t,e){return t+e},0)}else l=[n];h.push(l),f=p+u,d=m}else l.push(n),f+=d+p,d=m}return c=u?function(t,e){return(e?v:\"\")+t.join(\" \")}:function(t){return t.join(\" \")},h.map(c)},zt.splitTextToSize=function(t,e,r){var n,i=(r=r||{}).fontSize||this.internal.getFontSize(),a=function(t){if(t.widths&&t.kerning)return{widths:t.widths,kerning:t.kerning};var e=this.internal.getFont(t.fontName,t.fontStyle),r=\"Unicode\";return e.metadata[r]?{widths:e.metadata[r].widths||{0:1},kerning:e.metadata[r].kerning||{}}:{font:e.metadata,fontSize:this.internal.getFontSize(),charSpace:this.internal.getCharSpace()}}.call(this,r);n=Array.isArray(t)?t:String(t).split(/\\r?\\n/);var o=1*this.internal.scaleFactor*e/i;a.textIndent=r.textIndent?1*r.textIndent*this.internal.scaleFactor/i:0,a.lineIndent=r.lineIndent;var s,u,c=[];for(s=0,u=n.length;s<u;s++)c=c.concat(Vt.apply(this,[n[s],o,a]));return c},function(e){e.__fontmetrics__=e.__fontmetrics__||{};for(var r=\"0123456789abcdef\",n=\"klmnopqrstuvwxyz\",i={},a={},o=0;o<16;o++)i[n[o]]=r[o],a[r[o]]=n[o];var s=function(t){return\"0x\"+parseInt(t,10).toString(16)},u=e.__fontmetrics__.compress=function(e){var r,n,i,o,c=[\"{\"];for(var l in e){if(r=e[l],isNaN(parseInt(l,10))?n=\"'\"+l+\"'\":(l=parseInt(l,10),n=(n=s(l).slice(2)).slice(0,-1)+a[n.slice(-1)]),\"number\"==typeof r)r<0?(i=s(r).slice(3),o=\"-\"):(i=s(r).slice(2),o=\"\"),i=o+i.slice(0,-1)+a[i.slice(-1)];else{if(\"object\"!==(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(r))throw new Error(\"Don't know what to do with value type \"+(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(r)+\".\");i=u(r)}c.push(n+i)}return c.push(\"}\"),c.join(\"\")},c=e.__fontmetrics__.uncompress=function(t){if(\"string\"!=typeof t)throw new Error(\"Invalid argument passed to uncompress.\");for(var e,r,n,a,o={},s=1,u=o,c=[],l=\"\",h=\"\",f=t.length-1,d=1;d<f;d+=1)\"'\"==(a=t[d])?e?(n=e.join(\"\"),e=void 0):e=[]:e?e.push(a):\"{\"==a?(c.push([u,n]),u={},n=void 0):\"}\"==a?((r=c.pop())[0][r[1]]=u,n=void 0,u=r[0]):\"-\"==a?s=-1:void 0===n?i.hasOwnProperty(a)?(l+=i[a],n=parseInt(l,16)*s,s=1,l=\"\"):l+=a:i.hasOwnProperty(a)?(h+=i[a],u[n]=parseInt(h,16)*s,s=1,n=void 0,h=\"\"):h+=a;return o},l={codePages:[\"WinAnsiEncoding\"],WinAnsiEncoding:c(\"{19m8n201n9q201o9r201s9l201t9m201u8m201w9n201x9o201y8o202k8q202l8r202m9p202q8p20aw8k203k8t203t8v203u9v2cq8s212m9t15m8w15n9w2dw9s16k8u16l9u17s9z17x8y17y9y}\")},h={Unicode:{Courier:l,\"Courier-Bold\":l,\"Courier-BoldOblique\":l,\"Courier-Oblique\":l,Helvetica:l,\"Helvetica-Bold\":l,\"Helvetica-BoldOblique\":l,\"Helvetica-Oblique\":l,\"Times-Roman\":l,\"Times-Bold\":l,\"Times-BoldItalic\":l,\"Times-Italic\":l}},f={Unicode:{\"Courier-Oblique\":c(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\"Times-BoldItalic\":c(\"{'widths'{k3o2q4ycx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2r202m2n2n3m2o3m2p5n202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5n4l4m4m4m4n4m4o4s4p4m4q4m4r4s4s4y4t2r4u3m4v4m4w3x4x5t4y4s4z4s5k3x5l4s5m4m5n3r5o3x5p4s5q4m5r5t5s4m5t3x5u3x5v2l5w1w5x2l5y3t5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q2l6r3m6s3r6t1w6u1w6v3m6w1w6x4y6y3r6z3m7k3m7l3m7m2r7n2r7o1w7p3r7q2w7r4m7s3m7t2w7u2r7v2n7w1q7x2n7y3t202l3mcl4mal2ram3man3mao3map3mar3mas2lat4uau1uav3maw3way4uaz2lbk2sbl3t'fof'6obo2lbp3tbq3mbr1tbs2lbu1ybv3mbz3mck4m202k3mcm4mcn4mco4mcp4mcq5ycr4mcs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz2w203k6o212m6o2dw2l2cq2l3t3m3u2l17s3x19m3m}'kerning'{cl{4qu5kt5qt5rs17ss5ts}201s{201ss}201t{cks4lscmscnscoscpscls2wu2yu201ts}201x{2wu2yu}2k{201ts}2w{4qx5kx5ou5qx5rs17su5tu}2x{17su5tu5ou}2y{4qx5kx5ou5qx5rs17ss5ts}'fof'-6ofn{17sw5tw5ou5qw5rs}7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qs}3v{17su5tu5os5qs}7p{17su5tu}ck{4qu5kt5qt5rs17ss5ts}4l{4qu5kt5qt5rs17ss5ts}cm{4qu5kt5qt5rs17ss5ts}cn{4qu5kt5qt5rs17ss5ts}co{4qu5kt5qt5rs17ss5ts}cp{4qu5kt5qt5rs17ss5ts}6l{4qu5ou5qw5rt17su5tu}5q{ckuclucmucnucoucpu4lu}5r{ckuclucmucnucoucpu4lu}7q{cksclscmscnscoscps4ls}6p{4qu5ou5qw5rt17sw5tw}ek{4qu5ou5qw5rt17su5tu}el{4qu5ou5qw5rt17su5tu}em{4qu5ou5qw5rt17su5tu}en{4qu5ou5qw5rt17su5tu}eo{4qu5ou5qw5rt17su5tu}ep{4qu5ou5qw5rt17su5tu}es{17ss5ts5qs4qu}et{4qu5ou5qw5rt17sw5tw}eu{4qu5ou5qw5rt17ss5ts}ev{17ss5ts5qs4qu}6z{17sw5tw5ou5qw5rs}fm{17sw5tw5ou5qw5rs}7n{201ts}fo{17sw5tw5ou5qw5rs}fp{17sw5tw5ou5qw5rs}fq{17sw5tw5ou5qw5rs}7r{cksclscmscnscoscps4ls}fs{17sw5tw5ou5qw5rs}ft{17su5tu}fu{17su5tu}fv{17su5tu}fw{17su5tu}fz{cksclscmscnscoscps4ls}}}\"),\"Helvetica-Bold\":c(\"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"),Courier:c(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\"Courier-BoldOblique\":c(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\"Times-Bold\":c(\"{'widths'{k3q2q5ncx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2l202m2n2n3m2o3m2p6o202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5x4l4s4m4m4n4s4o4s4p4m4q3x4r4y4s4y4t2r4u3m4v4y4w4m4x5y4y4s4z4y5k3x5l4y5m4s5n3r5o4m5p4s5q4s5r6o5s4s5t4s5u4m5v2l5w1w5x2l5y3u5z3m6k2l6l3m6m3r6n2w6o3r6p2w6q2l6r3m6s3r6t1w6u2l6v3r6w1w6x5n6y3r6z3m7k3r7l3r7m2w7n2r7o2l7p3r7q3m7r4s7s3m7t3m7u2w7v2r7w1q7x2r7y3o202l3mcl4sal2lam3man3mao3map3mar3mas2lat4uau1yav3maw3tay4uaz2lbk2sbl3t'fof'6obo2lbp3rbr1tbs2lbu2lbv3mbz3mck4s202k3mcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3rek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3m3u2l17s4s19m3m}'kerning'{cl{4qt5ks5ot5qy5rw17sv5tv}201t{cks4lscmscnscoscpscls4wv}2k{201ts}2w{4qu5ku7mu5os5qx5ru17su5tu}2x{17su5tu5ou5qs}2y{4qv5kv7mu5ot5qz5ru17su5tu}'fof'-6o7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qu}3v{17su5tu5os5qu}fu{17su5tu5ou5qu}7p{17su5tu5ou5qu}ck{4qt5ks5ot5qy5rw17sv5tv}4l{4qt5ks5ot5qy5rw17sv5tv}cm{4qt5ks5ot5qy5rw17sv5tv}cn{4qt5ks5ot5qy5rw17sv5tv}co{4qt5ks5ot5qy5rw17sv5tv}cp{4qt5ks5ot5qy5rw17sv5tv}6l{17st5tt5ou5qu}17s{ckuclucmucnucoucpu4lu4wu}5o{ckuclucmucnucoucpu4lu4wu}5q{ckzclzcmzcnzcozcpz4lz4wu}5r{ckxclxcmxcnxcoxcpx4lx4wu}5t{ckuclucmucnucoucpu4lu4wu}7q{ckuclucmucnucoucpu4lu}6p{17sw5tw5ou5qu}ek{17st5tt5qu}el{17st5tt5ou5qu}em{17st5tt5qu}en{17st5tt5qu}eo{17st5tt5qu}ep{17st5tt5ou5qu}es{17ss5ts5qu}et{17sw5tw5ou5qu}eu{17sw5tw5ou5qu}ev{17ss5ts5qu}6z{17sw5tw5ou5qu5rs}fm{17sw5tw5ou5qu5rs}fn{17sw5tw5ou5qu5rs}fo{17sw5tw5ou5qu5rs}fp{17sw5tw5ou5qu5rs}fq{17sw5tw5ou5qu5rs}7r{cktcltcmtcntcotcpt4lt5os}fs{17sw5tw5ou5qu5rs}ft{17su5tu5ou5qu}7m{5os}fv{17su5tu5ou5qu}fw{17su5tu5ou5qu}fz{cksclscmscnscoscps4ls}}}\"),Symbol:c(\"{'widths'{k3uaw4r19m3m2k1t2l2l202m2y2n3m2p5n202q6o3k3m2s2l2t2l2v3r2w1t3m3m2y1t2z1wbk2sbl3r'fof'6o3n3m3o3m3p3m3q3m3r3m3s3m3t3m3u1w3v1w3w3r3x3r3y3r3z2wbp3t3l3m5v2l5x2l5z3m2q4yfr3r7v3k7w1o7x3k}'kerning'{'fof'-6o}}\"),Helvetica:c(\"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\"),\"Helvetica-BoldOblique\":c(\"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"),ZapfDingbats:c(\"{'widths'{k4u2k1w'fof'6o}'kerning'{'fof'-6o}}\"),\"Courier-Bold\":c(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\"Times-Italic\":c(\"{'widths'{k3n2q4ycx2l201n3m201o5t201s2l201t2l201u2l201w3r201x3r201y3r2k1t2l2l202m2n2n3m2o3m2p5n202q5t2r1p2s2l2t2l2u3m2v4n2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w4n3x4n3y4n3z3m4k5w4l3x4m3x4n4m4o4s4p3x4q3x4r4s4s4s4t2l4u2w4v4m4w3r4x5n4y4m4z4s5k3x5l4s5m3x5n3m5o3r5p4s5q3x5r5n5s3x5t3r5u3r5v2r5w1w5x2r5y2u5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q1w6r3m6s3m6t1w6u1w6v2w6w1w6x4s6y3m6z3m7k3m7l3m7m2r7n2r7o1w7p3m7q2w7r4m7s2w7t2w7u2r7v2s7w1v7x2s7y3q202l3mcl3xal2ram3man3mao3map3mar3mas2lat4wau1vav3maw4nay4waz2lbk2sbl4n'fof'6obo2lbp3mbq3obr1tbs2lbu1zbv3mbz3mck3x202k3mcm3xcn3xco3xcp3xcq5tcr4mcs3xct3xcu3xcv3xcw2l2m2ucy2lcz2ldl4mdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr4nfs3mft3mfu3mfv3mfw3mfz2w203k6o212m6m2dw2l2cq2l3t3m3u2l17s3r19m3m}'kerning'{cl{5kt4qw}201s{201sw}201t{201tw2wy2yy6q-t}201x{2wy2yy}2k{201tw}2w{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}2x{17ss5ts5os}2y{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}'fof'-6o6t{17ss5ts5qs}7t{5os}3v{5qs}7p{17su5tu5qs}ck{5kt4qw}4l{5kt4qw}cm{5kt4qw}cn{5kt4qw}co{5kt4qw}cp{5kt4qw}6l{4qs5ks5ou5qw5ru17su5tu}17s{2ks}5q{ckvclvcmvcnvcovcpv4lv}5r{ckuclucmucnucoucpu4lu}5t{2ks}6p{4qs5ks5ou5qw5ru17su5tu}ek{4qs5ks5ou5qw5ru17su5tu}el{4qs5ks5ou5qw5ru17su5tu}em{4qs5ks5ou5qw5ru17su5tu}en{4qs5ks5ou5qw5ru17su5tu}eo{4qs5ks5ou5qw5ru17su5tu}ep{4qs5ks5ou5qw5ru17su5tu}es{5ks5qs4qs}et{4qs5ks5ou5qw5ru17su5tu}eu{4qs5ks5qw5ru17su5tu}ev{5ks5qs4qs}ex{17ss5ts5qs}6z{4qv5ks5ou5qw5ru17su5tu}fm{4qv5ks5ou5qw5ru17su5tu}fn{4qv5ks5ou5qw5ru17su5tu}fo{4qv5ks5ou5qw5ru17su5tu}fp{4qv5ks5ou5qw5ru17su5tu}fq{4qv5ks5ou5qw5ru17su5tu}7r{5os}fs{4qv5ks5ou5qw5ru17su5tu}ft{17su5tu5qs}fu{17su5tu5qs}fv{17su5tu5qs}fw{17su5tu5qs}}}\"),\"Times-Roman\":c(\"{'widths'{k3n2q4ycx2l201n3m201o6o201s2l201t2l201u2l201w2w201x2w201y2w2k1t2l2l202m2n2n3m2o3m2p5n202q6o2r1m2s2l2t2l2u3m2v3s2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v1w3w3s3x3s3y3s3z2w4k5w4l4s4m4m4n4m4o4s4p3x4q3r4r4s4s4s4t2l4u2r4v4s4w3x4x5t4y4s4z4s5k3r5l4s5m4m5n3r5o3x5p4s5q4s5r5y5s4s5t4s5u3x5v2l5w1w5x2l5y2z5z3m6k2l6l2w6m3m6n2w6o3m6p2w6q2l6r3m6s3m6t1w6u1w6v3m6w1w6x4y6y3m6z3m7k3m7l3m7m2l7n2r7o1w7p3m7q3m7r4s7s3m7t3m7u2w7v3k7w1o7x3k7y3q202l3mcl4sal2lam3man3mao3map3mar3mas2lat4wau1vav3maw3say4waz2lbk2sbl3s'fof'6obo2lbp3mbq2xbr1tbs2lbu1zbv3mbz2wck4s202k3mcm4scn4sco4scp4scq5tcr4mcs3xct3xcu3xcv3xcw2l2m2tcy2lcz2ldl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek2wel2wem2wen2weo2wep2weq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr3sfs3mft3mfu3mfv3mfw3mfz3m203k6o212m6m2dw2l2cq2l3t3m3u1w17s4s19m3m}'kerning'{cl{4qs5ku17sw5ou5qy5rw201ss5tw201ws}201s{201ss}201t{ckw4lwcmwcnwcowcpwclw4wu201ts}2k{201ts}2w{4qs5kw5os5qx5ru17sx5tx}2x{17sw5tw5ou5qu}2y{4qs5kw5os5qx5ru17sx5tx}'fof'-6o7t{ckuclucmucnucoucpu4lu5os5rs}3u{17su5tu5qs}3v{17su5tu5qs}7p{17sw5tw5qs}ck{4qs5ku17sw5ou5qy5rw201ss5tw201ws}4l{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cm{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cn{4qs5ku17sw5ou5qy5rw201ss5tw201ws}co{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cp{4qs5ku17sw5ou5qy5rw201ss5tw201ws}6l{17su5tu5os5qw5rs}17s{2ktclvcmvcnvcovcpv4lv4wuckv}5o{ckwclwcmwcnwcowcpw4lw4wu}5q{ckyclycmycnycoycpy4ly4wu5ms}5r{cktcltcmtcntcotcpt4lt4ws}5t{2ktclvcmvcnvcovcpv4lv4wuckv}7q{cksclscmscnscoscps4ls}6p{17su5tu5qw5rs}ek{5qs5rs}el{17su5tu5os5qw5rs}em{17su5tu5os5qs5rs}en{17su5qs5rs}eo{5qs5rs}ep{17su5tu5os5qw5rs}es{5qs}et{17su5tu5qw5rs}eu{17su5tu5qs5rs}ev{5qs}6z{17sv5tv5os5qx5rs}fm{5os5qt5rs}fn{17sv5tv5os5qx5rs}fo{17sv5tv5os5qx5rs}fp{5os5qt5rs}fq{5os5qt5rs}7r{ckuclucmucnucoucpu4lu5os}fs{17sv5tv5os5qx5rs}ft{17ss5ts5qs}fu{17sw5tw5qs}fv{17sw5tw5qs}fw{17ss5ts5qs}fz{ckuclucmucnucoucpu4lu5os5rs}}}\"),\"Helvetica-Oblique\":c(\"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\")}};e.events.push([\"addFont\",function(t){var e=t.font,r=f.Unicode[e.postScriptName];r&&(e.metadata.Unicode={},e.metadata.Unicode.widths=r.widths,e.metadata.Unicode.kerning=r.kerning);var n=h.Unicode[e.postScriptName];n&&(e.metadata.Unicode.encoding=n,e.encoding=n.codePages[0])}])}(E.API),\n/**\n * @license\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(t){var e=function(t){for(var e=t.length,r=new Uint8Array(e),n=0;n<e;n++)r[n]=t.charCodeAt(n);return r};t.API.events.push([\"addFont\",function(r){var n=void 0,i=r.font,a=r.instance;if(!i.isStandardFont){if(void 0===a)throw new Error(\"Font does not exist in vFS, import fonts or remove declaration doc.addFont('\"+i.postScriptName+\"').\");if(\"string\"!=typeof(n=!1===a.existsFileInVFS(i.postScriptName)?a.loadFile(i.postScriptName):a.getFileFromVFS(i.postScriptName)))throw new Error(\"Font is not stored as string-data in vFS, import fonts or remove declaration doc.addFont('\"+i.postScriptName+\"').\");!function(r,n){n=/^\\x00\\x01\\x00\\x00/.test(n)?e(n):e(f(n)),r.metadata=t.API.TTFFont.open(n),r.metadata.Unicode=r.metadata.Unicode||{encoding:{},kerning:{},widths:[]},r.metadata.glyIdsUsed=[0]}(i,n)}}])}(E),E.API.addSvgAsImage=function(t,e,r,n,a,s,u,c){if(isNaN(e)||isNaN(r))throw o.error(\"jsPDF.addSvgAsImage: Invalid coordinates\",arguments),new Error(\"Invalid coordinates passed to jsPDF.addSvgAsImage\");if(isNaN(n)||isNaN(a))throw o.error(\"jsPDF.addSvgAsImage: Invalid measurements\",arguments),new Error(\"Invalid measurements (width and/or height) passed to jsPDF.addSvgAsImage\");var l=document.createElement(\"canvas\");l.width=n,l.height=a;var h=l.getContext(\"2d\");h.fillStyle=\"#fff\",h.fillRect(0,0,l.width,l.height);var f={ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0},d=this;return(i.canvg?Promise.resolve(i.canvg):__webpack_require__.e(/*! import() */ \"_app-pages-browser_node_modules_canvg_lib_index_es_js\").then(__webpack_require__.bind(__webpack_require__, /*! canvg */ \"(app-pages-browser)/./node_modules/canvg/lib/index.es.js\"))).catch(function(t){return Promise.reject(new Error(\"Could not load canvg: \"+t))}).then(function(t){return t.default?t.default:t}).then(function(e){return e.fromString(h,t,f)},function(){return Promise.reject(new Error(\"Could not load canvg.\"))}).then(function(t){return t.render(f)}).then(function(){d.addImage(l.toDataURL(\"image/jpeg\",1),e,r,n,a,u,c)})},E.API.putTotalPages=function(t){var e,r=0;parseInt(this.internal.getFont().id.substr(1),10)<15?(e=new RegExp(t,\"g\"),r=this.internal.getNumberOfPages()):(e=new RegExp(this.pdfEscape16(t,this.internal.getFont()),\"g\"),r=this.pdfEscape16(this.internal.getNumberOfPages()+\"\",this.internal.getFont()));for(var n=1;n<=this.internal.getNumberOfPages();n++)for(var i=0;i<this.internal.pages[n].length;i++)this.internal.pages[n][i]=this.internal.pages[n][i].replace(e,r);return this},E.API.viewerPreferences=function(e,r){var n;e=e||{},r=r||!1;var i,a,o,s={HideToolbar:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},HideMenubar:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},HideWindowUI:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},FitWindow:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},CenterWindow:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},DisplayDocTitle:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.4},NonFullScreenPageMode:{defaultValue:\"UseNone\",value:\"UseNone\",type:\"name\",explicitSet:!1,valueSet:[\"UseNone\",\"UseOutlines\",\"UseThumbs\",\"UseOC\"],pdfVersion:1.3},Direction:{defaultValue:\"L2R\",value:\"L2R\",type:\"name\",explicitSet:!1,valueSet:[\"L2R\",\"R2L\"],pdfVersion:1.3},ViewArea:{defaultValue:\"CropBox\",value:\"CropBox\",type:\"name\",explicitSet:!1,valueSet:[\"MediaBox\",\"CropBox\",\"TrimBox\",\"BleedBox\",\"ArtBox\"],pdfVersion:1.4},ViewClip:{defaultValue:\"CropBox\",value:\"CropBox\",type:\"name\",explicitSet:!1,valueSet:[\"MediaBox\",\"CropBox\",\"TrimBox\",\"BleedBox\",\"ArtBox\"],pdfVersion:1.4},PrintArea:{defaultValue:\"CropBox\",value:\"CropBox\",type:\"name\",explicitSet:!1,valueSet:[\"MediaBox\",\"CropBox\",\"TrimBox\",\"BleedBox\",\"ArtBox\"],pdfVersion:1.4},PrintClip:{defaultValue:\"CropBox\",value:\"CropBox\",type:\"name\",explicitSet:!1,valueSet:[\"MediaBox\",\"CropBox\",\"TrimBox\",\"BleedBox\",\"ArtBox\"],pdfVersion:1.4},PrintScaling:{defaultValue:\"AppDefault\",value:\"AppDefault\",type:\"name\",explicitSet:!1,valueSet:[\"AppDefault\",\"None\"],pdfVersion:1.6},Duplex:{defaultValue:\"\",value:\"none\",type:\"name\",explicitSet:!1,valueSet:[\"Simplex\",\"DuplexFlipShortEdge\",\"DuplexFlipLongEdge\",\"none\"],pdfVersion:1.7},PickTrayByPDFSize:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.7},PrintPageRange:{defaultValue:\"\",value:\"\",type:\"array\",explicitSet:!1,valueSet:null,pdfVersion:1.7},NumCopies:{defaultValue:1,value:1,type:\"integer\",explicitSet:!1,valueSet:null,pdfVersion:1.7}},u=Object.keys(s),c=[],l=0,h=0,f=0;function d(t,e){var r,n=!1;for(r=0;r<t.length;r+=1)t[r]===e&&(n=!0);return n}if(void 0===this.internal.viewerpreferences&&(this.internal.viewerpreferences={},this.internal.viewerpreferences.configuration=JSON.parse(JSON.stringify(s)),this.internal.viewerpreferences.isSubscribed=!1),n=this.internal.viewerpreferences.configuration,\"reset\"===e||!0===r){var p=u.length;for(f=0;f<p;f+=1)n[u[f]].value=n[u[f]].defaultValue,n[u[f]].explicitSet=!1}if(\"object\"===(0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(e))for(a in e)if(o=e[a],d(u,a)&&void 0!==o){if(\"boolean\"===n[a].type&&\"boolean\"==typeof o)n[a].value=o;else if(\"name\"===n[a].type&&d(n[a].valueSet,o))n[a].value=o;else if(\"integer\"===n[a].type&&Number.isInteger(o))n[a].value=o;else if(\"array\"===n[a].type){for(l=0;l<o.length;l+=1)if(i=!0,1===o[l].length&&\"number\"==typeof o[l][0])c.push(String(o[l]-1));else if(o[l].length>1){for(h=0;h<o[l].length;h+=1)\"number\"!=typeof o[l][h]&&(i=!1);!0===i&&c.push([o[l][0]-1,o[l][1]-1].join(\" \"))}n[a].value=\"[\"+c.join(\" \")+\"]\"}else n[a].value=n[a].defaultValue;n[a].explicitSet=!0}return!1===this.internal.viewerpreferences.isSubscribed&&(this.internal.events.subscribe(\"putCatalog\",function(){var t,e=[];for(t in n)!0===n[t].explicitSet&&(\"name\"===n[t].type?e.push(\"/\"+t+\" /\"+n[t].value):e.push(\"/\"+t+\" \"+n[t].value));0!==e.length&&this.internal.write(\"/ViewerPreferences\\n<<\\n\"+e.join(\"\\n\")+\"\\n>>\")}),this.internal.viewerpreferences.isSubscribed=!0),this.internal.viewerpreferences.configuration=n,this},E.API.addMetadata=function(t,e){return void 0===this.internal.__metadata__&&(this.internal.__metadata__={metadata:t,namespaceUri:null!=e?e:\"http://jspdf.default.namespaceuri/\",rawXml:\"boolean\"==typeof e&&e},this.internal.events.subscribe(\"putCatalog\",le),this.internal.events.subscribe(\"postPutResources\",ce)),this},function(t){var e=t.API,r=e.pdfEscape16=function(t,e){for(var r,n=e.metadata.Unicode.widths,i=[\"\",\"0\",\"00\",\"000\",\"0000\"],a=[\"\"],o=0,s=t.length;o<s;++o){if(r=e.metadata.characterToGlyph(t.charCodeAt(o)),e.metadata.glyIdsUsed.push(r),e.metadata.toUnicode[r]=t.charCodeAt(o),-1==n.indexOf(r)&&(n.push(r),n.push([parseInt(e.metadata.widthOfGlyph(r),10)])),\"0\"==r)return a.join(\"\");r=r.toString(16),a.push(i[4-r.length],r)}return a.join(\"\")},n=function(t){var e,r,n,i,a,o,s;for(a=\"/CIDInit /ProcSet findresource begin\\n12 dict begin\\nbegincmap\\n/CIDSystemInfo <<\\n /Registry (Adobe)\\n /Ordering (UCS)\\n /Supplement 0\\n>> def\\n/CMapName /Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange\\n<0000><ffff>\\nendcodespacerange\",n=[],o=0,s=(r=Object.keys(t).sort(function(t,e){return t-e})).length;o<s;o++)e=r[o],n.length>=100&&(a+=\"\\n\"+n.length+\" beginbfchar\\n\"+n.join(\"\\n\")+\"\\nendbfchar\",n=[]),void 0!==t[e]&&null!==t[e]&&\"function\"==typeof t[e].toString&&(i=(\"0000\"+t[e].toString(16)).slice(-4),e=(\"0000\"+(+e).toString(16)).slice(-4),n.push(\"<\"+e+\"><\"+i+\">\"));return n.length&&(a+=\"\\n\"+n.length+\" beginbfchar\\n\"+n.join(\"\\n\")+\"\\nendbfchar\\n\"),a+\"endcmap\\nCMapName currentdict /CMap defineresource pop\\nend\\nend\"};e.events.push([\"putFont\",function(e){!function(e){var r=e.font,i=e.out,a=e.newObject,o=e.putStream;if(r.metadata instanceof t.API.TTFFont&&\"Identity-H\"===r.encoding){for(var s=r.metadata.Unicode.widths,u=r.metadata.subset.encode(r.metadata.glyIdsUsed,1),c=\"\",l=0;l<u.length;l++)c+=String.fromCharCode(u[l]);var h=a();o({data:c,addLength1:!0,objectId:h}),i(\"endobj\");var f=a();o({data:n(r.metadata.toUnicode),addLength1:!0,objectId:f}),i(\"endobj\");var d=a();i(\"<<\"),i(\"/Type /FontDescriptor\"),i(\"/FontName /\"+C(r.fontName)),i(\"/FontFile2 \"+h+\" 0 R\"),i(\"/FontBBox \"+t.API.PDFObject.convert(r.metadata.bbox)),i(\"/Flags \"+r.metadata.flags),i(\"/StemV \"+r.metadata.stemV),i(\"/ItalicAngle \"+r.metadata.italicAngle),i(\"/Ascent \"+r.metadata.ascender),i(\"/Descent \"+r.metadata.decender),i(\"/CapHeight \"+r.metadata.capHeight),i(\">>\"),i(\"endobj\");var p=a();i(\"<<\"),i(\"/Type /Font\"),i(\"/BaseFont /\"+C(r.fontName)),i(\"/FontDescriptor \"+d+\" 0 R\"),i(\"/W \"+t.API.PDFObject.convert(s)),i(\"/CIDToGIDMap /Identity\"),i(\"/DW 1000\"),i(\"/Subtype /CIDFontType2\"),i(\"/CIDSystemInfo\"),i(\"<<\"),i(\"/Supplement 0\"),i(\"/Registry (Adobe)\"),i(\"/Ordering (\"+r.encoding+\")\"),i(\">>\"),i(\">>\"),i(\"endobj\"),r.objectNumber=a(),i(\"<<\"),i(\"/Type /Font\"),i(\"/Subtype /Type0\"),i(\"/ToUnicode \"+f+\" 0 R\"),i(\"/BaseFont /\"+C(r.fontName)),i(\"/Encoding /\"+r.encoding),i(\"/DescendantFonts [\"+p+\" 0 R]\"),i(\">>\"),i(\"endobj\"),r.isAlreadyPutted=!0}}(e)}]),e.events.push([\"putFont\",function(e){!function(e){var r=e.font,i=e.out,a=e.newObject,o=e.putStream;if(r.metadata instanceof t.API.TTFFont&&\"WinAnsiEncoding\"===r.encoding){for(var s=r.metadata.rawData,u=\"\",c=0;c<s.length;c++)u+=String.fromCharCode(s[c]);var l=a();o({data:u,addLength1:!0,objectId:l}),i(\"endobj\");var h=a();o({data:n(r.metadata.toUnicode),addLength1:!0,objectId:h}),i(\"endobj\");var f=a();i(\"<<\"),i(\"/Descent \"+r.metadata.decender),i(\"/CapHeight \"+r.metadata.capHeight),i(\"/StemV \"+r.metadata.stemV),i(\"/Type /FontDescriptor\"),i(\"/FontFile2 \"+l+\" 0 R\"),i(\"/Flags 96\"),i(\"/FontBBox \"+t.API.PDFObject.convert(r.metadata.bbox)),i(\"/FontName /\"+C(r.fontName)),i(\"/ItalicAngle \"+r.metadata.italicAngle),i(\"/Ascent \"+r.metadata.ascender),i(\">>\"),i(\"endobj\"),r.objectNumber=a();for(var d=0;d<r.metadata.hmtx.widths.length;d++)r.metadata.hmtx.widths[d]=parseInt(r.metadata.hmtx.widths[d]*(1e3/r.metadata.head.unitsPerEm));i(\"<</Subtype/TrueType/Type/Font/ToUnicode \"+h+\" 0 R/BaseFont/\"+C(r.fontName)+\"/FontDescriptor \"+f+\" 0 R/Encoding/\"+r.encoding+\" /FirstChar 29 /LastChar 255 /Widths \"+t.API.PDFObject.convert(r.metadata.hmtx.widths)+\">>\"),i(\"endobj\"),r.isAlreadyPutted=!0}}(e)}]);var i=function(t){var e,n=t.text||\"\",i=t.x,a=t.y,o=t.options||{},s=t.mutex||{},u=s.pdfEscape,c=s.activeFontKey,l=s.fonts,h=c,f=\"\",d=0,p=\"\",g=l[h].encoding;if(\"Identity-H\"!==l[h].encoding)return{text:n,x:i,y:a,options:o,mutex:s};for(p=n,h=c,Array.isArray(n)&&(p=n[0]),d=0;d<p.length;d+=1)l[h].metadata.hasOwnProperty(\"cmap\")&&(e=l[h].metadata.cmap.unicode.codeMap[p[d].charCodeAt(0)]),e||p[d].charCodeAt(0)<256&&l[h].metadata.hasOwnProperty(\"Unicode\")?f+=p[d]:f+=\"\";var m=\"\";return parseInt(h.slice(1))<14||\"WinAnsiEncoding\"===g?m=u(f,h).split(\"\").map(function(t){return t.charCodeAt(0).toString(16)}).join(\"\"):\"Identity-H\"===g&&(m=r(f,l[h])),s.isHex=!0,{text:m,x:i,y:a,options:o,mutex:s}};e.events.push([\"postProcessText\",function(t){var e=t.text||\"\",r=[],n={text:e,x:t.x,y:t.y,options:t.options,mutex:t.mutex};if(Array.isArray(e)){var a=0;for(a=0;a<e.length;a+=1)Array.isArray(e[a])&&3===e[a].length?r.push([i(Object.assign({},n,{text:e[a][0]})).text,e[a][1],e[a][2]]):r.push(i(Object.assign({},n,{text:e[a]})).text);t.text=r}else t.text=i(Object.assign({},n,{text:e})).text}])}(E),\n/**\n * @license\n * jsPDF virtual FileSystem functionality\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(t){var e=function(){return void 0===this.internal.vFS&&(this.internal.vFS={}),!0};t.existsFileInVFS=function(t){return e.call(this),void 0!==this.internal.vFS[t]},t.addFileToVFS=function(t,r){return e.call(this),this.internal.vFS[t]=r,this},t.getFileFromVFS=function(t){return e.call(this),void 0!==this.internal.vFS[t]?this.internal.vFS[t]:null}}(E.API),\n/**\n * @license\n * Unicode Bidi Engine based on the work of Alex Shensis (@asthensis)\n * MIT License\n */\nfunction(t){t.__bidiEngine__=t.prototype.__bidiEngine__=function(t){var r,n,i,a,o,s,u,c=e,l=[[0,3,0,1,0,0,0],[0,3,0,1,2,2,0],[0,3,0,17,2,0,1],[0,3,5,5,4,1,0],[0,3,21,21,4,0,1],[0,3,5,5,4,2,0]],h=[[2,0,1,1,0,1,0],[2,0,1,1,0,2,0],[2,0,2,1,3,2,0],[2,0,2,33,3,1,1]],f={L:0,R:1,EN:2,AN:3,N:4,B:5,S:6},d={0:0,5:1,6:2,7:3,32:4,251:5,254:6,255:7},p=[\"(\",\")\",\"(\",\"<\",\">\",\"<\",\"[\",\"]\",\"[\",\"{\",\"}\",\"{\",\"«\",\"»\",\"«\",\"\",\"\",\"\",\"⁅\",\"⁆\",\"⁅\",\"⁽\",\"⁾\",\"⁽\",\"₍\",\"₎\",\"₍\",\"≤\",\"≥\",\"≤\",\"〈\",\"〉\",\"〈\",\"﹙\",\"﹚\",\"﹙\",\"﹛\",\"﹜\",\"﹛\",\"﹝\",\"﹞\",\"﹝\",\"﹤\",\"﹥\",\"﹤\"],g=new RegExp(/^([1-4|9]|1[0-9]|2[0-9]|3[0168]|4[04589]|5[012]|7[78]|159|16[0-9]|17[0-2]|21[569]|22[03489]|250)$/),m=!1,v=0;this.__bidiEngine__={};var b=function(t){var e=t.charCodeAt(),r=e>>8,n=d[r];return void 0!==n?c[256*n+(255&e)]:252===r||253===r?\"AL\":g.test(r)?\"L\":8===r?\"R\":\"N\"},y=function(t){for(var e,r=0;r<t.length;r++){if(\"L\"===(e=b(t.charAt(r))))return!1;if(\"R\"===e)return!0}return!1},w=function(t,e,o,s){var u,c,l,h,f=e[s];switch(f){case\"L\":case\"R\":case\"LRE\":case\"RLE\":case\"LRO\":case\"RLO\":case\"PDF\":m=!1;break;case\"N\":case\"AN\":break;case\"EN\":m&&(f=\"AN\");break;case\"AL\":m=!0,f=\"R\";break;case\"WS\":case\"BN\":f=\"N\";break;case\"CS\":s<1||s+1>=e.length||\"EN\"!==(u=o[s-1])&&\"AN\"!==u||\"EN\"!==(c=e[s+1])&&\"AN\"!==c?f=\"N\":m&&(c=\"AN\"),f=c===u?c:\"N\";break;case\"ES\":f=\"EN\"===(u=s>0?o[s-1]:\"B\")&&s+1<e.length&&\"EN\"===e[s+1]?\"EN\":\"N\";break;case\"ET\":if(s>0&&\"EN\"===o[s-1]){f=\"EN\";break}if(m){f=\"N\";break}for(l=s+1,h=e.length;l<h&&\"ET\"===e[l];)l++;f=l<h&&\"EN\"===e[l]?\"EN\":\"N\";break;case\"NSM\":if(i&&!a){for(h=e.length,l=s+1;l<h&&\"NSM\"===e[l];)l++;if(l<h){var d=t[s],p=d>=1425&&d<=2303||64286===d;if(u=e[l],p&&(\"R\"===u||\"AL\"===u)){f=\"R\";break}}}f=s<1||\"B\"===(u=e[s-1])?\"N\":o[s-1];break;case\"B\":m=!1,r=!0,f=v;break;case\"S\":n=!0,f=\"N\"}return f},N=function(t,e,r){var n=t.split(\"\");return r&&L(n,r,{hiLevel:v}),n.reverse(),e&&e.reverse(),n.join(\"\")},L=function(t,e,i){var a,o,s,u,c,d=-1,p=t.length,g=0,y=[],N=v?h:l,L=[];for(m=!1,r=!1,n=!1,o=0;o<p;o++)L[o]=b(t[o]);for(s=0;s<p;s++){if(c=g,y[s]=w(t,L,y,s),a=240&(g=N[c][f[y[s]]]),g&=15,e[s]=u=N[g][5],a>0)if(16===a){for(o=d;o<s;o++)e[o]=1;d=-1}else d=-1;if(N[g][6])-1===d&&(d=s);else if(d>-1){for(o=d;o<s;o++)e[o]=u;d=-1}\"B\"===L[s]&&(e[s]=0),i.hiLevel|=u}n&&function(t,e,r){for(var n=0;n<r;n++)if(\"S\"===t[n]){e[n]=v;for(var i=n-1;i>=0&&\"WS\"===t[i];i--)e[i]=v}}(L,e,p)},x=function(t,e,n,i,a){if(!(a.hiLevel<t)){if(1===t&&1===v&&!r)return e.reverse(),void(n&&n.reverse());for(var o,s,u,c,l=e.length,h=0;h<l;){if(i[h]>=t){for(u=h+1;u<l&&i[u]>=t;)u++;for(c=h,s=u-1;c<s;c++,s--)o=e[c],e[c]=e[s],e[s]=o,n&&(o=n[c],n[c]=n[s],n[s]=o);h=u}h++}}},A=function(t,e,r){var n=t.split(\"\"),i={hiLevel:v};return r||(r=[]),L(n,r,i),function(t,e,r){if(0!==r.hiLevel&&u)for(var n,i=0;i<t.length;i++)1===e[i]&&(n=p.indexOf(t[i]))>=0&&(t[i]=p[n+1])}(n,r,i),x(2,n,e,r,i),x(1,n,e,r,i),n.join(\"\")};return this.__bidiEngine__.doBidiReorder=function(t,e,r){if(function(t,e){if(e)for(var r=0;r<t.length;r++)e[r]=r;void 0===a&&(a=y(t)),void 0===s&&(s=y(t))}(t,e),i||!o||s)if(i&&o&&a^s)v=a?1:0,t=N(t,e,r);else if(!i&&o&&s)v=a?1:0,t=A(t,e,r),t=N(t,e);else if(!i||a||o||s){if(i&&!o&&a^s)t=N(t,e),a?(v=0,t=A(t,e,r)):(v=1,t=A(t,e,r),t=N(t,e));else if(i&&a&&!o&&s)v=1,t=A(t,e,r),t=N(t,e);else if(!i&&!o&&a^s){var n=u;a?(v=1,t=A(t,e,r),v=0,u=!1,t=A(t,e,r),u=n):(v=0,t=A(t,e,r),t=N(t,e),v=1,u=!1,t=A(t,e,r),u=n,t=N(t,e))}}else v=0,t=A(t,e,r);else v=a?1:0,t=A(t,e,r);return t},this.__bidiEngine__.setOptions=function(t){t&&(i=t.isInputVisual,o=t.isOutputVisual,a=t.isInputRtl,s=t.isOutputRtl,u=t.isSymmetricSwapping)},this.__bidiEngine__.setOptions(t),this.__bidiEngine__};var e=[\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"S\",\"B\",\"S\",\"WS\",\"B\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"B\",\"B\",\"B\",\"S\",\"WS\",\"N\",\"N\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ES\",\"CS\",\"ES\",\"CS\",\"CS\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"CS\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"B\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"CS\",\"N\",\"ET\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"L\",\"N\",\"N\",\"BN\",\"N\",\"N\",\"ET\",\"ET\",\"EN\",\"EN\",\"N\",\"L\",\"N\",\"N\",\"N\",\"EN\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ET\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"R\",\"NSM\",\"R\",\"NSM\",\"NSM\",\"R\",\"NSM\",\"NSM\",\"R\",\"NSM\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"N\",\"N\",\"N\",\"N\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"N\",\"N\",\"AL\",\"ET\",\"ET\",\"AL\",\"CS\",\"AL\",\"N\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AL\",\"AL\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"ET\",\"AN\",\"AN\",\"AL\",\"AL\",\"AL\",\"NSM\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AN\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AL\",\"AL\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"N\",\"AL\",\"AL\",\"NSM\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"N\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AL\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"R\",\"R\",\"N\",\"N\",\"N\",\"N\",\"R\",\"N\",\"N\",\"N\",\"N\",\"N\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"BN\",\"BN\",\"BN\",\"L\",\"R\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"WS\",\"B\",\"LRE\",\"RLE\",\"PDF\",\"LRO\",\"RLO\",\"CS\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"CS\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"WS\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"N\",\"LRI\",\"RLI\",\"FSI\",\"PDI\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"EN\",\"L\",\"N\",\"N\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"ES\",\"ES\",\"N\",\"N\",\"N\",\"L\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"ES\",\"ES\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"R\",\"NSM\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"ES\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"N\",\"R\",\"N\",\"R\",\"R\",\"N\",\"R\",\"R\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"CS\",\"N\",\"CS\",\"N\",\"N\",\"CS\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ET\",\"N\",\"N\",\"ES\",\"ES\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"N\",\"N\",\"BN\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ES\",\"CS\",\"ES\",\"CS\",\"CS\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"CS\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\"],r=new t.__bidiEngine__({isInputVisual:!0});t.API.events.push([\"postProcessText\",function(t){var e=t.text;t.x,t.y;var n=t.options||{};t.mutex,n.lang;var i=[];if(n.isInputVisual=\"boolean\"!=typeof n.isInputVisual||n.isInputVisual,r.setOptions(n),\"[object Array]\"===Object.prototype.toString.call(e)){var a=0;for(i=[],a=0;a<e.length;a+=1)\"[object Array]\"===Object.prototype.toString.call(e[a])?i.push([r.doBidiReorder(e[a][0]),e[a][1],e[a][2]]):i.push([r.doBidiReorder(e[a])]);t.text=i}else t.text=r.doBidiReorder(e);r.setOptions({isInputVisual:!0})}])}(E),E.API.TTFFont=function(){function t(t){var e;if(this.rawData=t,e=this.contents=new fe(t),this.contents.pos=4,\"ttcf\"===e.readString(4))throw new Error(\"TTCF not supported.\");e.pos=0,this.parse(),this.subset=new Ce(this),this.registerTTF()}return t.open=function(e){return new t(e)},t.prototype.parse=function(){return this.directory=new de(this.contents),this.head=new me(this),this.name=new xe(this),this.cmap=new be(this),this.toUnicode={},this.hhea=new ye(this),this.maxp=new Ae(this),this.hmtx=new Se(this),this.post=new Ne(this),this.os2=new we(this),this.loca=new Ie(this),this.glyf=new Pe(this),this.ascender=this.os2.exists&&this.os2.ascender||this.hhea.ascender,this.decender=this.os2.exists&&this.os2.decender||this.hhea.decender,this.lineGap=this.os2.exists&&this.os2.lineGap||this.hhea.lineGap,this.bbox=[this.head.xMin,this.head.yMin,this.head.xMax,this.head.yMax]},t.prototype.registerTTF=function(){var t,e,r,n,i;if(this.scaleFactor=1e3/this.head.unitsPerEm,this.bbox=function(){var e,r,n,i;for(i=[],e=0,r=(n=this.bbox).length;e<r;e++)t=n[e],i.push(Math.round(t*this.scaleFactor));return i}.call(this),this.stemV=0,this.post.exists?(r=255&(n=this.post.italic_angle),32768&(e=n>>16)&&(e=-(1+(65535^e))),this.italicAngle=+(e+\".\"+r)):this.italicAngle=0,this.ascender=Math.round(this.ascender*this.scaleFactor),this.decender=Math.round(this.decender*this.scaleFactor),this.lineGap=Math.round(this.lineGap*this.scaleFactor),this.capHeight=this.os2.exists&&this.os2.capHeight||this.ascender,this.xHeight=this.os2.exists&&this.os2.xHeight||0,this.familyClass=(this.os2.exists&&this.os2.familyClass||0)>>8,this.isSerif=1===(i=this.familyClass)||2===i||3===i||4===i||5===i||7===i,this.isScript=10===this.familyClass,this.flags=0,this.post.isFixedPitch&&(this.flags|=1),this.isSerif&&(this.flags|=2),this.isScript&&(this.flags|=8),0!==this.italicAngle&&(this.flags|=64),this.flags|=32,!this.cmap.unicode)throw new Error(\"No unicode cmap for font\")},t.prototype.characterToGlyph=function(t){var e;return(null!=(e=this.cmap.unicode)?e.codeMap[t]:void 0)||0},t.prototype.widthOfGlyph=function(t){var e;return e=1e3/this.head.unitsPerEm,this.hmtx.forGlyph(t).advance*e},t.prototype.widthOfString=function(t,e,r){var n,i,a,o;for(a=0,i=0,o=(t=\"\"+t).length;0<=o?i<o:i>o;i=0<=o?++i:--i)n=t.charCodeAt(i),a+=this.widthOfGlyph(this.characterToGlyph(n))+r*(1e3/e)||0;return a*(e/1e3)},t.prototype.lineHeight=function(t,e){var r;return null==e&&(e=!1),r=e?this.lineGap:0,(this.ascender+r-this.decender)/1e3*t},t}();var he,fe=function(){function t(t){this.data=null!=t?t:[],this.pos=0,this.length=this.data.length}return t.prototype.readByte=function(){return this.data[this.pos++]},t.prototype.writeByte=function(t){return this.data[this.pos++]=t},t.prototype.readUInt32=function(){return 16777216*this.readByte()+(this.readByte()<<16)+(this.readByte()<<8)+this.readByte()},t.prototype.writeUInt32=function(t){return this.writeByte(t>>>24&255),this.writeByte(t>>16&255),this.writeByte(t>>8&255),this.writeByte(255&t)},t.prototype.readInt32=function(){var t;return(t=this.readUInt32())>=2147483648?t-4294967296:t},t.prototype.writeInt32=function(t){return t<0&&(t+=4294967296),this.writeUInt32(t)},t.prototype.readUInt16=function(){return this.readByte()<<8|this.readByte()},t.prototype.writeUInt16=function(t){return this.writeByte(t>>8&255),this.writeByte(255&t)},t.prototype.readInt16=function(){var t;return(t=this.readUInt16())>=32768?t-65536:t},t.prototype.writeInt16=function(t){return t<0&&(t+=65536),this.writeUInt16(t)},t.prototype.readString=function(t){var e,r;for(r=[],e=0;0<=t?e<t:e>t;e=0<=t?++e:--e)r[e]=String.fromCharCode(this.readByte());return r.join(\"\")},t.prototype.writeString=function(t){var e,r,n;for(n=[],e=0,r=t.length;0<=r?e<r:e>r;e=0<=r?++e:--e)n.push(this.writeByte(t.charCodeAt(e)));return n},t.prototype.readShort=function(){return this.readInt16()},t.prototype.writeShort=function(t){return this.writeInt16(t)},t.prototype.readLongLong=function(){var t,e,r,n,i,a,o,s;return t=this.readByte(),e=this.readByte(),r=this.readByte(),n=this.readByte(),i=this.readByte(),a=this.readByte(),o=this.readByte(),s=this.readByte(),128&t?-1*(72057594037927940*(255^t)+281474976710656*(255^e)+1099511627776*(255^r)+4294967296*(255^n)+16777216*(255^i)+65536*(255^a)+256*(255^o)+(255^s)+1):72057594037927940*t+281474976710656*e+1099511627776*r+4294967296*n+16777216*i+65536*a+256*o+s},t.prototype.writeLongLong=function(t){var e,r;return e=Math.floor(t/4294967296),r=4294967295&t,this.writeByte(e>>24&255),this.writeByte(e>>16&255),this.writeByte(e>>8&255),this.writeByte(255&e),this.writeByte(r>>24&255),this.writeByte(r>>16&255),this.writeByte(r>>8&255),this.writeByte(255&r)},t.prototype.readInt=function(){return this.readInt32()},t.prototype.writeInt=function(t){return this.writeInt32(t)},t.prototype.read=function(t){var e,r;for(e=[],r=0;0<=t?r<t:r>t;r=0<=t?++r:--r)e.push(this.readByte());return e},t.prototype.write=function(t){var e,r,n,i;for(i=[],r=0,n=t.length;r<n;r++)e=t[r],i.push(this.writeByte(e));return i},t}(),de=function(){var t;function e(t){var e,r,n;for(this.scalarType=t.readInt(),this.tableCount=t.readShort(),this.searchRange=t.readShort(),this.entrySelector=t.readShort(),this.rangeShift=t.readShort(),this.tables={},r=0,n=this.tableCount;0<=n?r<n:r>n;r=0<=n?++r:--r)e={tag:t.readString(4),checksum:t.readInt(),offset:t.readInt(),length:t.readInt()},this.tables[e.tag]=e}return e.prototype.encode=function(e){var r,n,i,a,o,s,u,c,l,h,f,d,p;for(p in f=Object.keys(e).length,s=Math.log(2),l=16*Math.floor(Math.log(f)/s),a=Math.floor(l/s),c=16*f-l,(n=new fe).writeInt(this.scalarType),n.writeShort(f),n.writeShort(l),n.writeShort(a),n.writeShort(c),i=16*f,u=n.pos+i,o=null,d=[],e)for(h=e[p],n.writeString(p),n.writeInt(t(h)),n.writeInt(u),n.writeInt(h.length),d=d.concat(h),\"head\"===p&&(o=u),u+=h.length;u%4;)d.push(0),u++;return n.write(d),r=2981146554-t(n.data),n.pos=o+8,n.writeUInt32(r),n.data},t=function(t){var e,r,n,i;for(t=_e.call(t);t.length%4;)t.push(0);for(n=new fe(t),r=0,e=0,i=t.length;e<i;e=e+=4)r+=n.readUInt32();return 4294967295&r},e}(),pe={}.hasOwnProperty,ge=function(t,e){for(var r in e)pe.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t};he=function(){function t(t){var e;this.file=t,e=this.file.directory.tables[this.tag],this.exists=!!e,e&&(this.offset=e.offset,this.length=e.length,this.parse(this.file.contents))}return t.prototype.parse=function(){},t.prototype.encode=function(){},t.prototype.raw=function(){return this.exists?(this.file.contents.pos=this.offset,this.file.contents.read(this.length)):null},t}();var me=function(){function t(){return t.__super__.constructor.apply(this,arguments)}return ge(t,he),t.prototype.tag=\"head\",t.prototype.parse=function(t){return t.pos=this.offset,this.version=t.readInt(),this.revision=t.readInt(),this.checkSumAdjustment=t.readInt(),this.magicNumber=t.readInt(),this.flags=t.readShort(),this.unitsPerEm=t.readShort(),this.created=t.readLongLong(),this.modified=t.readLongLong(),this.xMin=t.readShort(),this.yMin=t.readShort(),this.xMax=t.readShort(),this.yMax=t.readShort(),this.macStyle=t.readShort(),this.lowestRecPPEM=t.readShort(),this.fontDirectionHint=t.readShort(),this.indexToLocFormat=t.readShort(),this.glyphDataFormat=t.readShort()},t.prototype.encode=function(t){var e;return(e=new fe).writeInt(this.version),e.writeInt(this.revision),e.writeInt(this.checkSumAdjustment),e.writeInt(this.magicNumber),e.writeShort(this.flags),e.writeShort(this.unitsPerEm),e.writeLongLong(this.created),e.writeLongLong(this.modified),e.writeShort(this.xMin),e.writeShort(this.yMin),e.writeShort(this.xMax),e.writeShort(this.yMax),e.writeShort(this.macStyle),e.writeShort(this.lowestRecPPEM),e.writeShort(this.fontDirectionHint),e.writeShort(t),e.writeShort(this.glyphDataFormat),e.data},t}(),ve=function(){function t(t,e){var r,n,i,a,o,s,u,c,l,h,f,d,p,g,m,v,b;switch(this.platformID=t.readUInt16(),this.encodingID=t.readShort(),this.offset=e+t.readInt(),l=t.pos,t.pos=this.offset,this.format=t.readUInt16(),this.length=t.readUInt16(),this.language=t.readUInt16(),this.isUnicode=3===this.platformID&&1===this.encodingID&&4===this.format||0===this.platformID&&4===this.format,this.codeMap={},this.format){case 0:for(s=0;s<256;++s)this.codeMap[s]=t.readByte();break;case 4:for(f=t.readUInt16(),h=f/2,t.pos+=6,i=function(){var e,r;for(r=[],s=e=0;0<=h?e<h:e>h;s=0<=h?++e:--e)r.push(t.readUInt16());return r}(),t.pos+=2,p=function(){var e,r;for(r=[],s=e=0;0<=h?e<h:e>h;s=0<=h?++e:--e)r.push(t.readUInt16());return r}(),u=function(){var e,r;for(r=[],s=e=0;0<=h?e<h:e>h;s=0<=h?++e:--e)r.push(t.readUInt16());return r}(),c=function(){var e,r;for(r=[],s=e=0;0<=h?e<h:e>h;s=0<=h?++e:--e)r.push(t.readUInt16());return r}(),n=(this.length-t.pos+this.offset)/2,o=function(){var e,r;for(r=[],s=e=0;0<=n?e<n:e>n;s=0<=n?++e:--e)r.push(t.readUInt16());return r}(),s=m=0,b=i.length;m<b;s=++m)for(g=i[s],r=v=d=p[s];d<=g?v<=g:v>=g;r=d<=g?++v:--v)0===c[s]?a=r+u[s]:0!==(a=o[c[s]/2+(r-d)-(h-s)]||0)&&(a+=u[s]),this.codeMap[r]=65535&a}t.pos=l}return t.encode=function(t,e){var r,n,i,a,o,s,u,c,l,h,f,d,p,g,m,v,b,y,w,N,L,x,A,S,_,P,k,F,I,C,j,O,B,M,q,E,R,D,T,z,U,H,W,V,G,Y;switch(F=new fe,a=Object.keys(t).sort(function(t,e){return t-e}),e){case\"macroman\":for(p=0,g=function(){var t=[];for(d=0;d<256;++d)t.push(0);return t}(),v={0:0},i={},I=0,B=a.length;I<B;I++)null==v[W=t[n=a[I]]]&&(v[W]=++p),i[n]={old:t[n],new:v[t[n]]},g[n]=v[t[n]];return F.writeUInt16(1),F.writeUInt16(0),F.writeUInt32(12),F.writeUInt16(0),F.writeUInt16(262),F.writeUInt16(0),F.write(g),{charMap:i,subtable:F.data,maxGlyphID:p+1};case\"unicode\":for(P=[],l=[],b=0,v={},r={},m=u=null,C=0,M=a.length;C<M;C++)null==v[w=t[n=a[C]]]&&(v[w]=++b),r[n]={old:w,new:v[w]},o=v[w]-n,null!=m&&o===u||(m&&l.push(m),P.push(n),u=o),m=n;for(m&&l.push(m),l.push(65535),P.push(65535),S=2*(A=P.length),x=2*Math.pow(Math.log(A)/Math.LN2,2),h=Math.log(x/2)/Math.LN2,L=2*A-x,s=[],N=[],f=[],d=j=0,q=P.length;j<q;d=++j){if(_=P[d],c=l[d],65535===_){s.push(0),N.push(0);break}if(_-(k=r[_].new)>=32768)for(s.push(0),N.push(2*(f.length+A-d)),n=O=_;_<=c?O<=c:O>=c;n=_<=c?++O:--O)f.push(r[n].new);else s.push(k-_),N.push(0)}for(F.writeUInt16(3),F.writeUInt16(1),F.writeUInt32(12),F.writeUInt16(4),F.writeUInt16(16+8*A+2*f.length),F.writeUInt16(0),F.writeUInt16(S),F.writeUInt16(x),F.writeUInt16(h),F.writeUInt16(L),U=0,E=l.length;U<E;U++)n=l[U],F.writeUInt16(n);for(F.writeUInt16(0),H=0,R=P.length;H<R;H++)n=P[H],F.writeUInt16(n);for(V=0,D=s.length;V<D;V++)o=s[V],F.writeUInt16(o);for(G=0,T=N.length;G<T;G++)y=N[G],F.writeUInt16(y);for(Y=0,z=f.length;Y<z;Y++)p=f[Y],F.writeUInt16(p);return{charMap:r,subtable:F.data,maxGlyphID:b+1}}},t}(),be=function(){function t(){return t.__super__.constructor.apply(this,arguments)}return ge(t,he),t.prototype.tag=\"cmap\",t.prototype.parse=function(t){var e,r,n;for(t.pos=this.offset,this.version=t.readUInt16(),n=t.readUInt16(),this.tables=[],this.unicode=null,r=0;0<=n?r<n:r>n;r=0<=n?++r:--r)e=new ve(t,this.offset),this.tables.push(e),e.isUnicode&&null==this.unicode&&(this.unicode=e);return!0},t.encode=function(t,e){var r,n;return null==e&&(e=\"macroman\"),r=ve.encode(t,e),(n=new fe).writeUInt16(0),n.writeUInt16(1),r.table=n.data.concat(r.subtable),r},t}(),ye=function(){function t(){return t.__super__.constructor.apply(this,arguments)}return ge(t,he),t.prototype.tag=\"hhea\",t.prototype.parse=function(t){return t.pos=this.offset,this.version=t.readInt(),this.ascender=t.readShort(),this.decender=t.readShort(),this.lineGap=t.readShort(),this.advanceWidthMax=t.readShort(),this.minLeftSideBearing=t.readShort(),this.minRightSideBearing=t.readShort(),this.xMaxExtent=t.readShort(),this.caretSlopeRise=t.readShort(),this.caretSlopeRun=t.readShort(),this.caretOffset=t.readShort(),t.pos+=8,this.metricDataFormat=t.readShort(),this.numberOfMetrics=t.readUInt16()},t}(),we=function(){function t(){return t.__super__.constructor.apply(this,arguments)}return ge(t,he),t.prototype.tag=\"OS/2\",t.prototype.parse=function(t){if(t.pos=this.offset,this.version=t.readUInt16(),this.averageCharWidth=t.readShort(),this.weightClass=t.readUInt16(),this.widthClass=t.readUInt16(),this.type=t.readShort(),this.ySubscriptXSize=t.readShort(),this.ySubscriptYSize=t.readShort(),this.ySubscriptXOffset=t.readShort(),this.ySubscriptYOffset=t.readShort(),this.ySuperscriptXSize=t.readShort(),this.ySuperscriptYSize=t.readShort(),this.ySuperscriptXOffset=t.readShort(),this.ySuperscriptYOffset=t.readShort(),this.yStrikeoutSize=t.readShort(),this.yStrikeoutPosition=t.readShort(),this.familyClass=t.readShort(),this.panose=function(){var e,r;for(r=[],e=0;e<10;++e)r.push(t.readByte());return r}(),this.charRange=function(){var e,r;for(r=[],e=0;e<4;++e)r.push(t.readInt());return r}(),this.vendorID=t.readString(4),this.selection=t.readShort(),this.firstCharIndex=t.readShort(),this.lastCharIndex=t.readShort(),this.version>0&&(this.ascent=t.readShort(),this.descent=t.readShort(),this.lineGap=t.readShort(),this.winAscent=t.readShort(),this.winDescent=t.readShort(),this.codePageRange=function(){var e,r;for(r=[],e=0;e<2;e=++e)r.push(t.readInt());return r}(),this.version>1))return this.xHeight=t.readShort(),this.capHeight=t.readShort(),this.defaultChar=t.readShort(),this.breakChar=t.readShort(),this.maxContext=t.readShort()},t}(),Ne=function(){function t(){return t.__super__.constructor.apply(this,arguments)}return ge(t,he),t.prototype.tag=\"post\",t.prototype.parse=function(t){var e,r,n;switch(t.pos=this.offset,this.format=t.readInt(),this.italicAngle=t.readInt(),this.underlinePosition=t.readShort(),this.underlineThickness=t.readShort(),this.isFixedPitch=t.readInt(),this.minMemType42=t.readInt(),this.maxMemType42=t.readInt(),this.minMemType1=t.readInt(),this.maxMemType1=t.readInt(),this.format){case 65536:case 196608:break;case 131072:var i;for(r=t.readUInt16(),this.glyphNameIndex=[],i=0;0<=r?i<r:i>r;i=0<=r?++i:--i)this.glyphNameIndex.push(t.readUInt16());for(this.names=[],n=[];t.pos<this.offset+this.length;)e=t.readByte(),n.push(this.names.push(t.readString(e)));return n;case 151552:return r=t.readUInt16(),this.offsets=t.read(r);case 262144:return this.map=function(){var e,r,n;for(n=[],i=e=0,r=this.file.maxp.numGlyphs;0<=r?e<r:e>r;i=0<=r?++e:--e)n.push(t.readUInt32());return n}.call(this)}},t}(),Le=function(t,e){this.raw=t,this.length=t.length,this.platformID=e.platformID,this.encodingID=e.encodingID,this.languageID=e.languageID},xe=function(){function t(){return t.__super__.constructor.apply(this,arguments)}return ge(t,he),t.prototype.tag=\"name\",t.prototype.parse=function(t){var e,r,n,i,a,o,s,u,c,l,h;for(t.pos=this.offset,t.readShort(),e=t.readShort(),o=t.readShort(),r=[],i=0;0<=e?i<e:i>e;i=0<=e?++i:--i)r.push({platformID:t.readShort(),encodingID:t.readShort(),languageID:t.readShort(),nameID:t.readShort(),length:t.readShort(),offset:this.offset+o+t.readShort()});for(s={},i=c=0,l=r.length;c<l;i=++c)n=r[i],t.pos=n.offset,u=t.readString(n.length),a=new Le(u,n),null==s[h=n.nameID]&&(s[h]=[]),s[n.nameID].push(a);this.strings=s,this.copyright=s[0],this.fontFamily=s[1],this.fontSubfamily=s[2],this.uniqueSubfamily=s[3],this.fontName=s[4],this.version=s[5];try{this.postscriptName=s[6][0].raw.replace(/[\\x00-\\x19\\x80-\\xff]/g,\"\")}catch(f){this.postscriptName=s[4][0].raw.replace(/[\\x00-\\x19\\x80-\\xff]/g,\"\")}return this.trademark=s[7],this.manufacturer=s[8],this.designer=s[9],this.description=s[10],this.vendorUrl=s[11],this.designerUrl=s[12],this.license=s[13],this.licenseUrl=s[14],this.preferredFamily=s[15],this.preferredSubfamily=s[17],this.compatibleFull=s[18],this.sampleText=s[19]},t}(),Ae=function(){function t(){return t.__super__.constructor.apply(this,arguments)}return ge(t,he),t.prototype.tag=\"maxp\",t.prototype.parse=function(t){return t.pos=this.offset,this.version=t.readInt(),this.numGlyphs=t.readUInt16(),this.maxPoints=t.readUInt16(),this.maxContours=t.readUInt16(),this.maxCompositePoints=t.readUInt16(),this.maxComponentContours=t.readUInt16(),this.maxZones=t.readUInt16(),this.maxTwilightPoints=t.readUInt16(),this.maxStorage=t.readUInt16(),this.maxFunctionDefs=t.readUInt16(),this.maxInstructionDefs=t.readUInt16(),this.maxStackElements=t.readUInt16(),this.maxSizeOfInstructions=t.readUInt16(),this.maxComponentElements=t.readUInt16(),this.maxComponentDepth=t.readUInt16()},t}(),Se=function(){function t(){return t.__super__.constructor.apply(this,arguments)}return ge(t,he),t.prototype.tag=\"hmtx\",t.prototype.parse=function(t){var e,r,n,i,a,o,s;for(t.pos=this.offset,this.metrics=[],e=0,o=this.file.hhea.numberOfMetrics;0<=o?e<o:e>o;e=0<=o?++e:--e)this.metrics.push({advance:t.readUInt16(),lsb:t.readInt16()});for(n=this.file.maxp.numGlyphs-this.file.hhea.numberOfMetrics,this.leftSideBearings=function(){var r,i;for(i=[],e=r=0;0<=n?r<n:r>n;e=0<=n?++r:--r)i.push(t.readInt16());return i}(),this.widths=function(){var t,e,r,n;for(n=[],t=0,e=(r=this.metrics).length;t<e;t++)i=r[t],n.push(i.advance);return n}.call(this),r=this.widths[this.widths.length-1],s=[],e=a=0;0<=n?a<n:a>n;e=0<=n?++a:--a)s.push(this.widths.push(r));return s},t.prototype.forGlyph=function(t){return t in this.metrics?this.metrics[t]:{advance:this.metrics[this.metrics.length-1].advance,lsb:this.leftSideBearings[t-this.metrics.length]}},t}(),_e=[].slice,Pe=function(){function t(){return t.__super__.constructor.apply(this,arguments)}return ge(t,he),t.prototype.tag=\"glyf\",t.prototype.parse=function(){return this.cache={}},t.prototype.glyphFor=function(t){var e,r,n,i,a,o,s,u,c,l;return t in this.cache?this.cache[t]:(i=this.file.loca,e=this.file.contents,r=i.indexOf(t),0===(n=i.lengthOf(t))?this.cache[t]=null:(e.pos=this.offset+r,a=(o=new fe(e.read(n))).readShort(),u=o.readShort(),l=o.readShort(),s=o.readShort(),c=o.readShort(),this.cache[t]=-1===a?new Fe(o,u,l,s,c):new ke(o,a,u,l,s,c),this.cache[t]))},t.prototype.encode=function(t,e,r){var n,i,a,o,s;for(a=[],i=[],o=0,s=e.length;o<s;o++)n=t[e[o]],i.push(a.length),n&&(a=a.concat(n.encode(r)));return i.push(a.length),{table:a,offsets:i}},t}(),ke=function(){function t(t,e,r,n,i,a){this.raw=t,this.numberOfContours=e,this.xMin=r,this.yMin=n,this.xMax=i,this.yMax=a,this.compound=!1}return t.prototype.encode=function(){return this.raw.data},t}(),Fe=function(){function t(t,e,r,n,i){var a,o;for(this.raw=t,this.xMin=e,this.yMin=r,this.xMax=n,this.yMax=i,this.compound=!0,this.glyphIDs=[],this.glyphOffsets=[],a=this.raw;o=a.readShort(),this.glyphOffsets.push(a.pos),this.glyphIDs.push(a.readUInt16()),32&o;)a.pos+=1&o?4:2,128&o?a.pos+=8:64&o?a.pos+=4:8&o&&(a.pos+=2)}return t.prototype.encode=function(){var t,e,r;for(e=new fe(_e.call(this.raw.data)),t=0,r=this.glyphIDs.length;t<r;++t)e.pos=this.glyphOffsets[t];return e.data},t}(),Ie=function(){function t(){return t.__super__.constructor.apply(this,arguments)}return ge(t,he),t.prototype.tag=\"loca\",t.prototype.parse=function(t){var e,r;return t.pos=this.offset,e=this.file.head.indexToLocFormat,this.offsets=0===e?function(){var e,n;for(n=[],r=0,e=this.length;r<e;r+=2)n.push(2*t.readUInt16());return n}.call(this):function(){var e,n;for(n=[],r=0,e=this.length;r<e;r+=4)n.push(t.readUInt32());return n}.call(this)},t.prototype.indexOf=function(t){return this.offsets[t]},t.prototype.lengthOf=function(t){return this.offsets[t+1]-this.offsets[t]},t.prototype.encode=function(t,e){for(var r=new Uint32Array(this.offsets.length),n=0,i=0,a=0;a<r.length;++a)if(r[a]=n,i<e.length&&e[i]==a){++i,r[a]=n;var o=this.offsets[a],s=this.offsets[a+1]-o;s>0&&(n+=s)}for(var u=new Array(4*r.length),c=0;c<r.length;++c)u[4*c+3]=255&r[c],u[4*c+2]=(65280&r[c])>>8,u[4*c+1]=(16711680&r[c])>>16,u[4*c]=(4278190080&r[c])>>24;return u},t}(),Ce=function(){function t(t){this.font=t,this.subset={},this.unicodes={},this.next=33}return t.prototype.generateCmap=function(){var t,e,r,n,i;for(e in n=this.font.cmap.tables[0].codeMap,t={},i=this.subset)r=i[e],t[e]=n[r];return t},t.prototype.glyphsFor=function(t){var e,r,n,i,a,o,s;for(n={},a=0,o=t.length;a<o;a++)n[i=t[a]]=this.font.glyf.glyphFor(i);for(i in e=[],n)(null!=(r=n[i])?r.compound:void 0)&&e.push.apply(e,r.glyphIDs);if(e.length>0)for(i in s=this.glyphsFor(e))r=s[i],n[i]=r;return n},t.prototype.encode=function(t,e){var r,n,i,a,o,s,u,c,l,h,f,d,p,g,m;for(n in r=be.encode(this.generateCmap(),\"unicode\"),a=this.glyphsFor(t),f={0:0},m=r.charMap)f[(s=m[n]).old]=s.new;for(d in h=r.maxGlyphID,a)d in f||(f[d]=h++);return c=function(t){var e,r;for(e in r={},t)r[t[e]]=e;return r}(f),l=Object.keys(c).sort(function(t,e){return t-e}),p=function(){var t,e,r;for(r=[],t=0,e=l.length;t<e;t++)o=l[t],r.push(c[o]);return r}(),i=this.font.glyf.encode(a,p,f),u=this.font.loca.encode(i.offsets,p),g={cmap:this.font.cmap.raw(),glyf:i.table,loca:u,hmtx:this.font.hmtx.raw(),hhea:this.font.hhea.raw(),maxp:this.font.maxp.raw(),post:this.font.post.raw(),name:this.font.name.raw(),head:this.font.head.encode(e)},this.font.os2.exists&&(g[\"OS/2\"]=this.font.os2.raw()),this.font.directory.encode(g)},t}();E.API.PDFObject=function(){var t;function e(){}return t=function(t,e){return(Array(e+1).join(\"0\")+t).slice(-e)},e.convert=function(r){var n,i,a,o;if(Array.isArray(r))return\"[\"+function(){var t,i,a;for(a=[],t=0,i=r.length;t<i;t++)n=r[t],a.push(e.convert(n));return a}().join(\" \")+\"]\";if(\"string\"==typeof r)return\"/\"+r;if(null!=r?r.isString:void 0)return\"(\"+r+\")\";if(r instanceof Date)return\"(D:\"+t(r.getUTCFullYear(),4)+t(r.getUTCMonth(),2)+t(r.getUTCDate(),2)+t(r.getUTCHours(),2)+t(r.getUTCMinutes(),2)+t(r.getUTCSeconds(),2)+\"Z)\";if(\"[object Object]\"==={}.toString.call(r)){for(i in a=[\"<<\"],r)o=r[i],a.push(\"/\"+i+\" \"+e.convert(o));return a.push(\">>\"),a.join(\"\\n\")}return\"\"+r},e}();\n//# sourceMappingURL=jspdf.es.min.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9qc3BkZi9kaXN0L2pzcGRmLmVzLm1pbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFcUssaUJBQWlCLDREQUE0RCxxQkFBTSxDQUFDLHFCQUFNLG9DQUFvQyxHQUFHLGFBQWEsc0ZBQXNGLE9BQU8sdUJBQXVCLGdIQUFnSCxtQkFBbUIsa0dBQWtHLGtCQUFrQix5QkFBeUIsMERBQTBELGtCQUFrQixzQkFBc0IsbUNBQW1DLFVBQVUsY0FBYyx5QkFBeUIsb0JBQW9CLElBQUksU0FBUyxVQUFVLG9DQUFvQyxjQUFjLElBQUkseUNBQXlDLFNBQVMsMENBQTBDLDBGQUEwRixvRUFBb0UseUVBQUMsa0NBQWtDLGlHQUFpRyx1REFBdUQsaU5BQWlOLDBCQUEwQiw0QkFBNEIsS0FBSyxLQUFLLGdEQUFnRCwrREFBK0QsS0FBSyxrQ0FBa0MsaURBQWlELEtBQUssRUFBRSw4Q0FBOEMscUJBQXFCLFdBQVcsWUFBWSx5RUFBQyxzRUFBc0UsV0FBVyxrRUFBa0UsOEVBQThFLFlBQVksSUFBSSxTQUFTLG1CQUFtQiw4SEFBOEgsb0lBQW9JLHFFQUFxRSx5RUFBQyxlQUFlLHFCQUFxQix1QkFBdUIsZUFBZSwwQkFBMEIsR0FBRyx3QkFBd0IseUNBQXlDLG9CQUFvQixLQUFLLGdEQUFnRCw0REFBNEQscUJBQXFCLE9BQU87QUFDMzFGO0FBQ0E7QUFD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LFFBQVEsaUlBQWlJLHNGQUFzRiw2REFBNkQscUNBQXFDLFVBQVUsZ0VBQWdFLElBQUksK0JBQStCLGNBQWMsR0FBRyxpQkFBaUIsYUFBYSxxREFBcUQscUVBQXFFLFFBQVEseUZBQXlGLFFBQVEsMkJBQTJCLElBQUksOEJBQThCLFNBQVMsdUJBQXVCLFFBQVEsMkJBQTJCLElBQUksNEJBQTRCLFNBQVMsWUFBWSxpQ0FBaUMsdUJBQXVCLGtDQUFrQyx5Q0FBeUMsa0NBQWtDLDJEQUEyRCxXQUFXLG1DQUFtQyxXQUFXLDRDQUE0QyxZQUFZLG9DQUFvQyxXQUFXLHlHQUF5RyxTQUFTLEdBQUcsaUJBQWlCLGNBQWMsMEJBQTBCLGlCQUFpQixjQUFjLDJDQUEyQyxjQUFjLGdEQUFnRCxnQ0FBZ0MsU0FBUyxtQ0FBbUMsa0JBQWtCLFFBQVEsZ0JBQWdCLElBQUkseUNBQXlDLCtFQUErRSx5REFBeUQsU0FBUyxrQ0FBa0Msa0NBQWtDLDJFQUEyRSxJQUFJLG1DQUFtQyw2Q0FBNkMscUJBQXFCLFFBQVEsYUFBYSxhQUFhLFNBQVMsd0NBQXdDLFdBQVcsZUFBZSxVQUFVLHdCQUF3QixJQUFJLHdCQUF3QixTQUFTLDBFQUEwRSw4TUFBOE0scUZBQXFGLEdBQUcsR0FBRywyQkFBMkIsTUFBTSxjQUFjLHVCQUF1Qix5Q0FBeUMsdUJBQXVCLFlBQVkseUNBQXlDLFVBQVUsd0JBQXdCLElBQUksZ0NBQWdDLFNBQVMsaUJBQWlCLGtDQUFrQyw2Q0FBNkMsMEtBQTBLLHlCQUF5QixtQkFBbUIsMERBQTBELGlDQUFpQyxXQUFXLEdBQUcsR0FBOFc7QUFDdHpsQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvanNwZGYvZGlzdC9qc3BkZi5lcy5taW4uanM/YjFmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGxpY2Vuc2VcbiAqXG4gKiBqc1BERiAtIFBERiBEb2N1bWVudCBjcmVhdGlvbiBmcm9tIEphdmFTY3JpcHRcbiAqIFZlcnNpb24gNC4yLjEgQnVpbHQgb24gMjAyNi0wMy0xN1QxMToxMToyNy4wNTdaXG4gKiAgICAgICAgICAgICAgICAgICAgICBDb21taXRJRCAwMDAwMDAwMFxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMC0yMDI1IEphbWVzIEhhbGwgPGphbWVzQHBhcmFsbC5heD4sIGh0dHBzOi8vZ2l0aHViLmNvbS9NclJpby9qc1BERlxuICogICAgICAgICAgICAgICAyMDE1LTIwMjUgeVdvcmtzIEdtYkgsIGh0dHA6Ly93d3cueXdvcmtzLmNvbVxuICogICAgICAgICAgICAgICAyMDE1LTIwMjUgTHVrYXMgSG9sbMOkbmRlciA8bHVrYXMuaG9sbGFlbmRlckB5d29ya3MuY29tPiwgaHR0cHM6Ly9naXRodWIuY29tL0hhY2ticmV0dFhYWFxuICogICAgICAgICAgICAgICAyMDE2LTIwMTggQXJhcyBBYmJhc2kgPGFyYXMuYWJiYXNpQGdtYWlsLmNvbT5cbiAqICAgICAgICAgICAgICAgMjAxMCBBYXJvbiBTcGlrZSwgaHR0cHM6Ly9naXRodWIuY29tL2Fjc3Bpa2VcbiAqICAgICAgICAgICAgICAgMjAxMiBXaWxsb3cgU3lzdGVtcyBDb3Jwb3JhdGlvbiwgaHR0cHM6Ly9naXRodWIuY29tL3dpbGxvd3N5c3RlbXNcbiAqICAgICAgICAgICAgICAgMjAxMiBQYWJsbyBIZXNzLCBodHRwczovL2dpdGh1Yi5jb20vcGFibG9oZXNzXG4gKiAgICAgICAgICAgICAgIDIwMTIgRmxvcmlhbiBKZW5ldHQsIGh0dHBzOi8vZ2l0aHViLmNvbS9mamVuZXR0XG4gKiAgICAgICAgICAgICAgIDIwMTMgV2FycmVuIFdlY2tlc3NlciwgaHR0cHM6Ly9naXRodWIuY29tL3dhcnJlbndlY2tlc3NlclxuICogICAgICAgICAgICAgICAyMDEzIFlvdXNzZWYgQmVkZGFkLCBodHRwczovL2dpdGh1Yi5jb20vbGlmb2ZcbiAqICAgICAgICAgICAgICAgMjAxMyBMZWUgRHJpc2NvbGwsIGh0dHBzOi8vZ2l0aHViLmNvbS9sc2RyaXNjb2xsXG4gKiAgICAgICAgICAgICAgIDIwMTMgU3RlZmFuIFNsb25ldnNraXksIGh0dHBzOi8vZ2l0aHViLmNvbS9zdGVmc2xvblxuICogICAgICAgICAgICAgICAyMDEzIEplcmVteSBNb3JlbCwgaHR0cHM6Ly9naXRodWIuY29tL2ptb3JlbFxuICogICAgICAgICAgICAgICAyMDEzIENocmlzdG9waCBIYXJ0bWFubiwgaHR0cHM6Ly9naXRodWIuY29tL2NocmlzLXJvY2tcbiAqICAgICAgICAgICAgICAgMjAxNCBKdWFuIFBhYmxvIEdhdmlyaWEsIGh0dHBzOi8vZ2l0aHViLmNvbS9qdWFucGdhdmlyaWFcbiAqICAgICAgICAgICAgICAgMjAxNCBKYW1lcyBNYWtlcywgaHR0cHM6Ly9naXRodWIuY29tL2RvbGxhcnV3XG4gKiAgICAgICAgICAgICAgIDIwMTQgRGllZ28gQ2Fzb3JyYW4sIGh0dHBzOi8vZ2l0aHViLmNvbS9kaWVnb2NyXG4gKiAgICAgICAgICAgICAgIDIwMTQgU3RldmVuIFNwdW5naW4sIGh0dHBzOi8vZ2l0aHViLmNvbS9GbGFtZW5jb1xuICogICAgICAgICAgICAgICAyMDE0IEtlbm5ldGggR2xhc3NleSwgaHR0cHM6Ly9naXRodWIuY29tL0dhdnZlcnNcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcbiAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuICogXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4gKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4gKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG9cbiAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0b1xuICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4gKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRVxuICogTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTlxuICogT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OXG4gKiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiAqXG4gKiBDb250cmlidXRvcihzKTpcbiAqICAgIHNpZWZrZW5qLCBhaHdvbGYsIHJpY2t5Z3UsIE1pZG5pdGgsIHNhaW50Y2xhaXIsIGVhcGFyYW5nbyxcbiAqICAgIGtpbTNlciwgbWZvLCBhbG5vcnRoLCBGbGFtZW5jb1xuICovXG5cbmltcG9ydCB0IGZyb21cIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mXCI7aW1wb3J0e3psaWJTeW5jIGFzIGV9ZnJvbVwiZmZsYXRlXCI7aW1wb3J0IHIgZnJvbVwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5XCI7aW1wb3J0e2RlY29kZSBhcyBufWZyb21cImZhc3QtcG5nXCI7dmFyIGk9ZnVuY3Rpb24oKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXN9KCk7ZnVuY3Rpb24gYSgpe2kuY29uc29sZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgaS5jb25zb2xlLmxvZyYmaS5jb25zb2xlLmxvZy5hcHBseShpLmNvbnNvbGUsYXJndW1lbnRzKX12YXIgbz17bG9nOmEsd2FybjpmdW5jdGlvbih0KXtpLmNvbnNvbGUmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiBpLmNvbnNvbGUud2Fybj9pLmNvbnNvbGUud2Fybi5hcHBseShpLmNvbnNvbGUsYXJndW1lbnRzKTphLmNhbGwobnVsbCxhcmd1bWVudHMpKX0sZXJyb3I6ZnVuY3Rpb24odCl7aS5jb25zb2xlJiYoXCJmdW5jdGlvblwiPT10eXBlb2YgaS5jb25zb2xlLmVycm9yP2kuY29uc29sZS5lcnJvci5hcHBseShpLmNvbnNvbGUsYXJndW1lbnRzKTphKHQpKX19O2Z1bmN0aW9uIHModCxlLHIpe3ZhciBuPW5ldyBYTUxIdHRwUmVxdWVzdDtuLm9wZW4oXCJHRVRcIix0KSxuLnJlc3BvbnNlVHlwZT1cImJsb2JcIixuLm9ubG9hZD1mdW5jdGlvbigpe2wobi5yZXNwb25zZSxlLHIpfSxuLm9uZXJyb3I9ZnVuY3Rpb24oKXtvLmVycm9yKFwiY291bGQgbm90IGRvd25sb2FkIGZpbGVcIil9LG4uc2VuZCgpfWZ1bmN0aW9uIHUodCl7dmFyIGU9bmV3IFhNTEh0dHBSZXF1ZXN0O2Uub3BlbihcIkhFQURcIix0LCExKTt0cnl7ZS5zZW5kKCl9Y2F0Y2gocil7fXJldHVybiBlLnN0YXR1cz49MjAwJiZlLnN0YXR1czw9Mjk5fWZ1bmN0aW9uIGModCl7dHJ5e3QuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudChcImNsaWNrXCIpKX1jYXRjaChyKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFdmVudChcIk1vdXNlRXZlbnRzXCIpO2UuaW5pdE1vdXNlRXZlbnQoXCJjbGlja1wiLCEwLCEwLHdpbmRvdywwLDAsMCw4MCwyMCwhMSwhMSwhMSwhMSwwLG51bGwpLHQuZGlzcGF0Y2hFdmVudChlKX19dmFyIGw9aS5zYXZlQXN8fChcIm9iamVjdFwiIT09KFwidW5kZWZpbmVkXCI9PXR5cGVvZiB3aW5kb3c/XCJ1bmRlZmluZWRcIjp0KHdpbmRvdykpfHx3aW5kb3chPT1pP2Z1bmN0aW9uKCl7fTpcInVuZGVmaW5lZFwiIT10eXBlb2YgSFRNTEFuY2hvckVsZW1lbnQmJlwiZG93bmxvYWRcImluIEhUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZT9mdW5jdGlvbih0LGUscil7dmFyIG49aS5VUkx8fGkud2Via2l0VVJMLGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7ZT1lfHx0Lm5hbWV8fFwiZG93bmxvYWRcIixhLmRvd25sb2FkPWUsYS5yZWw9XCJub29wZW5lclwiLFwic3RyaW5nXCI9PXR5cGVvZiB0PyhhLmhyZWY9dCxhLm9yaWdpbiE9PWxvY2F0aW9uLm9yaWdpbj91KGEuaHJlZik/cyh0LGUscik6YyhhLGEudGFyZ2V0PVwiX2JsYW5rXCIpOmMoYSkpOihhLmhyZWY9bi5jcmVhdGVPYmplY3RVUkwodCksc2V0VGltZW91dChmdW5jdGlvbigpe24ucmV2b2tlT2JqZWN0VVJMKGEuaHJlZil9LDRlNCksc2V0VGltZW91dChmdW5jdGlvbigpe2MoYSl9LDApKX06XCJtc1NhdmVPck9wZW5CbG9iXCJpbiBuYXZpZ2F0b3I/ZnVuY3Rpb24oZSxyLG4pe2lmKHI9cnx8ZS5uYW1lfHxcImRvd25sb2FkXCIsXCJzdHJpbmdcIj09dHlwZW9mIGUpaWYodShlKSlzKGUscixuKTtlbHNle3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO2kuaHJlZj1lLGkudGFyZ2V0PVwiX2JsYW5rXCIsc2V0VGltZW91dChmdW5jdGlvbigpe2MoaSl9KX1lbHNlIG5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKGZ1bmN0aW9uKGUscil7cmV0dXJuIHZvaWQgMD09PXI/cj17YXV0b0JvbTohMX06XCJvYmplY3RcIiE9PXQocikmJihvLndhcm4oXCJEZXByZWNhdGVkOiBFeHBlY3RlZCB0aGlyZCBhcmd1bWVudCB0byBiZSBhIG9iamVjdFwiKSxyPXthdXRvQm9tOiFyfSksci5hdXRvQm9tJiYvXlxccyooPzp0ZXh0XFwvXFxTKnxhcHBsaWNhdGlvblxcL3htbHxcXFMqXFwvXFxTKlxcK3htbClcXHMqOy4qY2hhcnNldFxccyo9XFxzKnV0Zi04L2kudGVzdChlLnR5cGUpP25ldyBCbG9iKFtTdHJpbmcuZnJvbUNoYXJDb2RlKDY1Mjc5KSxlXSx7dHlwZTplLnR5cGV9KTplfShlLG4pLHIpfTpmdW5jdGlvbihlLHIsbixhKXtpZigoYT1hfHxvcGVuKFwiXCIsXCJfYmxhbmtcIikpJiYoYS5kb2N1bWVudC50aXRsZT1hLmRvY3VtZW50LmJvZHkuaW5uZXJUZXh0PVwiZG93bmxvYWRpbmcuLi5cIiksXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHMoZSxyLG4pO3ZhciBvPVwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI9PT1lLnR5cGUsdT0vY29uc3RydWN0b3IvaS50ZXN0KGkuSFRNTEVsZW1lbnQpfHxpLnNhZmFyaSxjPS9DcmlPU1xcL1tcXGRdKy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtpZigoY3x8byYmdSkmJlwib2JqZWN0XCI9PT0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIEZpbGVSZWFkZXI/XCJ1bmRlZmluZWRcIjp0KEZpbGVSZWFkZXIpKSl7dmFyIGw9bmV3IEZpbGVSZWFkZXI7bC5vbmxvYWRlbmQ9ZnVuY3Rpb24oKXt2YXIgdD1sLnJlc3VsdDt0PWM/dDp0LnJlcGxhY2UoL15kYXRhOlteO10qOy8sXCJkYXRhOmF0dGFjaG1lbnQvZmlsZTtcIiksYT9hLmxvY2F0aW9uLmhyZWY9dDpsb2NhdGlvbj10LGE9bnVsbH0sbC5yZWFkQXNEYXRhVVJMKGUpfWVsc2V7dmFyIGg9aS5VUkx8fGkud2Via2l0VVJMLGY9aC5jcmVhdGVPYmplY3RVUkwoZSk7YT9hLmxvY2F0aW9uPWY6bG9jYXRpb24uaHJlZj1mLGE9bnVsbCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aC5yZXZva2VPYmplY3RVUkwoZil9LDRlNCl9fSk7XG4vKipcbiAqIEEgY2xhc3MgdG8gcGFyc2UgY29sb3IgdmFsdWVzXG4gKiBAYXV0aG9yIFN0b3lhbiBTdGVmYW5vdiA8c3N0b29AZ21haWwuY29tPlxuICoge0BsaW5rICAgaHR0cDovL3d3dy5waHBpZWQuY29tL3JnYi1jb2xvci1wYXJzZXItaW4tamF2YXNjcmlwdC99XG4gKiBAbGljZW5zZSBVc2UgaXQgaWYgeW91IGxpa2UgaXRcbiAqL2Z1bmN0aW9uIGgodCl7dmFyIGU7dD10fHxcIlwiLHRoaXMub2s9ITEsXCIjXCI9PXQuY2hhckF0KDApJiYodD10LnN1YnN0cigxLDYpKSx0PXthbGljZWJsdWU6XCJmMGY4ZmZcIixhbnRpcXVld2hpdGU6XCJmYWViZDdcIixhcXVhOlwiMDBmZmZmXCIsYXF1YW1hcmluZTpcIjdmZmZkNFwiLGF6dXJlOlwiZjBmZmZmXCIsYmVpZ2U6XCJmNWY1ZGNcIixiaXNxdWU6XCJmZmU0YzRcIixibGFjazpcIjAwMDAwMFwiLGJsYW5jaGVkYWxtb25kOlwiZmZlYmNkXCIsYmx1ZTpcIjAwMDBmZlwiLGJsdWV2aW9sZXQ6XCI4YTJiZTJcIixicm93bjpcImE1MmEyYVwiLGJ1cmx5d29vZDpcImRlYjg4N1wiLGNhZGV0Ymx1ZTpcIjVmOWVhMFwiLGNoYXJ0cmV1c2U6XCI3ZmZmMDBcIixjaG9jb2xhdGU6XCJkMjY5MWVcIixjb3JhbDpcImZmN2Y1MFwiLGNvcm5mbG93ZXJibHVlOlwiNjQ5NWVkXCIsY29ybnNpbGs6XCJmZmY4ZGNcIixjcmltc29uOlwiZGMxNDNjXCIsY3lhbjpcIjAwZmZmZlwiLGRhcmtibHVlOlwiMDAwMDhiXCIsZGFya2N5YW46XCIwMDhiOGJcIixkYXJrZ29sZGVucm9kOlwiYjg4NjBiXCIsZGFya2dyYXk6XCJhOWE5YTlcIixkYXJrZ3JlZW46XCIwMDY0MDBcIixkYXJra2hha2k6XCJiZGI3NmJcIixkYXJrbWFnZW50YTpcIjhiMDA4YlwiLGRhcmtvbGl2ZWdyZWVuOlwiNTU2YjJmXCIsZGFya29yYW5nZTpcImZmOGMwMFwiLGRhcmtvcmNoaWQ6XCI5OTMyY2NcIixkYXJrcmVkOlwiOGIwMDAwXCIsZGFya3NhbG1vbjpcImU5OTY3YVwiLGRhcmtzZWFncmVlbjpcIjhmYmM4ZlwiLGRhcmtzbGF0ZWJsdWU6XCI0ODNkOGJcIixkYXJrc2xhdGVncmF5OlwiMmY0ZjRmXCIsZGFya3R1cnF1b2lzZTpcIjAwY2VkMVwiLGRhcmt2aW9sZXQ6XCI5NDAwZDNcIixkZWVwcGluazpcImZmMTQ5M1wiLGRlZXBza3libHVlOlwiMDBiZmZmXCIsZGltZ3JheTpcIjY5Njk2OVwiLGRvZGdlcmJsdWU6XCIxZTkwZmZcIixmZWxkc3BhcjpcImQxOTI3NVwiLGZpcmVicmljazpcImIyMjIyMlwiLGZsb3JhbHdoaXRlOlwiZmZmYWYwXCIsZm9yZXN0Z3JlZW46XCIyMjhiMjJcIixmdWNoc2lhOlwiZmYwMGZmXCIsZ2FpbnNib3JvOlwiZGNkY2RjXCIsZ2hvc3R3aGl0ZTpcImY4ZjhmZlwiLGdvbGQ6XCJmZmQ3MDBcIixnb2xkZW5yb2Q6XCJkYWE1MjBcIixncmF5OlwiODA4MDgwXCIsZ3JlZW46XCIwMDgwMDBcIixncmVlbnllbGxvdzpcImFkZmYyZlwiLGhvbmV5ZGV3OlwiZjBmZmYwXCIsaG90cGluazpcImZmNjliNFwiLGluZGlhbnJlZDpcImNkNWM1Y1wiLGluZGlnbzpcIjRiMDA4MlwiLGl2b3J5OlwiZmZmZmYwXCIsa2hha2k6XCJmMGU2OGNcIixsYXZlbmRlcjpcImU2ZTZmYVwiLGxhdmVuZGVyYmx1c2g6XCJmZmYwZjVcIixsYXduZ3JlZW46XCI3Y2ZjMDBcIixsZW1vbmNoaWZmb246XCJmZmZhY2RcIixsaWdodGJsdWU6XCJhZGQ4ZTZcIixsaWdodGNvcmFsOlwiZjA4MDgwXCIsbGlnaHRjeWFuOlwiZTBmZmZmXCIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6XCJmYWZhZDJcIixsaWdodGdyZXk6XCJkM2QzZDNcIixsaWdodGdyZWVuOlwiOTBlZTkwXCIsbGlnaHRwaW5rOlwiZmZiNmMxXCIsbGlnaHRzYWxtb246XCJmZmEwN2FcIixsaWdodHNlYWdyZWVuOlwiMjBiMmFhXCIsbGlnaHRza3libHVlOlwiODdjZWZhXCIsbGlnaHRzbGF0ZWJsdWU6XCI4NDcwZmZcIixsaWdodHNsYXRlZ3JheTpcIjc3ODg5OVwiLGxpZ2h0c3RlZWxibHVlOlwiYjBjNGRlXCIsbGlnaHR5ZWxsb3c6XCJmZmZmZTBcIixsaW1lOlwiMDBmZjAwXCIsbGltZWdyZWVuOlwiMzJjZDMyXCIsbGluZW46XCJmYWYwZTZcIixtYWdlbnRhOlwiZmYwMGZmXCIsbWFyb29uOlwiODAwMDAwXCIsbWVkaXVtYXF1YW1hcmluZTpcIjY2Y2RhYVwiLG1lZGl1bWJsdWU6XCIwMDAwY2RcIixtZWRpdW1vcmNoaWQ6XCJiYTU1ZDNcIixtZWRpdW1wdXJwbGU6XCI5MzcwZDhcIixtZWRpdW1zZWFncmVlbjpcIjNjYjM3MVwiLG1lZGl1bXNsYXRlYmx1ZTpcIjdiNjhlZVwiLG1lZGl1bXNwcmluZ2dyZWVuOlwiMDBmYTlhXCIsbWVkaXVtdHVycXVvaXNlOlwiNDhkMWNjXCIsbWVkaXVtdmlvbGV0cmVkOlwiYzcxNTg1XCIsbWlkbmlnaHRibHVlOlwiMTkxOTcwXCIsbWludGNyZWFtOlwiZjVmZmZhXCIsbWlzdHlyb3NlOlwiZmZlNGUxXCIsbW9jY2FzaW46XCJmZmU0YjVcIixuYXZham93aGl0ZTpcImZmZGVhZFwiLG5hdnk6XCIwMDAwODBcIixvbGRsYWNlOlwiZmRmNWU2XCIsb2xpdmU6XCI4MDgwMDBcIixvbGl2ZWRyYWI6XCI2YjhlMjNcIixvcmFuZ2U6XCJmZmE1MDBcIixvcmFuZ2VyZWQ6XCJmZjQ1MDBcIixvcmNoaWQ6XCJkYTcwZDZcIixwYWxlZ29sZGVucm9kOlwiZWVlOGFhXCIscGFsZWdyZWVuOlwiOThmYjk4XCIscGFsZXR1cnF1b2lzZTpcImFmZWVlZVwiLHBhbGV2aW9sZXRyZWQ6XCJkODcwOTNcIixwYXBheWF3aGlwOlwiZmZlZmQ1XCIscGVhY2hwdWZmOlwiZmZkYWI5XCIscGVydTpcImNkODUzZlwiLHBpbms6XCJmZmMwY2JcIixwbHVtOlwiZGRhMGRkXCIscG93ZGVyYmx1ZTpcImIwZTBlNlwiLHB1cnBsZTpcIjgwMDA4MFwiLHJlZDpcImZmMDAwMFwiLHJvc3licm93bjpcImJjOGY4ZlwiLHJveWFsYmx1ZTpcIjQxNjllMVwiLHNhZGRsZWJyb3duOlwiOGI0NTEzXCIsc2FsbW9uOlwiZmE4MDcyXCIsc2FuZHlicm93bjpcImY0YTQ2MFwiLHNlYWdyZWVuOlwiMmU4YjU3XCIsc2Vhc2hlbGw6XCJmZmY1ZWVcIixzaWVubmE6XCJhMDUyMmRcIixzaWx2ZXI6XCJjMGMwYzBcIixza3libHVlOlwiODdjZWViXCIsc2xhdGVibHVlOlwiNmE1YWNkXCIsc2xhdGVncmF5OlwiNzA4MDkwXCIsc25vdzpcImZmZmFmYVwiLHNwcmluZ2dyZWVuOlwiMDBmZjdmXCIsc3RlZWxibHVlOlwiNDY4MmI0XCIsdGFuOlwiZDJiNDhjXCIsdGVhbDpcIjAwODA4MFwiLHRoaXN0bGU6XCJkOGJmZDhcIix0b21hdG86XCJmZjYzNDdcIix0dXJxdW9pc2U6XCI0MGUwZDBcIix2aW9sZXQ6XCJlZTgyZWVcIix2aW9sZXRyZWQ6XCJkMDIwOTBcIix3aGVhdDpcImY1ZGViM1wiLHdoaXRlOlwiZmZmZmZmXCIsd2hpdGVzbW9rZTpcImY1ZjVmNVwiLHllbGxvdzpcImZmZmYwMFwiLHllbGxvd2dyZWVuOlwiOWFjZDMyXCJ9W3Q9KHQ9dC5yZXBsYWNlKC8gL2csXCJcIikpLnRvTG93ZXJDYXNlKCldfHx0O2Zvcih2YXIgcj1be3JlOi9ecmdiXFwoKFxcZHsxLDN9KSxcXHMqKFxcZHsxLDN9KSxcXHMqKFxcZHsxLDN9KVxcKSQvLGV4YW1wbGU6W1wicmdiKDEyMywgMjM0LCA0NSlcIixcInJnYigyNTUsMjM0LDI0NSlcIl0scHJvY2VzczpmdW5jdGlvbih0KXtyZXR1cm5bcGFyc2VJbnQodFsxXSkscGFyc2VJbnQodFsyXSkscGFyc2VJbnQodFszXSldfX0se3JlOi9eKFxcd3syfSkoXFx3ezJ9KShcXHd7Mn0pJC8sZXhhbXBsZTpbXCIjMDBmZjAwXCIsXCIzMzY2OTlcIl0scHJvY2VzczpmdW5jdGlvbih0KXtyZXR1cm5bcGFyc2VJbnQodFsxXSwxNikscGFyc2VJbnQodFsyXSwxNikscGFyc2VJbnQodFszXSwxNildfX0se3JlOi9eKFxcd3sxfSkoXFx3ezF9KShcXHd7MX0pJC8sZXhhbXBsZTpbXCIjZmIwXCIsXCJmMGZcIl0scHJvY2VzczpmdW5jdGlvbih0KXtyZXR1cm5bcGFyc2VJbnQodFsxXSt0WzFdLDE2KSxwYXJzZUludCh0WzJdK3RbMl0sMTYpLHBhcnNlSW50KHRbM10rdFszXSwxNildfX1dLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXS5yZSxhPXJbbl0ucHJvY2VzcyxvPWkuZXhlYyh0KTtvJiYoZT1hKG8pLHRoaXMucj1lWzBdLHRoaXMuZz1lWzFdLHRoaXMuYj1lWzJdLHRoaXMub2s9ITApfXRoaXMucj10aGlzLnI8MHx8aXNOYU4odGhpcy5yKT8wOnRoaXMucj4yNTU/MjU1OnRoaXMucix0aGlzLmc9dGhpcy5nPDB8fGlzTmFOKHRoaXMuZyk/MDp0aGlzLmc+MjU1PzI1NTp0aGlzLmcsdGhpcy5iPXRoaXMuYjwwfHxpc05hTih0aGlzLmIpPzA6dGhpcy5iPjI1NT8yNTU6dGhpcy5iLHRoaXMudG9SR0I9ZnVuY3Rpb24oKXtyZXR1cm5cInJnYihcIit0aGlzLnIrXCIsIFwiK3RoaXMuZytcIiwgXCIrdGhpcy5iK1wiKVwifSx0aGlzLnRvSGV4PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yLnRvU3RyaW5nKDE2KSxlPXRoaXMuZy50b1N0cmluZygxNikscj10aGlzLmIudG9TdHJpbmcoMTYpO3JldHVybiAxPT10Lmxlbmd0aCYmKHQ9XCIwXCIrdCksMT09ZS5sZW5ndGgmJihlPVwiMFwiK2UpLDE9PXIubGVuZ3RoJiYocj1cIjBcIityKSxcIiNcIit0K2Urcn19dmFyIGY9aS5hdG9iLmJpbmQoaSksZD1pLmJ0b2EuYmluZChpKTtcbi8qKlxuICogQGxpY2Vuc2VcbiAqIEpvc2VwaCBNeWVycyBkb2VzIG5vdCBzcGVjaWZ5IGEgcGFydGljdWxhciBsaWNlbnNlIGZvciBoaXMgd29yay5cbiAqXG4gKiBBdXRob3I6IEpvc2VwaCBNeWVyc1xuICogQWNjZXNzZWQgZnJvbTogaHR0cDovL3d3dy5teWVyc2RhaWx5Lm9yZy9qb3NlcGgvamF2YXNjcmlwdC9tZDUuanNcbiAqXG4gKiBNb2RpZmllZCBieTogT3dlbiBMZW9uZ1xuICovXG5mdW5jdGlvbiBwKHQsZSl7dmFyIHI9dFswXSxuPXRbMV0saT10WzJdLGE9dFszXTtyPW0ocixuLGksYSxlWzBdLDcsLTY4MDg3NjkzNiksYT1tKGEscixuLGksZVsxXSwxMiwtMzg5NTY0NTg2KSxpPW0oaSxhLHIsbixlWzJdLDE3LDYwNjEwNTgxOSksbj1tKG4saSxhLHIsZVszXSwyMiwtMTA0NDUyNTMzMCkscj1tKHIsbixpLGEsZVs0XSw3LC0xNzY0MTg4OTcpLGE9bShhLHIsbixpLGVbNV0sMTIsMTIwMDA4MDQyNiksaT1tKGksYSxyLG4sZVs2XSwxNywtMTQ3MzIzMTM0MSksbj1tKG4saSxhLHIsZVs3XSwyMiwtNDU3MDU5ODMpLHI9bShyLG4saSxhLGVbOF0sNywxNzcwMDM1NDE2KSxhPW0oYSxyLG4saSxlWzldLDEyLC0xOTU4NDE0NDE3KSxpPW0oaSxhLHIsbixlWzEwXSwxNywtNDIwNjMpLG49bShuLGksYSxyLGVbMTFdLDIyLC0xOTkwNDA0MTYyKSxyPW0ocixuLGksYSxlWzEyXSw3LDE4MDQ2MDM2ODIpLGE9bShhLHIsbixpLGVbMTNdLDEyLC00MDM0MTEwMSksaT1tKGksYSxyLG4sZVsxNF0sMTcsLTE1MDIwMDIyOTApLHI9dihyLG49bShuLGksYSxyLGVbMTVdLDIyLDEyMzY1MzUzMjkpLGksYSxlWzFdLDUsLTE2NTc5NjUxMCksYT12KGEscixuLGksZVs2XSw5LC0xMDY5NTAxNjMyKSxpPXYoaSxhLHIsbixlWzExXSwxNCw2NDM3MTc3MTMpLG49dihuLGksYSxyLGVbMF0sMjAsLTM3Mzg5NzMwMikscj12KHIsbixpLGEsZVs1XSw1LC03MDE1NTg2OTEpLGE9dihhLHIsbixpLGVbMTBdLDksMzgwMTYwODMpLGk9dihpLGEscixuLGVbMTVdLDE0LC02NjA0NzgzMzUpLG49dihuLGksYSxyLGVbNF0sMjAsLTQwNTUzNzg0OCkscj12KHIsbixpLGEsZVs5XSw1LDU2ODQ0NjQzOCksYT12KGEscixuLGksZVsxNF0sOSwtMTAxOTgwMzY5MCksaT12KGksYSxyLG4sZVszXSwxNCwtMTg3MzYzOTYxKSxuPXYobixpLGEscixlWzhdLDIwLDExNjM1MzE1MDEpLHI9dihyLG4saSxhLGVbMTNdLDUsLTE0NDQ2ODE0NjcpLGE9dihhLHIsbixpLGVbMl0sOSwtNTE0MDM3ODQpLGk9dihpLGEscixuLGVbN10sMTQsMTczNTMyODQ3Mykscj1iKHIsbj12KG4saSxhLHIsZVsxMl0sMjAsLTE5MjY2MDc3MzQpLGksYSxlWzVdLDQsLTM3ODU1OCksYT1iKGEscixuLGksZVs4XSwxMSwtMjAyMjU3NDQ2MyksaT1iKGksYSxyLG4sZVsxMV0sMTYsMTgzOTAzMDU2Miksbj1iKG4saSxhLHIsZVsxNF0sMjMsLTM1MzA5NTU2KSxyPWIocixuLGksYSxlWzFdLDQsLTE1MzA5OTIwNjApLGE9YihhLHIsbixpLGVbNF0sMTEsMTI3Mjg5MzM1MyksaT1iKGksYSxyLG4sZVs3XSwxNiwtMTU1NDk3NjMyKSxuPWIobixpLGEscixlWzEwXSwyMywtMTA5NDczMDY0MCkscj1iKHIsbixpLGEsZVsxM10sNCw2ODEyNzkxNzQpLGE9YihhLHIsbixpLGVbMF0sMTEsLTM1ODUzNzIyMiksaT1iKGksYSxyLG4sZVszXSwxNiwtNzIyNTIxOTc5KSxuPWIobixpLGEscixlWzZdLDIzLDc2MDI5MTg5KSxyPWIocixuLGksYSxlWzldLDQsLTY0MDM2NDQ4NyksYT1iKGEscixuLGksZVsxMl0sMTEsLTQyMTgxNTgzNSksaT1iKGksYSxyLG4sZVsxNV0sMTYsNTMwNzQyNTIwKSxyPXkocixuPWIobixpLGEscixlWzJdLDIzLC05OTUzMzg2NTEpLGksYSxlWzBdLDYsLTE5ODYzMDg0NCksYT15KGEscixuLGksZVs3XSwxMCwxMTI2ODkxNDE1KSxpPXkoaSxhLHIsbixlWzE0XSwxNSwtMTQxNjM1NDkwNSksbj15KG4saSxhLHIsZVs1XSwyMSwtNTc0MzQwNTUpLHI9eShyLG4saSxhLGVbMTJdLDYsMTcwMDQ4NTU3MSksYT15KGEscixuLGksZVszXSwxMCwtMTg5NDk4NjYwNiksaT15KGksYSxyLG4sZVsxMF0sMTUsLTEwNTE1MjMpLG49eShuLGksYSxyLGVbMV0sMjEsLTIwNTQ5MjI3OTkpLHI9eShyLG4saSxhLGVbOF0sNiwxODczMzEzMzU5KSxhPXkoYSxyLG4saSxlWzE1XSwxMCwtMzA2MTE3NDQpLGk9eShpLGEscixuLGVbNl0sMTUsLTE1NjAxOTgzODApLG49eShuLGksYSxyLGVbMTNdLDIxLDEzMDkxNTE2NDkpLHI9eShyLG4saSxhLGVbNF0sNiwtMTQ1NTIzMDcwKSxhPXkoYSxyLG4saSxlWzExXSwxMCwtMTEyMDIxMDM3OSksaT15KGksYSxyLG4sZVsyXSwxNSw3MTg3ODcyNTkpLG49eShuLGksYSxyLGVbOV0sMjEsLTM0MzQ4NTU1MSksdFswXT1QKHIsdFswXSksdFsxXT1QKG4sdFsxXSksdFsyXT1QKGksdFsyXSksdFszXT1QKGEsdFszXSl9ZnVuY3Rpb24gZyh0LGUscixuLGksYSl7cmV0dXJuIGU9UChQKGUsdCksUChuLGEpKSxQKGU8PGl8ZT4+PjMyLWkscil9ZnVuY3Rpb24gbSh0LGUscixuLGksYSxvKXtyZXR1cm4gZyhlJnJ8fmUmbix0LGUsaSxhLG8pfWZ1bmN0aW9uIHYodCxlLHIsbixpLGEsbyl7cmV0dXJuIGcoZSZufHImfm4sdCxlLGksYSxvKX1mdW5jdGlvbiBiKHQsZSxyLG4saSxhLG8pe3JldHVybiBnKGVecl5uLHQsZSxpLGEsbyl9ZnVuY3Rpb24geSh0LGUscixuLGksYSxvKXtyZXR1cm4gZyhyXihlfH5uKSx0LGUsaSxhLG8pfWZ1bmN0aW9uIHcodCl7dmFyIGUscj10Lmxlbmd0aCxuPVsxNzMyNTg0MTkzLC0yNzE3MzM4NzksLTE3MzI1ODQxOTQsMjcxNzMzODc4XTtmb3IoZT02NDtlPD10Lmxlbmd0aDtlKz02NClwKG4sTih0LnN1YnN0cmluZyhlLTY0LGUpKSk7dD10LnN1YnN0cmluZyhlLTY0KTt2YXIgaT1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF07Zm9yKGU9MDtlPHQubGVuZ3RoO2UrKylpW2U+PjJdfD10LmNoYXJDb2RlQXQoZSk8PChlJTQ8PDMpO2lmKGlbZT4+Ml18PTEyODw8KGUlNDw8MyksZT41NSlmb3IocChuLGkpLGU9MDtlPDE2O2UrKylpW2VdPTA7cmV0dXJuIGlbMTRdPTgqcixwKG4saSksbn1mdW5jdGlvbiBOKHQpe3ZhciBlLHI9W107Zm9yKGU9MDtlPDY0O2UrPTQpcltlPj4yXT10LmNoYXJDb2RlQXQoZSkrKHQuY2hhckNvZGVBdChlKzEpPDw4KSsodC5jaGFyQ29kZUF0KGUrMik8PDE2KSsodC5jaGFyQ29kZUF0KGUrMyk8PDI0KTtyZXR1cm4gcn12YXIgTD1cIjAxMjM0NTY3ODlhYmNkZWZcIi5zcGxpdChcIlwiKTtmdW5jdGlvbiB4KHQpe2Zvcih2YXIgZT1cIlwiLHI9MDtyPDQ7cisrKWUrPUxbdD4+OCpyKzQmMTVdK0xbdD4+OCpyJjE1XTtyZXR1cm4gZX1mdW5jdGlvbiBBKHQpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZ0LCg2NTI4MCZ0KT4+OCwoMTY3MTE2ODAmdCk+PjE2LCg0Mjc4MTkwMDgwJnQpPj4yNCl9ZnVuY3Rpb24gUyh0KXtyZXR1cm4gdyh0KS5tYXAoQSkuam9pbihcIlwiKX12YXIgXz1cIjVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyXCIhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV09eCh0W2VdKTtyZXR1cm4gdC5qb2luKFwiXCIpfSh3KFwiaGVsbG9cIikpO2Z1bmN0aW9uIFAodCxlKXtpZihfKXt2YXIgcj0oNjU1MzUmdCkrKDY1NTM1JmUpO3JldHVybih0Pj4xNikrKGU+PjE2KSsocj4+MTYpPDwxNnw2NTUzNSZyfXJldHVybiB0K2UmNDI5NDk2NzI5NX1cbi8qKlxuICogQGxpY2Vuc2VcbiAqIEZQREYgaXMgcmVsZWFzZWQgdW5kZXIgYSBwZXJtaXNzaXZlIGxpY2Vuc2U6IHRoZXJlIGlzIG5vIHVzYWdlIHJlc3RyaWN0aW9uLlxuICogWW91IG1heSBlbWJlZCBpdCBmcmVlbHkgaW4geW91ciBhcHBsaWNhdGlvbiAoY29tbWVyY2lhbCBvciBub3QpLCB3aXRoIG9yXG4gKiB3aXRob3V0IG1vZGlmaWNhdGlvbnMuXG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vd3d3LmZwZGYub3JnL2VuL3NjcmlwdC9zY3JpcHQzNy5waHBcbiAqL2Z1bmN0aW9uIGsodCxlKXt2YXIgcixuLGksYTtpZih0IT09cil7Zm9yKHZhciBvPShpPXQsYT0xKygyNTYvdC5sZW5ndGh8MCksbmV3IEFycmF5KGErMSkuam9pbihpKSkscz1bXSx1PTA7dTwyNTY7dSsrKXNbdV09dTt2YXIgYz0wO2Zvcih1PTA7dTwyNTY7dSsrKXt2YXIgbD1zW3VdO2M9KGMrbCtvLmNoYXJDb2RlQXQodSkpJTI1NixzW3VdPXNbY10sc1tjXT1sfXI9dCxuPXN9ZWxzZSBzPW47dmFyIGg9ZS5sZW5ndGgsZj0wLGQ9MCxwPVwiXCI7Zm9yKHU9MDt1PGg7dSsrKWQ9KGQrKGw9c1tmPShmKzEpJTI1Nl0pKSUyNTYsc1tmXT1zW2RdLHNbZF09bCxvPXNbKHNbZl0rc1tkXSklMjU2XSxwKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNvZGVBdCh1KV5vKTtyZXR1cm4gcH1cbi8qKlxuICogQGxpY2Vuc2VcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZVxuICogQXV0aG9yOiBPd2VuIExlb25nIChAb3dlbmwxMzEpXG4gKiBEYXRlOiAxNSBPY3QgMjAyMFxuICogUmVmZXJlbmNlczpcbiAqIGh0dHBzOi8vd3d3LmNzLmNtdS5lZHUvfmRzdC9BZG9iZS9HYWxsZXJ5L2Fub24yMWp1bDAxLXBkZi1lbmNyeXB0aW9uLnR4dFxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZvbGlvanMvcGRma2l0L2Jsb2IvbWFzdGVyL2xpYi9zZWN1cml0eS5qc1xuICogaHR0cDovL3d3dy5mcGRmLm9yZy9lbi9zY3JpcHQvc2NyaXB0MzcucGhwXG4gKi92YXIgRj17cHJpbnQ6NCxtb2RpZnk6OCxjb3B5OjE2LFwiYW5ub3QtZm9ybXNcIjozMn07ZnVuY3Rpb24gSSh0LGUscixuKXt0aGlzLnY9MSx0aGlzLnI9Mjt2YXIgaT0xOTI7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PUYucGVybSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHBlcm1pc3Npb246IFwiK3QpO2krPUZbdF19KSx0aGlzLnBhZGRpbmc9XCIowr9OXk51wopBZFxcME5Ww7/Dulx1MDAwMVxcYi4uXFwwwrbDkGg+woAvXFxmwqnDvmRTaXpcIjt2YXIgYT0oZSt0aGlzLnBhZGRpbmcpLnN1YnN0cigwLDMyKSxvPShyK3RoaXMucGFkZGluZykuc3Vic3RyKDAsMzIpO3RoaXMuTz10aGlzLnByb2Nlc3NPd25lclBhc3N3b3JkKGEsbyksdGhpcy5QPS0oMSsoMjU1XmkpKSx0aGlzLmVuY3J5cHRpb25LZXk9UyhhK3RoaXMuTyt0aGlzLmxzYkZpcnN0V29yZCh0aGlzLlApK3RoaXMuaGV4VG9CeXRlcyhuKSkuc3Vic3RyKDAsNSksdGhpcy5VPWsodGhpcy5lbmNyeXB0aW9uS2V5LHRoaXMucGFkZGluZyl9ZnVuY3Rpb24gQyh0KXtpZigvW15cXHUwMDAwLVxcdTAwZmZdLy50ZXN0KHQpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgUERGIE5hbWUgT2JqZWN0OiBcIit0K1wiLCBPbmx5IGFjY2VwdCBBU0NJSSBjaGFyYWN0ZXJzLlwiKTtmb3IodmFyIGU9XCJcIixyPXQubGVuZ3RoLG49MDtuPHI7bisrKXt2YXIgaT10LmNoYXJDb2RlQXQobik7ZSs9aTwzM3x8MzU9PT1pfHwzNz09PWl8fDQwPT09aXx8NDE9PT1pfHw0Nz09PWl8fDYwPT09aXx8NjI9PT1pfHw5MT09PWl8fDkzPT09aXx8MTIzPT09aXx8MTI1PT09aXx8aT4xMjY/XCIjXCIrKFwiMFwiK2kudG9TdHJpbmcoMTYpKS5zbGljZSgtMik6dFtuXX1yZXR1cm4gZX1mdW5jdGlvbiBqKGUpe2lmKFwib2JqZWN0XCIhPT10KGUpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgQ29udGV4dCBwYXNzZWQgdG8gaW5pdGlhbGl6ZSBQdWJTdWIgKGpzUERGLW1vZHVsZSlcIik7dmFyIHI9e307dGhpcy5zdWJzY3JpYmU9ZnVuY3Rpb24odCxlLG4pe2lmKG49bnx8ITEsXCJzdHJpbmdcIiE9dHlwZW9mIHR8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGV8fFwiYm9vbGVhblwiIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8gUHViU3ViLnN1YnNjcmliZSAoanNQREYtbW9kdWxlKVwiKTtyLmhhc093blByb3BlcnR5KHQpfHwoclt0XT17fSk7dmFyIGk9TWF0aC5yYW5kb20oKS50b1N0cmluZygzNSk7cmV0dXJuIHJbdF1baV09W2UsISFuXSxpfSx0aGlzLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiByKWlmKHJbZV1bdF0pcmV0dXJuIGRlbGV0ZSByW2VdW3RdLDA9PT1PYmplY3Qua2V5cyhyW2VdKS5sZW5ndGgmJmRlbGV0ZSByW2VdLCEwO3JldHVybiExfSx0aGlzLnB1Ymxpc2g9ZnVuY3Rpb24odCl7aWYoci5oYXNPd25Qcm9wZXJ0eSh0KSl7dmFyIG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGE9W107Zm9yKHZhciBzIGluIHJbdF0pe3ZhciB1PXJbdF1bc107dHJ5e3VbMF0uYXBwbHkoZSxuKX1jYXRjaChjKXtpLmNvbnNvbGUmJm8uZXJyb3IoXCJqc1BERiBQdWJTdWIgRXJyb3JcIixjLm1lc3NhZ2UsYyl9dVsxXSYmYS5wdXNoKHMpfWEubGVuZ3RoJiZhLmZvckVhY2godGhpcy51bnN1YnNjcmliZSl9fSx0aGlzLmdldFRvcGljcz1mdW5jdGlvbigpe3JldHVybiByfX1mdW5jdGlvbiBPKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIE8pKXJldHVybiBuZXcgTyh0KTt2YXIgZT1cIm9wYWNpdHksc3Ryb2tlLW9wYWNpdHlcIi5zcGxpdChcIixcIik7Zm9yKHZhciByIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmZS5pbmRleE9mKHIpPj0wJiYodGhpc1tyXT10W3JdKTt0aGlzLmlkPVwiXCIsdGhpcy5vYmplY3ROdW1iZXI9LTF9ZnVuY3Rpb24gQih0LGUpe3RoaXMuZ1N0YXRlPXQsdGhpcy5tYXRyaXg9ZSx0aGlzLmlkPVwiXCIsdGhpcy5vYmplY3ROdW1iZXI9LTF9ZnVuY3Rpb24gTSh0LGUscixuLGkpe2lmKCEodGhpcyBpbnN0YW5jZW9mIE0pKXJldHVybiBuZXcgTSh0LGUscixuLGkpO3RoaXMudHlwZT1cImF4aWFsXCI9PT10PzI6Myx0aGlzLmNvb3Jkcz1lLHRoaXMuY29sb3JzPXIsQi5jYWxsKHRoaXMsbixpKX1mdW5jdGlvbiBxKHQsZSxyLG4saSl7aWYoISh0aGlzIGluc3RhbmNlb2YgcSkpcmV0dXJuIG5ldyBxKHQsZSxyLG4saSk7dGhpcy5ib3VuZGluZ0JveD10LHRoaXMueFN0ZXA9ZSx0aGlzLnlTdGVwPXIsdGhpcy5zdHJlYW09XCJcIix0aGlzLmNsb25lSW5kZXg9MCxCLmNhbGwodGhpcyxuLGkpfWZ1bmN0aW9uIEUoZSl7dmFyIHIsbj1cInN0cmluZ1wiPT10eXBlb2YgYXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpcInBcIixhPWFyZ3VtZW50c1sxXSxzPWFyZ3VtZW50c1syXSx1PWFyZ3VtZW50c1szXSxjPVtdLGY9MSxwPTE2LGc9XCJTXCIsbT1udWxsO1wib2JqZWN0XCI9PT10KGU9ZXx8e30pJiYobj1lLm9yaWVudGF0aW9uLGE9ZS51bml0fHxhLHM9ZS5mb3JtYXR8fHMsdT1lLmNvbXByZXNzfHxlLmNvbXByZXNzUGRmfHx1LG51bGwhPT0obT1lLmVuY3J5cHRpb258fG51bGwpJiYobS51c2VyUGFzc3dvcmQ9bS51c2VyUGFzc3dvcmR8fFwiXCIsbS5vd25lclBhc3N3b3JkPW0ub3duZXJQYXNzd29yZHx8XCJcIixtLnVzZXJQZXJtaXNzaW9ucz1tLnVzZXJQZXJtaXNzaW9uc3x8W10pLGY9XCJudW1iZXJcIj09dHlwZW9mIGUudXNlclVuaXQ/TWF0aC5hYnMoZS51c2VyVW5pdCk6MSx2b2lkIDAhPT1lLnByZWNpc2lvbiYmKHI9ZS5wcmVjaXNpb24pLHZvaWQgMCE9PWUuZmxvYXRQcmVjaXNpb24mJihwPWUuZmxvYXRQcmVjaXNpb24pLGc9ZS5kZWZhdWx0UGF0aE9wZXJhdGlvbnx8XCJTXCIpLGM9ZS5maWx0ZXJzfHwoITA9PT11P1tcIkZsYXRlRW5jb2RlXCJdOmMpLGE9YXx8XCJtbVwiLG49KFwiXCIrKG58fFwiUFwiKSkudG9Mb3dlckNhc2UoKTt2YXIgdj1lLnB1dE9ubHlVc2VkRm9udHN8fCExLGI9e30seT17aW50ZXJuYWw6e30sX19wcml2YXRlX186e319O3kuX19wcml2YXRlX18uUHViU3ViPWo7dmFyIHc9XCIxLjNcIixOPXkuX19wcml2YXRlX18uZ2V0UGRmVmVyc2lvbj1mdW5jdGlvbigpe3JldHVybiB3fTt5Ll9fcHJpdmF0ZV9fLnNldFBkZlZlcnNpb249ZnVuY3Rpb24odCl7dz10fTt2YXIgTD17YTA6WzIzODMuOTQsMzM3MC4zOV0sYTE6WzE2ODMuNzgsMjM4My45NF0sYTI6WzExOTAuNTUsMTY4My43OF0sYTM6Wzg0MS44OSwxMTkwLjU1XSxhNDpbNTk1LjI4LDg0MS44OV0sYTU6WzQxOS41Myw1OTUuMjhdLGE2OlsyOTcuNjQsNDE5LjUzXSxhNzpbMjA5Ljc2LDI5Ny42NF0sYTg6WzE0Ny40LDIwOS43Nl0sYTk6WzEwNC44OCwxNDcuNF0sYTEwOls3My43LDEwNC44OF0sYjA6WzI4MzQuNjUsNDAwOC4xOV0sYjE6WzIwMDQuMDksMjgzNC42NV0sYjI6WzE0MTcuMzIsMjAwNC4wOV0sYjM6WzEwMDAuNjMsMTQxNy4zMl0sYjQ6WzcwOC42NiwxMDAwLjYzXSxiNTpbNDk4LjksNzA4LjY2XSxiNjpbMzU0LjMzLDQ5OC45XSxiNzpbMjQ5LjQ1LDM1NC4zM10sYjg6WzE3NS43NSwyNDkuNDVdLGI5OlsxMjQuNzIsMTc1Ljc1XSxiMTA6Wzg3Ljg3LDEyNC43Ml0sYzA6WzI1OTkuMzcsMzY3Ni41NF0sYzE6WzE4MzYuODUsMjU5OS4zN10sYzI6WzEyOTguMjcsMTgzNi44NV0sYzM6WzkxOC40MywxMjk4LjI3XSxjNDpbNjQ5LjEzLDkxOC40M10sYzU6WzQ1OS4yMSw2NDkuMTNdLGM2OlszMjMuMTUsNDU5LjIxXSxjNzpbMjI5LjYxLDMyMy4xNV0sYzg6WzE2MS41NywyMjkuNjFdLGM5OlsxMTMuMzksMTYxLjU3XSxjMTA6Wzc5LjM3LDExMy4zOV0sZGw6WzMxMS44MSw2MjMuNjJdLGxldHRlcjpbNjEyLDc5Ml0sXCJnb3Zlcm5tZW50LWxldHRlclwiOls1NzYsNzU2XSxsZWdhbDpbNjEyLDEwMDhdLFwianVuaW9yLWxlZ2FsXCI6WzU3NiwzNjBdLGxlZGdlcjpbMTIyNCw3OTJdLHRhYmxvaWQ6Wzc5MiwxMjI0XSxcImNyZWRpdC1jYXJkXCI6WzE1MywyNDNdfTt5Ll9fcHJpdmF0ZV9fLmdldFBhZ2VGb3JtYXRzPWZ1bmN0aW9uKCl7cmV0dXJuIEx9O3ZhciB4PXkuX19wcml2YXRlX18uZ2V0UGFnZUZvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gTFt0XX07cz1zfHxcImE0XCI7dmFyIEE9XCJjb21wYXRcIixTPVwiYWR2YW5jZWRcIixfPUE7ZnVuY3Rpb24gUCgpe3RoaXMuc2F2ZUdyYXBoaWNzU3RhdGUoKSxsdChuZXcgV3QoU3QsMCwwLC1TdCwwLFByKCkqU3QpLnRvU3RyaW5nKCkrXCIgY21cIiksdGhpcy5zZXRGb250U2l6ZSh0aGlzLmdldEZvbnRTaXplKCkvU3QpLGc9XCJuXCIsXz1TfWZ1bmN0aW9uIGsoKXt0aGlzLnJlc3RvcmVHcmFwaGljc1N0YXRlKCksZz1cIlNcIixfPUF9dmFyIEY9eS5fX3ByaXZhdGVfXy5jb21iaW5lRm9udFN0eWxlQW5kRm9udFdlaWdodD1mdW5jdGlvbih0LGUpe2lmKFwiYm9sZFwiPT10JiZcIm5vcm1hbFwiPT1lfHxcImJvbGRcIj09dCYmNDAwPT1lfHxcIm5vcm1hbFwiPT10JiZcIml0YWxpY1wiPT1lfHxcImJvbGRcIj09dCYmXCJpdGFsaWNcIj09ZSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIENvbWJpbmF0aW9uIG9mIGZvbnR3ZWlnaHQgYW5kIGZvbnRzdHlsZVwiKTtyZXR1cm4gZSYmKHQ9NDAwPT1lfHxcIm5vcm1hbFwiPT09ZT9cIml0YWxpY1wiPT09dD9cIml0YWxpY1wiOlwibm9ybWFsXCI6NzAwIT1lJiZcImJvbGRcIiE9PWV8fFwibm9ybWFsXCIhPT10Pyg3MDA9PWU/XCJib2xkXCI6ZSkrXCJcIit0OlwiYm9sZFwiKSx0fTt5LmFkdmFuY2VkQVBJPWZ1bmN0aW9uKHQpe3ZhciBlPV89PT1BO3JldHVybiBlJiZQLmNhbGwodGhpcyksXCJmdW5jdGlvblwiIT10eXBlb2YgdHx8KHQodGhpcyksZSYmay5jYWxsKHRoaXMpKSx0aGlzfSx5LmNvbXBhdEFQST1mdW5jdGlvbih0KXt2YXIgZT1fPT09UztyZXR1cm4gZSYmay5jYWxsKHRoaXMpLFwiZnVuY3Rpb25cIiE9dHlwZW9mIHR8fCh0KHRoaXMpLGUmJlAuY2FsbCh0aGlzKSksdGhpc30seS5pc0FkdmFuY2VkQVBJPWZ1bmN0aW9uKCl7cmV0dXJuIF89PT1TfTt2YXIgQixSPWZ1bmN0aW9uKHQpe2lmKF8hPT1TKXRocm93IG5ldyBFcnJvcih0K1wiIGlzIG9ubHkgYXZhaWxhYmxlIGluICdhZHZhbmNlZCcgQVBJIG1vZGUuIFlvdSBuZWVkIHRvIGNhbGwgYWR2YW5jZWRBUEkoKSBmaXJzdC5cIil9LEQ9eS5yb3VuZFRvUHJlY2lzaW9uPXkuX19wcml2YXRlX18ucm91bmRUb1ByZWNpc2lvbj1mdW5jdGlvbih0LGUpe3ZhciBuPXJ8fGU7aWYoaXNOYU4odCl8fGlzTmFOKG4pKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGpzUERGLnJvdW5kVG9QcmVjaXNpb25cIik7cmV0dXJuIHQudG9GaXhlZChuKS5yZXBsYWNlKC8wKyQvLFwiXCIpfTtCPXkuaHBmPXkuX19wcml2YXRlX18uaHBmPVwibnVtYmVyXCI9PXR5cGVvZiBwP2Z1bmN0aW9uKHQpe2lmKGlzTmFOKHQpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGpzUERGLmhwZlwiKTtyZXR1cm4gRCh0LHApfTpcInNtYXJ0XCI9PT1wP2Z1bmN0aW9uKHQpe2lmKGlzTmFOKHQpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGpzUERGLmhwZlwiKTtyZXR1cm4gRCh0LHQ+LTEmJnQ8MT8xNjo1KX06ZnVuY3Rpb24odCl7aWYoaXNOYU4odCkpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8ganNQREYuaHBmXCIpO3JldHVybiBEKHQsMTYpfTt2YXIgVD15LmYyPXkuX19wcml2YXRlX18uZjI9ZnVuY3Rpb24odCl7aWYoaXNOYU4odCkpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8ganNQREYuZjJcIik7cmV0dXJuIEQodCwyKX0sej15Ll9fcHJpdmF0ZV9fLmYzPWZ1bmN0aW9uKHQpe2lmKGlzTmFOKHQpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGpzUERGLmYzXCIpO3JldHVybiBEKHQsMyl9LFU9eS5zY2FsZT15Ll9fcHJpdmF0ZV9fLnNjYWxlPWZ1bmN0aW9uKHQpe2lmKGlzTmFOKHQpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGpzUERGLnNjYWxlXCIpO3JldHVybiBfPT09QT90KlN0Ol89PT1TP3Q6dm9pZCAwfSxIPWZ1bmN0aW9uKHQpe3JldHVybiBVKGZ1bmN0aW9uKHQpe3JldHVybiBfPT09QT9QcigpLXQ6Xz09PVM/dDp2b2lkIDB9KHQpKX07eS5fX3ByaXZhdGVfXy5zZXRQcmVjaXNpb249eS5zZXRQcmVjaXNpb249ZnVuY3Rpb24odCl7XCJudW1iZXJcIj09dHlwZW9mIHBhcnNlSW50KHQsMTApJiYocj1wYXJzZUludCh0LDEwKSl9O3ZhciBXLFY9XCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLEc9eS5fX3ByaXZhdGVfXy5nZXRGaWxlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gVn0sWT15Ll9fcHJpdmF0ZV9fLnNldEZpbGVJZD1mdW5jdGlvbih0KXtyZXR1cm4gVj12b2lkIDAhPT10JiYvXlthLWZBLUYwLTldezMyfSQvLnRlc3QodCk/dC50b1VwcGVyQ2FzZSgpOlYuc3BsaXQoXCJcIikubWFwKGZ1bmN0aW9uKCl7cmV0dXJuXCJBQkNERUYwMTIzNDU2Nzg5XCIuY2hhckF0KE1hdGguZmxvb3IoMTYqTWF0aC5yYW5kb20oKSkpfSkuam9pbihcIlwiKSxudWxsIT09bSYmKE9lPW5ldyBJKG0udXNlclBlcm1pc3Npb25zLG0udXNlclBhc3N3b3JkLG0ub3duZXJQYXNzd29yZCxWKSksVn07eS5zZXRGaWxlSWQ9ZnVuY3Rpb24odCl7cmV0dXJuIFkodCksdGhpc30seS5nZXRGaWxlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gRygpfTt2YXIgSj15Ll9fcHJpdmF0ZV9fLmNvbnZlcnREYXRlVG9QREZEYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKSxyPWU8MD9cIitcIjpcIi1cIixuPU1hdGguZmxvb3IoTWF0aC5hYnMoZS82MCkpLGk9TWF0aC5hYnMoZSU2MCksYT1bcixRKG4pLFwiJ1wiLFEoaSksXCInXCJdLmpvaW4oXCJcIik7cmV0dXJuW1wiRDpcIix0LmdldEZ1bGxZZWFyKCksUSh0LmdldE1vbnRoKCkrMSksUSh0LmdldERhdGUoKSksUSh0LmdldEhvdXJzKCkpLFEodC5nZXRNaW51dGVzKCkpLFEodC5nZXRTZWNvbmRzKCkpLGFdLmpvaW4oXCJcIil9LFg9eS5fX3ByaXZhdGVfXy5jb252ZXJ0UERGRGF0ZVRvRGF0ZT1mdW5jdGlvbih0KXt2YXIgZT1wYXJzZUludCh0LnN1YnN0cigyLDQpLDEwKSxyPXBhcnNlSW50KHQuc3Vic3RyKDYsMiksMTApLTEsbj1wYXJzZUludCh0LnN1YnN0cig4LDIpLDEwKSxpPXBhcnNlSW50KHQuc3Vic3RyKDEwLDIpLDEwKSxhPXBhcnNlSW50KHQuc3Vic3RyKDEyLDIpLDEwKSxvPXBhcnNlSW50KHQuc3Vic3RyKDE0LDIpLDEwKTtyZXR1cm4gbmV3IERhdGUoZSxyLG4saSxhLG8sMCl9LEs9eS5fX3ByaXZhdGVfXy5zZXRDcmVhdGlvbkRhdGU9ZnVuY3Rpb24odCl7dmFyIGU7aWYodm9pZCAwPT09dCYmKHQ9bmV3IERhdGUpLHQgaW5zdGFuY2VvZiBEYXRlKWU9Sih0KTtlbHNle2lmKCEvXkQ6KDIwWzAtMl1bMC05XXwyMDNbMC03XXwxOVs3LTldWzAtOV0pKDBbMC05XXwxWzAtMl0pKFswLTJdWzAtOV18M1swLTFdKSgwWzAtOV18MVswLTldfDJbMC0zXSkoMFswLTldfFsxLTVdWzAtOV0pKDBbMC05XXxbMS01XVswLTldKShcXCswWzAtOV18XFwrMVswLTRdfC0wWzAtOV18LTFbMC0xXSknKDBbMC05XXxbMS01XVswLTldKSc/JC8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBqc1BERi5zZXRDcmVhdGlvbkRhdGVcIik7ZT10fXJldHVybiBXPWV9LFo9eS5fX3ByaXZhdGVfXy5nZXRDcmVhdGlvbkRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9VztyZXR1cm5cImpzRGF0ZVwiPT09dCYmKGU9WChXKSksZX07eS5zZXRDcmVhdGlvbkRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIEsodCksdGhpc30seS5nZXRDcmVhdGlvbkRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIFoodCl9O3ZhciAkLFE9eS5fX3ByaXZhdGVfXy5wYWRkMj1mdW5jdGlvbih0KXtyZXR1cm4oXCIwXCIrcGFyc2VJbnQodCkpLnNsaWNlKC0yKX0sdHQ9eS5fX3ByaXZhdGVfXy5wYWRkMkhleD1mdW5jdGlvbih0KXtyZXR1cm4oXCIwMFwiKyh0PXQudG9TdHJpbmcoKSkpLnN1YnN0cih0Lmxlbmd0aCl9LGV0PTAscnQ9W10sbnQ9W10saXQ9MCxhdD1bXSxvdD1bXSxzdD0hMSx1dD1udDt5Ll9fcHJpdmF0ZV9fLnNldEN1c3RvbU91dHB1dERlc3RpbmF0aW9uPWZ1bmN0aW9uKHQpe3N0PSEwLHV0PXR9O3ZhciBjdD1mdW5jdGlvbih0KXtzdHx8KHV0PXQpfTt5Ll9fcHJpdmF0ZV9fLnJlc2V0Q3VzdG9tT3V0cHV0RGVzdGluYXRpb249ZnVuY3Rpb24oKXtzdD0hMSx1dD1udH07dmFyIGx0PXkuX19wcml2YXRlX18ub3V0PWZ1bmN0aW9uKHQpe3JldHVybiB0PXQudG9TdHJpbmcoKSxpdCs9dC5sZW5ndGgrMSx1dC5wdXNoKHQpLHV0fSxodD15Ll9fcHJpdmF0ZV9fLndyaXRlPWZ1bmN0aW9uKHQpe3JldHVybiBsdCgxPT09YXJndW1lbnRzLmxlbmd0aD90LnRvU3RyaW5nKCk6QXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbChhcmd1bWVudHMsXCIgXCIpKX0sZnQ9eS5fX3ByaXZhdGVfXy5nZXRBcnJheUJ1ZmZlcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXlCdWZmZXIoZSksbj1uZXcgVWludDhBcnJheShyKTtlLS07KW5bZV09dC5jaGFyQ29kZUF0KGUpO3JldHVybiByfSxkdD1bW1wiSGVsdmV0aWNhXCIsXCJoZWx2ZXRpY2FcIixcIm5vcm1hbFwiLFwiV2luQW5zaUVuY29kaW5nXCJdLFtcIkhlbHZldGljYS1Cb2xkXCIsXCJoZWx2ZXRpY2FcIixcImJvbGRcIixcIldpbkFuc2lFbmNvZGluZ1wiXSxbXCJIZWx2ZXRpY2EtT2JsaXF1ZVwiLFwiaGVsdmV0aWNhXCIsXCJpdGFsaWNcIixcIldpbkFuc2lFbmNvZGluZ1wiXSxbXCJIZWx2ZXRpY2EtQm9sZE9ibGlxdWVcIixcImhlbHZldGljYVwiLFwiYm9sZGl0YWxpY1wiLFwiV2luQW5zaUVuY29kaW5nXCJdLFtcIkNvdXJpZXJcIixcImNvdXJpZXJcIixcIm5vcm1hbFwiLFwiV2luQW5zaUVuY29kaW5nXCJdLFtcIkNvdXJpZXItQm9sZFwiLFwiY291cmllclwiLFwiYm9sZFwiLFwiV2luQW5zaUVuY29kaW5nXCJdLFtcIkNvdXJpZXItT2JsaXF1ZVwiLFwiY291cmllclwiLFwiaXRhbGljXCIsXCJXaW5BbnNpRW5jb2RpbmdcIl0sW1wiQ291cmllci1Cb2xkT2JsaXF1ZVwiLFwiY291cmllclwiLFwiYm9sZGl0YWxpY1wiLFwiV2luQW5zaUVuY29kaW5nXCJdLFtcIlRpbWVzLVJvbWFuXCIsXCJ0aW1lc1wiLFwibm9ybWFsXCIsXCJXaW5BbnNpRW5jb2RpbmdcIl0sW1wiVGltZXMtQm9sZFwiLFwidGltZXNcIixcImJvbGRcIixcIldpbkFuc2lFbmNvZGluZ1wiXSxbXCJUaW1lcy1JdGFsaWNcIixcInRpbWVzXCIsXCJpdGFsaWNcIixcIldpbkFuc2lFbmNvZGluZ1wiXSxbXCJUaW1lcy1Cb2xkSXRhbGljXCIsXCJ0aW1lc1wiLFwiYm9sZGl0YWxpY1wiLFwiV2luQW5zaUVuY29kaW5nXCJdLFtcIlphcGZEaW5nYmF0c1wiLFwiemFwZmRpbmdiYXRzXCIsXCJub3JtYWxcIixudWxsXSxbXCJTeW1ib2xcIixcInN5bWJvbFwiLFwibm9ybWFsXCIsbnVsbF1dO3kuX19wcml2YXRlX18uZ2V0U3RhbmRhcmRGb250cz1mdW5jdGlvbigpe3JldHVybiBkdH07dmFyIHB0PWUuZm9udFNpemV8fDE2O3kuX19wcml2YXRlX18uc2V0Rm9udFNpemU9eS5zZXRGb250U2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gcHQ9Xz09PVM/dC9TdDp0LHRoaXN9O3ZhciBndCxtdD15Ll9fcHJpdmF0ZV9fLmdldEZvbnRTaXplPXkuZ2V0Rm9udFNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gXz09PUE/cHQ6cHQqU3R9LHZ0PWUuUjJMfHwhMTt5Ll9fcHJpdmF0ZV9fLnNldFIyTD15LnNldFIyTD1mdW5jdGlvbih0KXtyZXR1cm4gdnQ9dCx0aGlzfSx5Ll9fcHJpdmF0ZV9fLmdldFIyTD15LmdldFIyTD1mdW5jdGlvbigpe3JldHVybiB2dH07dmFyIGJ0LHl0PXkuX19wcml2YXRlX18uc2V0Wm9vbU1vZGU9ZnVuY3Rpb24odCl7aWYoL14oPzpcXGQrXFwuXFxkKnxcXGQqXFwuXFxkK3xcXGQrKSUkLy50ZXN0KHQpKWd0PXQ7ZWxzZSBpZihpc05hTih0KSl7aWYoLTE9PT1bdm9pZCAwLG51bGwsXCJmdWxsd2lkdGhcIixcImZ1bGxoZWlnaHRcIixcImZ1bGxwYWdlXCIsXCJvcmlnaW5hbFwiXS5pbmRleE9mKHQpKXRocm93IG5ldyBFcnJvcignem9vbSBtdXN0IGJlIEludGVnZXIgKGUuZy4gMiksIGEgcGVyY2VudGFnZSBWYWx1ZSAoZS5nLiAzMDAlKSBvciBmdWxsd2lkdGgsIGZ1bGxoZWlnaHQsIGZ1bGxwYWdlLCBvcmlnaW5hbC4gXCInK3QrJ1wiIGlzIG5vdCByZWNvZ25pemVkLicpO2d0PXR9ZWxzZSBndD1wYXJzZUludCh0LDEwKX07eS5fX3ByaXZhdGVfXy5nZXRab29tTW9kZT1mdW5jdGlvbigpe3JldHVybiBndH07dmFyIHd0LE50PXkuX19wcml2YXRlX18uc2V0UGFnZU1vZGU9ZnVuY3Rpb24odCl7aWYoLTE9PVt2b2lkIDAsbnVsbCxcIlVzZU5vbmVcIixcIlVzZU91dGxpbmVzXCIsXCJVc2VUaHVtYnNcIixcIkZ1bGxTY3JlZW5cIl0uaW5kZXhPZih0KSl0aHJvdyBuZXcgRXJyb3IoJ1BhZ2UgbW9kZSBtdXN0IGJlIG9uZSBvZiBVc2VOb25lLCBVc2VPdXRsaW5lcywgVXNlVGh1bWJzLCBvciBGdWxsU2NyZWVuLiBcIicrdCsnXCIgaXMgbm90IHJlY29nbml6ZWQuJyk7YnQ9dH07eS5fX3ByaXZhdGVfXy5nZXRQYWdlTW9kZT1mdW5jdGlvbigpe3JldHVybiBidH07dmFyIEx0PXkuX19wcml2YXRlX18uc2V0TGF5b3V0TW9kZT1mdW5jdGlvbih0KXtpZigtMT09W3ZvaWQgMCxudWxsLFwiY29udGludW91c1wiLFwic2luZ2xlXCIsXCJ0d29sZWZ0XCIsXCJ0d29yaWdodFwiLFwidHdvXCJdLmluZGV4T2YodCkpdGhyb3cgbmV3IEVycm9yKCdMYXlvdXQgbW9kZSBtdXN0IGJlIG9uZSBvZiBjb250aW51b3VzLCBzaW5nbGUsIHR3b2xlZnQsIHR3b3JpZ2h0LiBcIicrdCsnXCIgaXMgbm90IHJlY29nbml6ZWQuJyk7d3Q9dH07eS5fX3ByaXZhdGVfXy5nZXRMYXlvdXRNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHd0fSx5Ll9fcHJpdmF0ZV9fLnNldERpc3BsYXlNb2RlPXkuc2V0RGlzcGxheU1vZGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB5dCh0KSxMdChlKSxOdChyKSx0aGlzfTt2YXIgeHQ9e3RpdGxlOlwiXCIsc3ViamVjdDpcIlwiLGF1dGhvcjpcIlwiLGtleXdvcmRzOlwiXCIsY3JlYXRvcjpcIlwifTt5Ll9fcHJpdmF0ZV9fLmdldERvY3VtZW50UHJvcGVydHk9ZnVuY3Rpb24odCl7aWYoLTE9PT1PYmplY3Qua2V5cyh4dCkuaW5kZXhPZih0KSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBqc1BERi5nZXREb2N1bWVudFByb3BlcnR5XCIpO3JldHVybiB4dFt0XX0seS5fX3ByaXZhdGVfXy5nZXREb2N1bWVudFByb3BlcnRpZXM9ZnVuY3Rpb24oKXtyZXR1cm4geHR9LHkuX19wcml2YXRlX18uc2V0RG9jdW1lbnRQcm9wZXJ0aWVzPXkuc2V0UHJvcGVydGllcz15LnNldERvY3VtZW50UHJvcGVydGllcz1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4geHQpeHQuaGFzT3duUHJvcGVydHkoZSkmJnRbZV0mJih4dFtlXT10W2VdKTtyZXR1cm4gdGhpc30seS5fX3ByaXZhdGVfXy5zZXREb2N1bWVudFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7aWYoLTE9PT1PYmplY3Qua2V5cyh4dCkuaW5kZXhPZih0KSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8ganNQREYuc2V0RG9jdW1lbnRQcm9wZXJ0eVwiKTtyZXR1cm4geHRbdF09ZX07dmFyIEF0LFN0LF90LFB0LGt0LEZ0PXt9LEl0PXt9LEN0PVtdLGp0PXt9LE90PXt9LEJ0PXt9LE10PXt9LHF0PW51bGwsRXQ9MCxSdD1bXSxEdD1uZXcgaih5KSxUdD1lLmhvdGZpeGVzfHxbXSx6dD17fSxVdD17fSxIdD1bXSxXdD1mdW5jdGlvbiB0KGUscixuLGksYSxvKXtpZighKHRoaXMgaW5zdGFuY2VvZiB0KSlyZXR1cm4gbmV3IHQoZSxyLG4saSxhLG8pO2lzTmFOKGUpJiYoZT0xKSxpc05hTihyKSYmKHI9MCksaXNOYU4obikmJihuPTApLGlzTmFOKGkpJiYoaT0xKSxpc05hTihhKSYmKGE9MCksaXNOYU4obykmJihvPTApLHRoaXMuX21hdHJpeD1bZSxyLG4saSxhLG9dfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoV3QucHJvdG90eXBlLFwic3hcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hdHJpeFswXX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX21hdHJpeFswXT10fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXdC5wcm90b3R5cGUsXCJzaHlcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hdHJpeFsxXX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX21hdHJpeFsxXT10fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXdC5wcm90b3R5cGUsXCJzaHhcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hdHJpeFsyXX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX21hdHJpeFsyXT10fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXdC5wcm90b3R5cGUsXCJzeVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF0cml4WzNdfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fbWF0cml4WzNdPXR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFd0LnByb3RvdHlwZSxcInR4XCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXRyaXhbNF19LHNldDpmdW5jdGlvbih0KXt0aGlzLl9tYXRyaXhbNF09dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoV3QucHJvdG90eXBlLFwidHlcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hdHJpeFs1XX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX21hdHJpeFs1XT10fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXdC5wcm90b3R5cGUsXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXRyaXhbMF19LHNldDpmdW5jdGlvbih0KXt0aGlzLl9tYXRyaXhbMF09dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoV3QucHJvdG90eXBlLFwiYlwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF0cml4WzFdfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fbWF0cml4WzFdPXR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFd0LnByb3RvdHlwZSxcImNcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hdHJpeFsyXX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX21hdHJpeFsyXT10fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXdC5wcm90b3R5cGUsXCJkXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXRyaXhbM119LHNldDpmdW5jdGlvbih0KXt0aGlzLl9tYXRyaXhbM109dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoV3QucHJvdG90eXBlLFwiZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF0cml4WzRdfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fbWF0cml4WzRdPXR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFd0LnByb3RvdHlwZSxcImZcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hdHJpeFs1XX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX21hdHJpeFs1XT10fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXdC5wcm90b3R5cGUsXCJyb3RhdGlvblwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5hdGFuMih0aGlzLnNoeCx0aGlzLnN4KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoV3QucHJvdG90eXBlLFwic2NhbGVYXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29tcG9zZSgpLnNjYWxlLnN4fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXdC5wcm90b3R5cGUsXCJzY2FsZVlcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb21wb3NlKCkuc2NhbGUuc3l9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFd0LnByb3RvdHlwZSxcImlzSWRlbnRpdHlcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLnN4JiYwPT09dGhpcy5zaHkmJjA9PT10aGlzLnNoeCYmMT09PXRoaXMuc3kmJjA9PT10aGlzLnR4JiYwPT09dGhpcy50eX19KSxXdC5wcm90b3R5cGUuam9pbj1mdW5jdGlvbih0KXtyZXR1cm5bdGhpcy5zeCx0aGlzLnNoeSx0aGlzLnNoeCx0aGlzLnN5LHRoaXMudHgsdGhpcy50eV0ubWFwKEIpLmpvaW4odCl9LFd0LnByb3RvdHlwZS5tdWx0aXBseT1mdW5jdGlvbih0KXt2YXIgZT10LnN4KnRoaXMuc3grdC5zaHkqdGhpcy5zaHgscj10LnN4KnRoaXMuc2h5K3Quc2h5KnRoaXMuc3ksbj10LnNoeCp0aGlzLnN4K3Quc3kqdGhpcy5zaHgsaT10LnNoeCp0aGlzLnNoeSt0LnN5KnRoaXMuc3ksYT10LnR4KnRoaXMuc3grdC50eSp0aGlzLnNoeCt0aGlzLnR4LG89dC50eCp0aGlzLnNoeSt0LnR5KnRoaXMuc3krdGhpcy50eTtyZXR1cm4gbmV3IFd0KGUscixuLGksYSxvKX0sV3QucHJvdG90eXBlLmRlY29tcG9zZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc3gsZT10aGlzLnNoeSxyPXRoaXMuc2h4LG49dGhpcy5zeSxpPXRoaXMudHgsYT10aGlzLnR5LG89TWF0aC5zcXJ0KHQqdCtlKmUpLHM9KHQvPW8pKnIrKGUvPW8pKm47ci09dCpzLG4tPWUqczt2YXIgdT1NYXRoLnNxcnQocipyK24qbik7cmV0dXJuIHMvPXUsdCoobi89dSk8ZSooci89dSkmJih0PS10LGU9LWUscz0tcyxvPS1vKSx7c2NhbGU6bmV3IFd0KG8sMCwwLHUsMCwwKSx0cmFuc2xhdGU6bmV3IFd0KDEsMCwwLDEsaSxhKSxyb3RhdGU6bmV3IFd0KHQsZSwtZSx0LDAsMCksc2tldzpuZXcgV3QoMSwwLHMsMSwwLDApfX0sV3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmpvaW4oXCIgXCIpfSxXdC5wcm90b3R5cGUuaW52ZXJzZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnN4LGU9dGhpcy5zaHkscj10aGlzLnNoeCxuPXRoaXMuc3ksaT10aGlzLnR4LGE9dGhpcy50eSxvPTEvKHQqbi1lKnIpLHM9bipvLHU9LWUqbyxjPS1yKm8sbD10Km87cmV0dXJuIG5ldyBXdChzLHUsYyxsLC1zKmktYyphLC11KmktbCphKX0sV3QucHJvdG90eXBlLmFwcGx5VG9Qb2ludD1mdW5jdGlvbih0KXt2YXIgZT10LngqdGhpcy5zeCt0LnkqdGhpcy5zaHgrdGhpcy50eCxyPXQueCp0aGlzLnNoeSt0LnkqdGhpcy5zeSt0aGlzLnR5O3JldHVybiBuZXcgbXIoZSxyKX0sV3QucHJvdG90eXBlLmFwcGx5VG9SZWN0YW5nbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5hcHBseVRvUG9pbnQodCkscj10aGlzLmFwcGx5VG9Qb2ludChuZXcgbXIodC54K3Qudyx0LnkrdC5oKSk7cmV0dXJuIG5ldyB2cihlLngsZS55LHIueC1lLngsci55LWUueSl9LFd0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc3gsZT10aGlzLnNoeSxyPXRoaXMuc2h4LG49dGhpcy5zeSxpPXRoaXMudHgsYT10aGlzLnR5O3JldHVybiBuZXcgV3QodCxlLHIsbixpLGEpfSx5Lk1hdHJpeD1XdDt2YXIgVnQ9eS5tYXRyaXhNdWx0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUubXVsdGlwbHkodCl9LEd0PW5ldyBXdCgxLDAsMCwxLDAsMCk7eS51bml0TWF0cml4PXkuaWRlbnRpdHlNYXRyaXg9R3Q7dmFyIFl0PWZ1bmN0aW9uKHQsZSl7aWYoIU90W3RdKXt2YXIgcj0oZSBpbnN0YW5jZW9mIE0/XCJTaFwiOlwiUFwiKSsoT2JqZWN0LmtleXMoanQpLmxlbmd0aCsxKS50b1N0cmluZygxMCk7ZS5pZD1yLE90W3RdPXIsanRbcl09ZSxEdC5wdWJsaXNoKFwiYWRkUGF0dGVyblwiLGUpfX07eS5TaGFkaW5nUGF0dGVybj1NLHkuVGlsaW5nUGF0dGVybj1xLHkuYWRkU2hhZGluZ1BhdHRlcm49ZnVuY3Rpb24odCxlKXtyZXR1cm4gUihcImFkZFNoYWRpbmdQYXR0ZXJuKClcIiksWXQodCxlKSx0aGlzfSx5LmJlZ2luVGlsaW5nUGF0dGVybj1mdW5jdGlvbih0KXtSKFwiYmVnaW5UaWxpbmdQYXR0ZXJuKClcIikseXIodC5ib3VuZGluZ0JveFswXSx0LmJvdW5kaW5nQm94WzFdLHQuYm91bmRpbmdCb3hbMl0tdC5ib3VuZGluZ0JveFswXSx0LmJvdW5kaW5nQm94WzNdLXQuYm91bmRpbmdCb3hbMV0sdC5tYXRyaXgpfSx5LmVuZFRpbGluZ1BhdHRlcm49ZnVuY3Rpb24odCxlKXtSKFwiZW5kVGlsaW5nUGF0dGVybigpXCIpLGUuc3RyZWFtPW90WyRdLmpvaW4oXCJcXG5cIiksWXQodCxlKSxEdC5wdWJsaXNoKFwiZW5kVGlsaW5nUGF0dGVyblwiLGUpLEh0LnBvcCgpLnJlc3RvcmUoKX07dmFyIEp0LFh0PXkuX19wcml2YXRlX18ubmV3T2JqZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9S3QoKTtyZXR1cm4gWnQodCwhMCksdH0sS3Q9eS5fX3ByaXZhdGVfXy5uZXdPYmplY3REZWZlcnJlZD1mdW5jdGlvbigpe3JldHVybiBldCsrLHJ0W2V0XT1mdW5jdGlvbigpe3JldHVybiBpdH0sZXR9LFp0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9XCJib29sZWFuXCI9PXR5cGVvZiBlJiZlLHJ0W3RdPWl0LGUmJmx0KHQrXCIgMCBvYmpcIiksdH0sJHQ9eS5fX3ByaXZhdGVfXy5uZXdBZGRpdGlvbmFsT2JqZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9e29iaklkOkt0KCksY29udGVudDpcIlwifTtyZXR1cm4gYXQucHVzaCh0KSx0fSxRdD1LdCgpLHRlPUt0KCksZWU9eS5fX3ByaXZhdGVfXy5kZWNvZGVDb2xvclN0cmluZz1mdW5jdGlvbih0KXt2YXIgZT10LnNwbGl0KFwiIFwiKTtpZigyIT09ZS5sZW5ndGh8fFwiZ1wiIT09ZVsxXSYmXCJHXCIhPT1lWzFdKTUhPT1lLmxlbmd0aHx8XCJrXCIhPT1lWzRdJiZcIktcIiE9PWVbNF18fChlPVsoMS1lWzBdKSooMS1lWzNdKSwoMS1lWzFdKSooMS1lWzNdKSwoMS1lWzJdKSooMS1lWzNdKSxcInJcIl0pO2Vsc2V7dmFyIHI9cGFyc2VGbG9hdChlWzBdKTtlPVtyLHIscixcInJcIl19Zm9yKHZhciBuPVwiI1wiLGk9MDtpPDM7aSsrKW4rPShcIjBcIitNYXRoLmZsb29yKDI1NSpwYXJzZUZsb2F0KGVbaV0pKS50b1N0cmluZygxNikpLnNsaWNlKC0yKTtyZXR1cm4gbn0scmU9eS5fX3ByaXZhdGVfXy5lbmNvZGVDb2xvclN0cmluZz1mdW5jdGlvbihlKXt2YXIgcjtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9e2NoMTplfSk7dmFyIG49ZS5jaDEsaT1lLmNoMixhPWUuY2gzLG89ZS5jaDQscz1cImRyYXdcIj09PWUucGRmQ29sb3JUeXBlP1tcIkdcIixcIlJHXCIsXCJLXCJdOltcImdcIixcInJnXCIsXCJrXCJdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuJiZcIiNcIiE9PW4uY2hhckF0KDApKXt2YXIgdT1uZXcgaChuKTtpZih1Lm9rKW49dS50b0hleCgpO2Vsc2UgaWYoIS9eXFxkKlxcLj9cXGQqJC8udGVzdChuKSl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29sb3IgXCInK24rJ1wiIHBhc3NlZCB0byBqc1BERi5lbmNvZGVDb2xvclN0cmluZy4nKX1pZihcInN0cmluZ1wiPT10eXBlb2YgbiYmL14jWzAtOUEtRmEtZl17M30kLy50ZXN0KG4pJiYobj1cIiNcIituWzFdK25bMV0rblsyXStuWzJdK25bM10rblszXSksXCJzdHJpbmdcIj09dHlwZW9mIG4mJi9eI1swLTlBLUZhLWZdezZ9JC8udGVzdChuKSl7dmFyIGM9cGFyc2VJbnQobi5zdWJzdHIoMSksMTYpO249Yz4+MTYmMjU1LGk9Yz4+OCYyNTUsYT0yNTUmY31pZih2b2lkIDA9PT1pfHx2b2lkIDA9PT1vJiZuPT09aSYmaT09PWEpcj1cInN0cmluZ1wiPT10eXBlb2Ygbj9uK1wiIFwiK3NbMF06Mj09PWUucHJlY2lzaW9uP1Qobi8yNTUpK1wiIFwiK3NbMF06eihuLzI1NSkrXCIgXCIrc1swXTtlbHNlIGlmKHZvaWQgMD09PW98fFwib2JqZWN0XCI9PT10KG8pKXtpZihvJiYhaXNOYU4oby5hKSYmMD09PW8uYSlyZXR1cm5bXCIxLlwiLFwiMS5cIixcIjEuXCIsc1sxXV0uam9pbihcIiBcIik7cj1cInN0cmluZ1wiPT10eXBlb2Ygbj9bbixpLGEsc1sxXV0uam9pbihcIiBcIik6Mj09PWUucHJlY2lzaW9uP1tUKG4vMjU1KSxUKGkvMjU1KSxUKGEvMjU1KSxzWzFdXS5qb2luKFwiIFwiKTpbeihuLzI1NSkseihpLzI1NSkseihhLzI1NSksc1sxXV0uam9pbihcIiBcIil9ZWxzZSByPVwic3RyaW5nXCI9PXR5cGVvZiBuP1tuLGksYSxvLHNbMl1dLmpvaW4oXCIgXCIpOjI9PT1lLnByZWNpc2lvbj9bVChuKSxUKGkpLFQoYSksVChvKSxzWzJdXS5qb2luKFwiIFwiKTpbeihuKSx6KGkpLHooYSkseihvKSxzWzJdXS5qb2luKFwiIFwiKTtyZXR1cm4gcn0sbmU9eS5fX3ByaXZhdGVfXy5nZXRGaWx0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIGN9LGllPXkuX19wcml2YXRlX18ucHV0U3RyZWFtPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXR8fHt9KS5kYXRhfHxcIlwiLHI9dC5maWx0ZXJzfHxuZSgpLG49dC5hbHJlYWR5QXBwbGllZEZpbHRlcnN8fFtdLGk9dC5hZGRMZW5ndGgxfHwhMSxhPWUubGVuZ3RoLG89dC5vYmplY3RJZCxzPWZ1bmN0aW9uKHQpe3JldHVybiB0fTtpZihudWxsIT09bSYmdm9pZCAwPT09byl0aHJvdyBuZXcgRXJyb3IoXCJPYmplY3RJZCBtdXN0IGJlIHBhc3NlZCB0byBwdXRTdHJlYW0gZm9yIGZpbGUgZW5jcnlwdGlvblwiKTtudWxsIT09bSYmKHM9T2UuZW5jcnlwdG9yKG8sMCkpO3ZhciB1PXt9OyEwPT09ciYmKHI9W1wiRmxhdGVFbmNvZGVcIl0pO3ZhciBjPXQuYWRkaXRpb25hbEtleVZhbHVlc3x8W10sbD0odT12b2lkIDAhPT1FLkFQSS5wcm9jZXNzRGF0YUJ5RmlsdGVycz9FLkFQSS5wcm9jZXNzRGF0YUJ5RmlsdGVycyhlLHIpOntkYXRhOmUscmV2ZXJzZUNoYWluOltdfSkucmV2ZXJzZUNoYWluKyhBcnJheS5pc0FycmF5KG4pP24uam9pbihcIiBcIik6bi50b1N0cmluZygpKTtpZigwIT09dS5kYXRhLmxlbmd0aCYmKGMucHVzaCh7a2V5OlwiTGVuZ3RoXCIsdmFsdWU6dS5kYXRhLmxlbmd0aH0pLCEwPT09aSYmYy5wdXNoKHtrZXk6XCJMZW5ndGgxXCIsdmFsdWU6YX0pKSwwIT1sLmxlbmd0aClpZihsLnNwbGl0KFwiL1wiKS5sZW5ndGgtMT09MSljLnB1c2goe2tleTpcIkZpbHRlclwiLHZhbHVlOmx9KTtlbHNle2MucHVzaCh7a2V5OlwiRmlsdGVyXCIsdmFsdWU6XCJbXCIrbCtcIl1cIn0pO2Zvcih2YXIgaD0wO2g8Yy5sZW5ndGg7aCs9MSlpZihcIkRlY29kZVBhcm1zXCI9PT1jW2hdLmtleSl7Zm9yKHZhciBmPVtdLGQ9MDtkPHUucmV2ZXJzZUNoYWluLnNwbGl0KFwiL1wiKS5sZW5ndGgtMTtkKz0xKWYucHVzaChcIm51bGxcIik7Zi5wdXNoKGNbaF0udmFsdWUpLGNbaF0udmFsdWU9XCJbXCIrZi5qb2luKFwiIFwiKStcIl1cIn19bHQoXCI8PFwiKTtmb3IodmFyIHA9MDtwPGMubGVuZ3RoO3ArKylsdChcIi9cIitjW3BdLmtleStcIiBcIitjW3BdLnZhbHVlKTtsdChcIj4+XCIpLDAhPT11LmRhdGEubGVuZ3RoJiYobHQoXCJzdHJlYW1cIiksbHQocyh1LmRhdGEpKSxsdChcImVuZHN0cmVhbVwiKSl9LGFlPXkuX19wcml2YXRlX18ucHV0UGFnZT1mdW5jdGlvbih0KXt2YXIgZT10Lm51bWJlcixyPXQuZGF0YSxuPXQub2JqSWQsaT10LmNvbnRlbnRzT2JqSWQ7WnQobiwhMCksbHQoXCI8PC9UeXBlIC9QYWdlXCIpLGx0KFwiL1BhcmVudCBcIit0LnJvb3REaWN0aW9uYXJ5T2JqSWQrXCIgMCBSXCIpLGx0KFwiL1Jlc291cmNlcyBcIit0LnJlc291cmNlRGljdGlvbmFyeU9iaklkK1wiIDAgUlwiKSxsdChcIi9NZWRpYUJveCBbXCIrcGFyc2VGbG9hdChCKHQubWVkaWFCb3guYm90dG9tTGVmdFgpKStcIiBcIitwYXJzZUZsb2F0KEIodC5tZWRpYUJveC5ib3R0b21MZWZ0WSkpK1wiIFwiK0IodC5tZWRpYUJveC50b3BSaWdodFgpK1wiIFwiK0IodC5tZWRpYUJveC50b3BSaWdodFkpK1wiXVwiKSxudWxsIT09dC5jcm9wQm94JiZsdChcIi9Dcm9wQm94IFtcIitCKHQuY3JvcEJveC5ib3R0b21MZWZ0WCkrXCIgXCIrQih0LmNyb3BCb3guYm90dG9tTGVmdFkpK1wiIFwiK0IodC5jcm9wQm94LnRvcFJpZ2h0WCkrXCIgXCIrQih0LmNyb3BCb3gudG9wUmlnaHRZKStcIl1cIiksbnVsbCE9PXQuYmxlZWRCb3gmJmx0KFwiL0JsZWVkQm94IFtcIitCKHQuYmxlZWRCb3guYm90dG9tTGVmdFgpK1wiIFwiK0IodC5ibGVlZEJveC5ib3R0b21MZWZ0WSkrXCIgXCIrQih0LmJsZWVkQm94LnRvcFJpZ2h0WCkrXCIgXCIrQih0LmJsZWVkQm94LnRvcFJpZ2h0WSkrXCJdXCIpLG51bGwhPT10LnRyaW1Cb3gmJmx0KFwiL1RyaW1Cb3ggW1wiK0IodC50cmltQm94LmJvdHRvbUxlZnRYKStcIiBcIitCKHQudHJpbUJveC5ib3R0b21MZWZ0WSkrXCIgXCIrQih0LnRyaW1Cb3gudG9wUmlnaHRYKStcIiBcIitCKHQudHJpbUJveC50b3BSaWdodFkpK1wiXVwiKSxudWxsIT09dC5hcnRCb3gmJmx0KFwiL0FydEJveCBbXCIrQih0LmFydEJveC5ib3R0b21MZWZ0WCkrXCIgXCIrQih0LmFydEJveC5ib3R0b21MZWZ0WSkrXCIgXCIrQih0LmFydEJveC50b3BSaWdodFgpK1wiIFwiK0IodC5hcnRCb3gudG9wUmlnaHRZKStcIl1cIiksXCJudW1iZXJcIj09dHlwZW9mIHQudXNlclVuaXQmJjEhPT10LnVzZXJVbml0JiZsdChcIi9Vc2VyVW5pdCBcIit0LnVzZXJVbml0KSxEdC5wdWJsaXNoKFwicHV0UGFnZVwiLHtvYmpJZDpuLHBhZ2VDb250ZXh0OlJ0W2VdLHBhZ2VOdW1iZXI6ZSxwYWdlOnJ9KSxsdChcIi9Db250ZW50cyBcIitpK1wiIDAgUlwiKSxsdChcIj4+XCIpLGx0KFwiZW5kb2JqXCIpO3ZhciBhPXIuam9pbihcIlxcblwiKTtyZXR1cm4gXz09PVMmJihhKz1cIlxcblFcIiksWnQoaSwhMCksaWUoe2RhdGE6YSxmaWx0ZXJzOm5lKCksb2JqZWN0SWQ6aX0pLGx0KFwiZW5kb2JqXCIpLG59LG9lPXkuX19wcml2YXRlX18ucHV0UGFnZXM9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9W107Zm9yKHQ9MTt0PD1FdDt0KyspUnRbdF0ub2JqSWQ9S3QoKSxSdFt0XS5jb250ZW50c09iaklkPUt0KCk7Zm9yKHQ9MTt0PD1FdDt0Kyspci5wdXNoKGFlKHtudW1iZXI6dCxkYXRhOm90W3RdLG9iaklkOlJ0W3RdLm9iaklkLGNvbnRlbnRzT2JqSWQ6UnRbdF0uY29udGVudHNPYmpJZCxtZWRpYUJveDpSdFt0XS5tZWRpYUJveCxjcm9wQm94OlJ0W3RdLmNyb3BCb3gsYmxlZWRCb3g6UnRbdF0uYmxlZWRCb3gsdHJpbUJveDpSdFt0XS50cmltQm94LGFydEJveDpSdFt0XS5hcnRCb3gsdXNlclVuaXQ6UnRbdF0udXNlclVuaXQscm9vdERpY3Rpb25hcnlPYmpJZDpRdCxyZXNvdXJjZURpY3Rpb25hcnlPYmpJZDp0ZX0pKTtadChRdCwhMCksbHQoXCI8PC9UeXBlIC9QYWdlc1wiKTt2YXIgbj1cIi9LaWRzIFtcIjtmb3IoZT0wO2U8RXQ7ZSsrKW4rPXJbZV0rXCIgMCBSIFwiO2x0KG4rXCJdXCIpLGx0KFwiL0NvdW50IFwiK0V0KSxsdChcIj4+XCIpLGx0KFwiZW5kb2JqXCIpLER0LnB1Ymxpc2goXCJwb3N0UHV0UGFnZXNcIil9LHNlPWZ1bmN0aW9uKHQpe0R0LnB1Ymxpc2goXCJwdXRGb250XCIse2ZvbnQ6dCxvdXQ6bHQsbmV3T2JqZWN0Olh0LHB1dFN0cmVhbTppZX0pLCEwIT09dC5pc0FscmVhZHlQdXR0ZWQmJih0Lm9iamVjdE51bWJlcj1YdCgpLGx0KFwiPDxcIiksbHQoXCIvVHlwZSAvRm9udFwiKSxsdChcIi9CYXNlRm9udCAvXCIrQyh0LnBvc3RTY3JpcHROYW1lKSksbHQoXCIvU3VidHlwZSAvVHlwZTFcIiksXCJzdHJpbmdcIj09dHlwZW9mIHQuZW5jb2RpbmcmJmx0KFwiL0VuY29kaW5nIC9cIit0LmVuY29kaW5nKSxsdChcIi9GaXJzdENoYXIgMzJcIiksbHQoXCIvTGFzdENoYXIgMjU1XCIpLGx0KFwiPj5cIiksbHQoXCJlbmRvYmpcIikpfSx1ZT1mdW5jdGlvbih0KXt0Lm9iamVjdE51bWJlcj1YdCgpO3ZhciBlPVtdO2UucHVzaCh7a2V5OlwiVHlwZVwiLHZhbHVlOlwiL1hPYmplY3RcIn0pLGUucHVzaCh7a2V5OlwiU3VidHlwZVwiLHZhbHVlOlwiL0Zvcm1cIn0pLGUucHVzaCh7a2V5OlwiQkJveFwiLHZhbHVlOlwiW1wiK1tCKHQueCksQih0LnkpLEIodC54K3Qud2lkdGgpLEIodC55K3QuaGVpZ2h0KV0uam9pbihcIiBcIikrXCJdXCJ9KSxlLnB1c2goe2tleTpcIk1hdHJpeFwiLHZhbHVlOlwiW1wiK3QubWF0cml4LnRvU3RyaW5nKCkrXCJdXCJ9KTt2YXIgcj10LnBhZ2VzWzFdLmpvaW4oXCJcXG5cIik7aWUoe2RhdGE6cixhZGRpdGlvbmFsS2V5VmFsdWVzOmUsb2JqZWN0SWQ6dC5vYmplY3ROdW1iZXJ9KSxsdChcImVuZG9ialwiKX0sY2U9ZnVuY3Rpb24odCxlKXtlfHwoZT0yMSk7dmFyIHI9WHQoKSxuPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1bXSxpPTEvKGUtMSk7Zm9yKHI9MDtyPDE7cis9aSluLnB1c2gocik7aWYobi5wdXNoKDEpLDAhPXRbMF0ub2Zmc2V0KXt2YXIgYT17b2Zmc2V0OjAsY29sb3I6dFswXS5jb2xvcn07dC51bnNoaWZ0KGEpfWlmKDEhPXRbdC5sZW5ndGgtMV0ub2Zmc2V0KXt2YXIgbz17b2Zmc2V0OjEsY29sb3I6dFt0Lmxlbmd0aC0xXS5jb2xvcn07dC5wdXNoKG8pfWZvcih2YXIgcz1cIlwiLHU9MCxjPTA7YzxuLmxlbmd0aDtjKyspe2ZvcihyPW5bY107cj50W3UrMV0ub2Zmc2V0Oyl1Kys7dmFyIGw9dFt1XS5vZmZzZXQsaD0oci1sKS8odFt1KzFdLm9mZnNldC1sKSxmPXRbdV0uY29sb3IsZD10W3UrMV0uY29sb3I7cys9dHQoTWF0aC5yb3VuZCgoMS1oKSpmWzBdK2gqZFswXSkudG9TdHJpbmcoMTYpKSt0dChNYXRoLnJvdW5kKCgxLWgpKmZbMV0raCpkWzFdKS50b1N0cmluZygxNikpK3R0KE1hdGgucm91bmQoKDEtaCkqZlsyXStoKmRbMl0pLnRvU3RyaW5nKDE2KSl9cmV0dXJuIHMudHJpbSgpfSh0LmNvbG9ycyxlKSxpPVtdO2kucHVzaCh7a2V5OlwiRnVuY3Rpb25UeXBlXCIsdmFsdWU6XCIwXCJ9KSxpLnB1c2goe2tleTpcIkRvbWFpblwiLHZhbHVlOlwiWzAuMCAxLjBdXCJ9KSxpLnB1c2goe2tleTpcIlNpemVcIix2YWx1ZTpcIltcIitlK1wiXVwifSksaS5wdXNoKHtrZXk6XCJCaXRzUGVyU2FtcGxlXCIsdmFsdWU6XCI4XCJ9KSxpLnB1c2goe2tleTpcIlJhbmdlXCIsdmFsdWU6XCJbMC4wIDEuMCAwLjAgMS4wIDAuMCAxLjBdXCJ9KSxpLnB1c2goe2tleTpcIkRlY29kZVwiLHZhbHVlOlwiWzAuMCAxLjAgMC4wIDEuMCAwLjAgMS4wXVwifSksaWUoe2RhdGE6bixhZGRpdGlvbmFsS2V5VmFsdWVzOmksYWxyZWFkeUFwcGxpZWRGaWx0ZXJzOltcIi9BU0NJSUhleERlY29kZVwiXSxvYmplY3RJZDpyfSksbHQoXCJlbmRvYmpcIiksdC5vYmplY3ROdW1iZXI9WHQoKSxsdChcIjw8IC9TaGFkaW5nVHlwZSBcIit0LnR5cGUpLGx0KFwiL0NvbG9yU3BhY2UgL0RldmljZVJHQlwiKTt2YXIgYT1cIi9Db29yZHMgW1wiK0IocGFyc2VGbG9hdCh0LmNvb3Jkc1swXSkpK1wiIFwiK0IocGFyc2VGbG9hdCh0LmNvb3Jkc1sxXSkpK1wiIFwiOzI9PT10LnR5cGU/YSs9QihwYXJzZUZsb2F0KHQuY29vcmRzWzJdKSkrXCIgXCIrQihwYXJzZUZsb2F0KHQuY29vcmRzWzNdKSk6YSs9QihwYXJzZUZsb2F0KHQuY29vcmRzWzJdKSkrXCIgXCIrQihwYXJzZUZsb2F0KHQuY29vcmRzWzNdKSkrXCIgXCIrQihwYXJzZUZsb2F0KHQuY29vcmRzWzRdKSkrXCIgXCIrQihwYXJzZUZsb2F0KHQuY29vcmRzWzVdKSksbHQoYSs9XCJdXCIpLHQubWF0cml4JiZsdChcIi9NYXRyaXggW1wiK3QubWF0cml4LnRvU3RyaW5nKCkrXCJdXCIpLGx0KFwiL0Z1bmN0aW9uIFwiK3IrXCIgMCBSXCIpLGx0KFwiL0V4dGVuZCBbdHJ1ZSB0cnVlXVwiKSxsdChcIj4+XCIpLGx0KFwiZW5kb2JqXCIpfSxsZT1mdW5jdGlvbih0LGUpe3ZhciByPUt0KCksbj1YdCgpO2UucHVzaCh7cmVzb3VyY2VzT2lkOnIsb2JqZWN0T2lkOm59KSx0Lm9iamVjdE51bWJlcj1uO3ZhciBpPVtdO2kucHVzaCh7a2V5OlwiVHlwZVwiLHZhbHVlOlwiL1BhdHRlcm5cIn0pLGkucHVzaCh7a2V5OlwiUGF0dGVyblR5cGVcIix2YWx1ZTpcIjFcIn0pLGkucHVzaCh7a2V5OlwiUGFpbnRUeXBlXCIsdmFsdWU6XCIxXCJ9KSxpLnB1c2goe2tleTpcIlRpbGluZ1R5cGVcIix2YWx1ZTpcIjFcIn0pLGkucHVzaCh7a2V5OlwiQkJveFwiLHZhbHVlOlwiW1wiK3QuYm91bmRpbmdCb3gubWFwKEIpLmpvaW4oXCIgXCIpK1wiXVwifSksaS5wdXNoKHtrZXk6XCJYU3RlcFwiLHZhbHVlOkIodC54U3RlcCl9KSxpLnB1c2goe2tleTpcIllTdGVwXCIsdmFsdWU6Qih0LnlTdGVwKX0pLGkucHVzaCh7a2V5OlwiUmVzb3VyY2VzXCIsdmFsdWU6citcIiAwIFJcIn0pLHQubWF0cml4JiZpLnB1c2goe2tleTpcIk1hdHJpeFwiLHZhbHVlOlwiW1wiK3QubWF0cml4LnRvU3RyaW5nKCkrXCJdXCJ9KSxpZSh7ZGF0YTp0LnN0cmVhbSxhZGRpdGlvbmFsS2V5VmFsdWVzOmksb2JqZWN0SWQ6dC5vYmplY3ROdW1iZXJ9KSxsdChcImVuZG9ialwiKX0saGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQub2JqZWN0TnVtYmVyPVh0KCksbHQoXCI8PFwiKSx0KXN3aXRjaChlKXtjYXNlXCJvcGFjaXR5XCI6bHQoXCIvY2EgXCIrVCh0W2VdKSk7YnJlYWs7Y2FzZVwic3Ryb2tlLW9wYWNpdHlcIjpsdChcIi9DQSBcIitUKHRbZV0pKX1sdChcIj4+XCIpLGx0KFwiZW5kb2JqXCIpfSxmZT1mdW5jdGlvbih0KXtadCh0LnJlc291cmNlc09pZCwhMCksbHQoXCI8PFwiKSxsdChcIi9Qcm9jU2V0IFsvUERGIC9UZXh0IC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJXVwiKSxmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBsdChcIi9Gb250IDw8XCIpLEZ0KUZ0Lmhhc093blByb3BlcnR5KHQpJiYoITE9PT12fHwhMD09PXYmJmIuaGFzT3duUHJvcGVydHkodCkpJiZsdChcIi9cIit0K1wiIFwiK0Z0W3RdLm9iamVjdE51bWJlcitcIiAwIFJcIik7bHQoXCI+PlwiKX0oKSxmdW5jdGlvbigpe2lmKE9iamVjdC5rZXlzKGp0KS5sZW5ndGg+MCl7Zm9yKHZhciB0IGluIGx0KFwiL1NoYWRpbmcgPDxcIiksanQpanQuaGFzT3duUHJvcGVydHkodCkmJmp0W3RdaW5zdGFuY2VvZiBNJiZqdFt0XS5vYmplY3ROdW1iZXI+PTAmJmx0KFwiL1wiK3QrXCIgXCIranRbdF0ub2JqZWN0TnVtYmVyK1wiIDAgUlwiKTtEdC5wdWJsaXNoKFwicHV0U2hhZGluZ1BhdHRlcm5EaWN0XCIpLGx0KFwiPj5cIil9fSgpLGZ1bmN0aW9uKHQpe2lmKE9iamVjdC5rZXlzKGp0KS5sZW5ndGg+MCl7Zm9yKHZhciBlIGluIGx0KFwiL1BhdHRlcm4gPDxcIiksanQpanQuaGFzT3duUHJvcGVydHkoZSkmJmp0W2VdaW5zdGFuY2VvZiB5LlRpbGluZ1BhdHRlcm4mJmp0W2VdLm9iamVjdE51bWJlcj49MCYmanRbZV0ub2JqZWN0TnVtYmVyPHQmJmx0KFwiL1wiK2UrXCIgXCIranRbZV0ub2JqZWN0TnVtYmVyK1wiIDAgUlwiKTtEdC5wdWJsaXNoKFwicHV0VGlsaW5nUGF0dGVybkRpY3RcIiksbHQoXCI+PlwiKX19KHQub2JqZWN0T2lkKSxmdW5jdGlvbigpe2lmKE9iamVjdC5rZXlzKEJ0KS5sZW5ndGg+MCl7dmFyIHQ7Zm9yKHQgaW4gbHQoXCIvRXh0R1N0YXRlIDw8XCIpLEJ0KUJ0Lmhhc093blByb3BlcnR5KHQpJiZCdFt0XS5vYmplY3ROdW1iZXI+PTAmJmx0KFwiL1wiK3QrXCIgXCIrQnRbdF0ub2JqZWN0TnVtYmVyK1wiIDAgUlwiKTtEdC5wdWJsaXNoKFwicHV0R1N0YXRlRGljdFwiKSxsdChcIj4+XCIpfX0oKSxmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBsdChcIi9YT2JqZWN0IDw8XCIpLHp0KXp0Lmhhc093blByb3BlcnR5KHQpJiZ6dFt0XS5vYmplY3ROdW1iZXI+PTAmJmx0KFwiL1wiK3QrXCIgXCIrenRbdF0ub2JqZWN0TnVtYmVyK1wiIDAgUlwiKTtEdC5wdWJsaXNoKFwicHV0WG9iamVjdERpY3RcIiksbHQoXCI+PlwiKX0oKSxsdChcIj4+XCIpLGx0KFwiZW5kb2JqXCIpfSxkZT1mdW5jdGlvbih0KXtJdFt0LmZvbnROYW1lXT1JdFt0LmZvbnROYW1lXXx8e30sSXRbdC5mb250TmFtZV1bdC5mb250U3R5bGVdPXQuaWR9LHBlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9e2lkOlwiRlwiKyhPYmplY3Qua2V5cyhGdCkubGVuZ3RoKzEpLnRvU3RyaW5nKDEwKSxwb3N0U2NyaXB0TmFtZTp0LGZvbnROYW1lOmUsZm9udFN0eWxlOnIsZW5jb2Rpbmc6bixpc1N0YW5kYXJkRm9udDppfHwhMSxtZXRhZGF0YTp7fX07cmV0dXJuIER0LnB1Ymxpc2goXCJhZGRGb250XCIse2ZvbnQ6YSxpbnN0YW5jZTp0aGlzfSksRnRbYS5pZF09YSxkZShhKSxhLmlkfSxnZT15Ll9fcHJpdmF0ZV9fLnBkZkVzY2FwZT15LnBkZkVzY2FwZT1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyx1LGMsbDtpZihpPShlPWV8fHt9KS5zb3VyY2VFbmNvZGluZ3x8XCJVbmljb2RlXCIsbz1lLm91dHB1dEVuY29kaW5nLChlLmF1dG9lbmNvZGV8fG8pJiZGdFtBdF0ubWV0YWRhdGEmJkZ0W0F0XS5tZXRhZGF0YVtpXSYmRnRbQXRdLm1ldGFkYXRhW2ldLmVuY29kaW5nJiYoYT1GdFtBdF0ubWV0YWRhdGFbaV0uZW5jb2RpbmcsIW8mJkZ0W0F0XS5lbmNvZGluZyYmKG89RnRbQXRdLmVuY29kaW5nKSwhbyYmYS5jb2RlUGFnZXMmJihvPWEuY29kZVBhZ2VzWzBdKSxcInN0cmluZ1wiPT10eXBlb2YgbyYmKG89YVtvXSksbykpe2Zvcih1PSExLHM9W10scj0wLG49dC5sZW5ndGg7cjxuO3IrKykoYz1vW3QuY2hhckNvZGVBdChyKV0pP3MucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTpzLnB1c2godFtyXSksc1tyXS5jaGFyQ29kZUF0KDApPj44JiYodT0hMCk7dD1zLmpvaW4oXCJcIil9Zm9yKHI9dC5sZW5ndGg7dm9pZCAwPT09dSYmMCE9PXI7KXQuY2hhckNvZGVBdChyLTEpPj44JiYodT0hMCksci0tO2lmKCF1KXJldHVybiB0O2ZvcihzPWUubm9CT00/W106WzI1NCwyNTVdLHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspe2lmKChsPShjPXQuY2hhckNvZGVBdChyKSk+PjgpPj44KXRocm93IG5ldyBFcnJvcihcIkNoYXJhY3RlciBhdCBwb3NpdGlvbiBcIityK1wiIG9mIHN0cmluZyAnXCIrdCtcIicgZXhjZWVkcyAxNmJpdHMuIENhbm5vdCBiZSBlbmNvZGVkIGludG8gVUNTLTIgQkVcIik7cy5wdXNoKGwpLHMucHVzaChjLShsPDw4KSl9cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkodm9pZCAwLHMpfSh0LGUpLnJlcGxhY2UoL1xcXFwvZyxcIlxcXFxcXFxcXCIpLnJlcGxhY2UoL1xcKC9nLFwiXFxcXChcIikucmVwbGFjZSgvXFwpL2csXCJcXFxcKVwiKX0sbWU9eS5fX3ByaXZhdGVfXy5iZWdpblBhZ2U9ZnVuY3Rpb24odCl7b3RbKytFdF09W10sUnRbRXRdPXtvYmpJZDowLGNvbnRlbnRzT2JqSWQ6MCx1c2VyVW5pdDpOdW1iZXIoZiksYXJ0Qm94Om51bGwsYmxlZWRCb3g6bnVsbCxjcm9wQm94Om51bGwsdHJpbUJveDpudWxsLG1lZGlhQm94Ontib3R0b21MZWZ0WDowLGJvdHRvbUxlZnRZOjAsdG9wUmlnaHRYOk51bWJlcih0WzBdKSx0b3BSaWdodFk6TnVtYmVyKHRbMV0pfX0seWUoRXQpLGN0KG90WyRdKX0sdmU9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGE7c3dpdGNoKG49ZXx8bixcInN0cmluZ1wiPT10eXBlb2YgdCYmKHI9eCh0LnRvTG93ZXJDYXNlKCkpLEFycmF5LmlzQXJyYXkocikmJihpPXJbMF0sYT1yWzFdKSksQXJyYXkuaXNBcnJheSh0KSYmKGk9dFswXSpTdCxhPXRbMV0qU3QpLGlzTmFOKGkpJiYoaT1zWzBdLGE9c1sxXSksKGk+MTQ0MDB8fGE+MTQ0MDApJiYoby53YXJuKFwiQSBwYWdlIGluIGEgUERGIGNhbiBub3QgYmUgd2lkZXIgb3IgdGFsbGVyIHRoYW4gMTQ0MDAgdXNlclVuaXQuIGpzUERGIGxpbWl0cyB0aGUgd2lkdGgvaGVpZ2h0IHRvIDE0NDAwXCIpLGk9TWF0aC5taW4oMTQ0MDAsaSksYT1NYXRoLm1pbigxNDQwMCxhKSkscz1baSxhXSxuLnN1YnN0cigwLDEpKXtjYXNlXCJsXCI6YT5pJiYocz1bYSxpXSk7YnJlYWs7Y2FzZVwicFwiOmk+YSYmKHM9W2EsaV0pfW1lKHMpLFFlKFplKSxsdChzciksMCE9PWRyJiZsdChkcitcIiBKXCIpLDAhPT1wciYmbHQocHIrXCIgalwiKSxEdC5wdWJsaXNoKFwiYWRkUGFnZVwiLHtwYWdlTnVtYmVyOkV0fSl9LGJlPWZ1bmN0aW9uKHQpe3Q+MCYmdDw9RXQmJihvdC5zcGxpY2UodCwxKSxSdC5zcGxpY2UodCwxKSxFdC0tLCQ+RXQmJigkPUV0KSx0aGlzLnNldFBhZ2UoJCkpfSx5ZT1mdW5jdGlvbih0KXt0PjAmJnQ8PUV0JiYoJD10KX0sd2U9eS5fX3ByaXZhdGVfXy5nZXROdW1iZXJPZlBhZ2VzPXkuZ2V0TnVtYmVyT2ZQYWdlcz1mdW5jdGlvbigpe3JldHVybiBvdC5sZW5ndGgtMX0sTmU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9dm9pZCAwO3JldHVybiByPXJ8fHt9LHQ9dm9pZCAwIT09dD90OkZ0W0F0XS5mb250TmFtZSxlPXZvaWQgMCE9PWU/ZTpGdFtBdF0uZm9udFN0eWxlLG49dC50b0xvd2VyQ2FzZSgpLHZvaWQgMCE9PUl0W25dJiZ2b2lkIDAhPT1JdFtuXVtlXT9pPUl0W25dW2VdOnZvaWQgMCE9PUl0W3RdJiZ2b2lkIDAhPT1JdFt0XVtlXT9pPUl0W3RdW2VdOiExPT09ci5kaXNhYmxlV2FybmluZyYmby53YXJuKFwiVW5hYmxlIHRvIGxvb2sgdXAgZm9udCBsYWJlbCBmb3IgZm9udCAnXCIrdCtcIicsICdcIitlK1wiJy4gUmVmZXIgdG8gZ2V0Rm9udExpc3QoKSBmb3IgYXZhaWxhYmxlIGZvbnRzLlwiKSxpfHxyLm5vRmFsbGJhY2t8fG51bGw9PShpPUl0LnRpbWVzW2VdKSYmKGk9SXQudGltZXMubm9ybWFsKSxpfSxMZT15Ll9fcHJpdmF0ZV9fLnB1dEluZm89ZnVuY3Rpb24oKXt2YXIgdD1YdCgpLGU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9O2Zvcih2YXIgciBpbiBudWxsIT09bSYmKGU9T2UuZW5jcnlwdG9yKHQsMCkpLGx0KFwiPDxcIiksbHQoXCIvUHJvZHVjZXIgKFwiK2dlKGUoXCJqc1BERiBcIitFLnZlcnNpb24pKStcIilcIikseHQpeHQuaGFzT3duUHJvcGVydHkocikmJnh0W3JdJiZsdChcIi9cIityLnN1YnN0cigwLDEpLnRvVXBwZXJDYXNlKCkrci5zdWJzdHIoMSkrXCIgKFwiK2dlKGUoeHRbcl0pKStcIilcIik7bHQoXCIvQ3JlYXRpb25EYXRlIChcIitnZShlKFcpKStcIilcIiksbHQoXCI+PlwiKSxsdChcImVuZG9ialwiKX0seGU9eS5fX3ByaXZhdGVfXy5wdXRDYXRhbG9nPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXR8fHt9KS5yb290RGljdGlvbmFyeU9iaklkfHxRdDtzd2l0Y2goWHQoKSxsdChcIjw8XCIpLGx0KFwiL1R5cGUgL0NhdGFsb2dcIiksbHQoXCIvUGFnZXMgXCIrZStcIiAwIFJcIiksZ3R8fChndD1cImZ1bGx3aWR0aFwiKSxndCl7Y2FzZVwiZnVsbHdpZHRoXCI6bHQoXCIvT3BlbkFjdGlvbiBbMyAwIFIgL0ZpdEggbnVsbF1cIik7YnJlYWs7Y2FzZVwiZnVsbGhlaWdodFwiOmx0KFwiL09wZW5BY3Rpb24gWzMgMCBSIC9GaXRWIG51bGxdXCIpO2JyZWFrO2Nhc2VcImZ1bGxwYWdlXCI6bHQoXCIvT3BlbkFjdGlvbiBbMyAwIFIgL0ZpdF1cIik7YnJlYWs7Y2FzZVwib3JpZ2luYWxcIjpsdChcIi9PcGVuQWN0aW9uIFszIDAgUiAvWFlaIG51bGwgbnVsbCAxXVwiKTticmVhaztkZWZhdWx0OnZhciByPVwiXCIrZ3Q7XCIlXCI9PT1yLnN1YnN0cihyLmxlbmd0aC0xKSYmKGd0PXBhcnNlSW50KGd0KS8xMDApLFwibnVtYmVyXCI9PXR5cGVvZiBndCYmbHQoXCIvT3BlbkFjdGlvbiBbMyAwIFIgL1hZWiBudWxsIG51bGwgXCIrVChndCkrXCJdXCIpfXN3aXRjaCh3dHx8KHd0PVwiY29udGludW91c1wiKSx3dCl7Y2FzZVwiY29udGludW91c1wiOmx0KFwiL1BhZ2VMYXlvdXQgL09uZUNvbHVtblwiKTticmVhaztjYXNlXCJzaW5nbGVcIjpsdChcIi9QYWdlTGF5b3V0IC9TaW5nbGVQYWdlXCIpO2JyZWFrO2Nhc2VcInR3b1wiOmNhc2VcInR3b2xlZnRcIjpsdChcIi9QYWdlTGF5b3V0IC9Ud29Db2x1bW5MZWZ0XCIpO2JyZWFrO2Nhc2VcInR3b3JpZ2h0XCI6bHQoXCIvUGFnZUxheW91dCAvVHdvQ29sdW1uUmlnaHRcIil9YnQmJmx0KFwiL1BhZ2VNb2RlIC9cIitidCksRHQucHVibGlzaChcInB1dENhdGFsb2dcIiksbHQoXCI+PlwiKSxsdChcImVuZG9ialwiKX0sQWU9eS5fX3ByaXZhdGVfXy5wdXRUcmFpbGVyPWZ1bmN0aW9uKCl7bHQoXCJ0cmFpbGVyXCIpLGx0KFwiPDxcIiksbHQoXCIvU2l6ZSBcIisoZXQrMSkpLGx0KFwiL1Jvb3QgXCIrZXQrXCIgMCBSXCIpLGx0KFwiL0luZm8gXCIrKGV0LTEpK1wiIDAgUlwiKSxudWxsIT09bSYmbHQoXCIvRW5jcnlwdCBcIitPZS5vaWQrXCIgMCBSXCIpLGx0KFwiL0lEIFsgPFwiK1YrXCI+IDxcIitWK1wiPiBdXCIpLGx0KFwiPj5cIil9LFNlPXkuX19wcml2YXRlX18ucHV0SGVhZGVyPWZ1bmN0aW9uKCl7bHQoXCIlUERGLVwiK3cpLGx0KFwiJcK6w5/CrMOgXCIpfSxfZT15Ll9fcHJpdmF0ZV9fLnB1dFhSZWY9ZnVuY3Rpb24oKXt2YXIgdD1cIjAwMDAwMDAwMDBcIjtsdChcInhyZWZcIiksbHQoXCIwIFwiKyhldCsxKSksbHQoXCIwMDAwMDAwMDAwIDY1NTM1IGYgXCIpO2Zvcih2YXIgZT0xO2U8PWV0O2UrKylcImZ1bmN0aW9uXCI9PXR5cGVvZiBydFtlXT9sdCgodCtydFtlXSgpKS5zbGljZSgtMTApK1wiIDAwMDAwIG4gXCIpOnZvaWQgMCE9PXJ0W2VdP2x0KCh0K3J0W2VdKS5zbGljZSgtMTApK1wiIDAwMDAwIG4gXCIpOmx0KFwiMDAwMDAwMDAwMCAwMDAwMCBuIFwiKX0sUGU9eS5fX3ByaXZhdGVfXy5idWlsZERvY3VtZW50PWZ1bmN0aW9uKCl7dmFyIHQ7ZXQ9MCxpdD0wLG50PVtdLHJ0PVtdLGF0PVtdLFF0PUt0KCksdGU9S3QoKSxjdChudCksRHQucHVibGlzaChcImJ1aWxkRG9jdW1lbnRcIiksU2UoKSxvZSgpLGZ1bmN0aW9uKCl7RHQucHVibGlzaChcInB1dEFkZGl0aW9uYWxPYmplY3RzXCIpO2Zvcih2YXIgdD0wO3Q8YXQubGVuZ3RoO3QrKyl7dmFyIGU9YXRbdF07WnQoZS5vYmpJZCwhMCksbHQoZS5jb250ZW50KSxsdChcImVuZG9ialwiKX1EdC5wdWJsaXNoKFwicG9zdFB1dEFkZGl0aW9uYWxPYmplY3RzXCIpfSgpLHQ9W10sZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gRnQpRnQuaGFzT3duUHJvcGVydHkodCkmJighMT09PXZ8fCEwPT09diYmYi5oYXNPd25Qcm9wZXJ0eSh0KSkmJnNlKEZ0W3RdKX0oKSxmdW5jdGlvbigpe3ZhciB0O2Zvcih0IGluIEJ0KUJ0Lmhhc093blByb3BlcnR5KHQpJiZoZShCdFt0XSl9KCksZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4genQpenQuaGFzT3duUHJvcGVydHkodCkmJnVlKHp0W3RdKX0oKSxmdW5jdGlvbih0KXt2YXIgZTtmb3IoZSBpbiBqdClqdC5oYXNPd25Qcm9wZXJ0eShlKSYmKGp0W2VdaW5zdGFuY2VvZiBNP2NlKGp0W2VdKTpqdFtlXWluc3RhbmNlb2YgcSYmbGUoanRbZV0sdCkpfSh0KSxEdC5wdWJsaXNoKFwicHV0UmVzb3VyY2VzXCIpLHQuZm9yRWFjaChmZSksZmUoe3Jlc291cmNlc09pZDp0ZSxvYmplY3RPaWQ6TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9KSxEdC5wdWJsaXNoKFwicG9zdFB1dFJlc291cmNlc1wiKSxudWxsIT09bSYmKE9lLm9pZD1YdCgpLGx0KFwiPDxcIiksbHQoXCIvRmlsdGVyIC9TdGFuZGFyZFwiKSxsdChcIi9WIFwiK09lLnYpLGx0KFwiL1IgXCIrT2UuciksbHQoXCIvVSA8XCIrT2UudG9IZXhTdHJpbmcoT2UuVSkrXCI+XCIpLGx0KFwiL08gPFwiK09lLnRvSGV4U3RyaW5nKE9lLk8pK1wiPlwiKSxsdChcIi9QIFwiK09lLlApLGx0KFwiPj5cIiksbHQoXCJlbmRvYmpcIikpLExlKCkseGUoKTt2YXIgZT1pdDtyZXR1cm4gX2UoKSxBZSgpLGx0KFwic3RhcnR4cmVmXCIpLGx0KFwiXCIrZSksbHQoXCIlJUVPRlwiKSxjdChvdFskXSksbnQuam9pbihcIlxcblwiKX0sa2U9eS5fX3ByaXZhdGVfXy5nZXRCbG9iPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQmxvYihbZnQodCldLHt0eXBlOlwiYXBwbGljYXRpb24vcGRmXCJ9KX0sRmU9ZnVuY3Rpb24odCl7Zm9yKDt0LmZpcnN0Q2hpbGQ7KXQucmVtb3ZlQ2hpbGQodC5maXJzdENoaWxkKX0sSWU9ZnVuY3Rpb24odCl7dmFyIGUscj10LmRvY3VtZW50LG49ci5kb2N1bWVudEVsZW1lbnQsaT1yLmhlYWQsYT1yLmJvZHk7cmV0dXJuIGl8fChpPXIuY3JlYXRlRWxlbWVudChcImhlYWRcIiksbi5hcHBlbmRDaGlsZChpKSksYXx8KGE9ci5jcmVhdGVFbGVtZW50KFwiYm9keVwiKSxuLmFwcGVuZENoaWxkKGEpKSxGZShpKSxGZShhKSwoZT1yLmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKSkuYXBwZW5kQ2hpbGQoci5jcmVhdGVUZXh0Tm9kZShcImh0bWwsIGJvZHkgeyBwYWRkaW5nOiAwOyBtYXJnaW46IDA7IH0gaWZyYW1lIHsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgYm9yZGVyOiAwO31cIikpLGkuYXBwZW5kQ2hpbGQoZSkse2RvY3VtZW50OnIsYm9keTphfX0sQ2U9eS5vdXRwdXQ9eS5fX3ByaXZhdGVfXy5vdXRwdXQ9KEp0PWZ1bmN0aW9uKHQsZSl7c3dpdGNoKFwic3RyaW5nXCI9PXR5cGVvZihlPWV8fHt9KT9lPXtmaWxlbmFtZTplfTplLmZpbGVuYW1lPWUuZmlsZW5hbWV8fFwiZ2VuZXJhdGVkLnBkZlwiLHQpe2Nhc2Ugdm9pZCAwOnJldHVybiBQZSgpO2Nhc2VcInNhdmVcIjp5LnNhdmUoZS5maWxlbmFtZSk7YnJlYWs7Y2FzZVwiYXJyYXlidWZmZXJcIjpyZXR1cm4gZnQoUGUoKSk7Y2FzZVwiYmxvYlwiOnJldHVybiBrZShQZSgpKTtjYXNlXCJibG9idXJpXCI6Y2FzZVwiYmxvYnVybFwiOmlmKHZvaWQgMCE9PWkuVVJMJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBpLlVSTC5jcmVhdGVPYmplY3RVUkwpcmV0dXJuIGkuVVJMJiZpLlVSTC5jcmVhdGVPYmplY3RVUkwoa2UoUGUoKSkpfHx2b2lkIDA7by53YXJuKFwiYmxvYnVybCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgc3lzdGVtLCBiZWNhdXNlIFVSTC5jcmVhdGVPYmplY3RVUkwgaXMgbm90IHN1cHBvcnRlZCBieSB5b3VyIGJyb3dzZXIuXCIpO2JyZWFrO2Nhc2VcImRhdGF1cmlzdHJpbmdcIjpjYXNlXCJkYXRhdXJsc3RyaW5nXCI6dmFyIHI9XCJcIixuPVBlKCk7dHJ5e3I9ZChuKX1jYXRjaChMKXtyPWQodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KG4pKSl9cmV0dXJuXCJkYXRhOmFwcGxpY2F0aW9uL3BkZjtmaWxlbmFtZT1cIitlbmNvZGVVUklDb21wb25lbnQoZS5maWxlbmFtZSkrXCI7YmFzZTY0LFwiK3I7Y2FzZVwicGRmb2JqZWN0bmV3d2luZG93XCI6aWYoXCJbb2JqZWN0IFdpbmRvd11cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKSl7dmFyIGE9XCJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9wZGZvYmplY3QvMi4xLjEvcGRmb2JqZWN0Lm1pbi5qc1wiLHM9IWUucGRmT2JqZWN0VXJsO3N8fChhPWUucGRmT2JqZWN0VXJsKTt2YXIgdT1pLm9wZW4oKTtpZihudWxsIT09dSl7dmFyIGM9SWUodSksbD1jLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIiksaD10aGlzO2wuc3JjPWEscyYmKGwuaW50ZWdyaXR5PVwic2hhNTEyLTR6ZS9hOS80anF1K3RYOWRmT3FKWVN2eVlkNU02cXVtLzNIcENMcisvSnFmMHdoYzM3VlVia3BOR0hSNy84cFNuQ0Z3NDdUMWZtSXB3QlY3VXlTaDNnPT1cIixsLmNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCIpLGwub25sb2FkPWZ1bmN0aW9uKCl7dS5QREZPYmplY3QuZW1iZWQoaC5vdXRwdXQoXCJkYXRhdXJsc3RyaW5nXCIpLGUpfSxjLmJvZHkuYXBwZW5kQ2hpbGQobCl9cmV0dXJuIHV9dGhyb3cgbmV3IEVycm9yKFwiVGhlIG9wdGlvbiBwZGZvYmplY3RuZXd3aW5kb3cganVzdCB3b3JrcyBpbiBhIGJyb3dzZXItZW52aXJvbm1lbnQuXCIpO2Nhc2VcInBkZmpzbmV3d2luZG93XCI6aWYoXCJbb2JqZWN0IFdpbmRvd11cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKSl7dmFyIGY9ZS5wZGZKc1VybHx8XCJleGFtcGxlcy9QREYuanMvd2ViL3ZpZXdlci5odG1sXCIscD1pLm9wZW4oKTtpZihudWxsIT09cCl7dmFyIGc9SWUocCksbT1nLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIiksdj0tMT09PWYuaW5kZXhPZihcIj9cIik/XCI/XCI6XCImXCI7aD10aGlzLG0uaWQ9XCJwZGZWaWV3ZXJcIixtLndpZHRoPVwiNTAwcHhcIixtLmhlaWdodD1cIjQwMHB4XCIsbS5zcmM9Zit2K1wiZmlsZT0mZG93bmxvYWROYW1lPVwiK2VuY29kZVVSSUNvbXBvbmVudChlLmZpbGVuYW1lKSxtLm9ubG9hZD1mdW5jdGlvbigpe3AuZG9jdW1lbnQudGl0bGU9ZS5maWxlbmFtZSxtLmNvbnRlbnRXaW5kb3cuUERGVmlld2VyQXBwbGljYXRpb24ub3BlbihoLm91dHB1dChcImJsb2J1cmxcIikpfSxnLmJvZHkuYXBwZW5kQ2hpbGQobSl9cmV0dXJuIHB9dGhyb3cgbmV3IEVycm9yKFwiVGhlIG9wdGlvbiBwZGZqc25ld3dpbmRvdyBqdXN0IHdvcmtzIGluIGEgYnJvd3Nlci1lbnZpcm9ubWVudC5cIik7Y2FzZVwiZGF0YXVybG5ld3dpbmRvd1wiOmlmKFwiW29iamVjdCBXaW5kb3ddXCIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaSkpdGhyb3cgbmV3IEVycm9yKFwiVGhlIG9wdGlvbiBkYXRhdXJsbmV3d2luZG93IGp1c3Qgd29ya3MgaW4gYSBicm93c2VyLWVudmlyb25tZW50LlwiKTt2YXIgYj1pLm9wZW4oKTtpZihudWxsIT09Yil7dmFyIHc9SWUoYiksTj13LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7Ti5zcmM9dGhpcy5vdXRwdXQoXCJkYXRhdXJpc3RyaW5nXCIsZSksdy5ib2R5LmFwcGVuZENoaWxkKE4pLGIuZG9jdW1lbnQudGl0bGU9ZS5maWxlbmFtZX1pZihifHxcInVuZGVmaW5lZFwiPT10eXBlb2Ygc2FmYXJpKXJldHVybiBiO2JyZWFrO2Nhc2VcImRhdGF1cmlcIjpjYXNlXCJkYXRhdXJsXCI6cmV0dXJuIGkuZG9jdW1lbnQubG9jYXRpb24uaHJlZj10aGlzLm91dHB1dChcImRhdGF1cmlzdHJpbmdcIixlKTtkZWZhdWx0OnJldHVybiBudWxsfX0sSnQuZm9vPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBKdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2F0Y2gocil7dmFyIHQ9ci5zdGFja3x8XCJcIjt+dC5pbmRleE9mKFwiIGF0IFwiKSYmKHQ9dC5zcGxpdChcIiBhdCBcIilbMV0pO3ZhciBlPVwiRXJyb3IgaW4gZnVuY3Rpb24gXCIrdC5zcGxpdChcIlxcblwiKVswXS5zcGxpdChcIjxcIilbMF0rXCI6IFwiK3IubWVzc2FnZTtpZighaS5jb25zb2xlKXRocm93IG5ldyBFcnJvcihlKTtpLmNvbnNvbGUuZXJyb3IoZSxyKSxpLmFsZXJ0JiZhbGVydChlKX19LEp0LmZvby5iYXI9SnQsSnQuZm9vKSxqZT1mdW5jdGlvbih0KXtyZXR1cm4hMD09PUFycmF5LmlzQXJyYXkoVHQpJiZUdC5pbmRleE9mKHQpPi0xfTtzd2l0Y2goYSl7Y2FzZVwicHRcIjpTdD0xO2JyZWFrO2Nhc2VcIm1tXCI6U3Q9NzIvMjUuNDticmVhaztjYXNlXCJjbVwiOlN0PTcyLzIuNTQ7YnJlYWs7Y2FzZVwiaW5cIjpTdD03MjticmVhaztjYXNlXCJweFwiOlN0PTE9PWplKFwicHhfc2NhbGluZ1wiKT8uNzU6OTYvNzI7YnJlYWs7Y2FzZVwicGNcIjpjYXNlXCJlbVwiOlN0PTEyO2JyZWFrO2Nhc2VcImV4XCI6U3Q9NjticmVhaztkZWZhdWx0OmlmKFwibnVtYmVyXCIhPXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdW5pdDogXCIrYSk7U3Q9YX12YXIgT2U9bnVsbDtLKCksWSgpO3ZhciBCZT15Ll9fcHJpdmF0ZV9fLmdldFBhZ2VJbmZvPXkuZ2V0UGFnZUluZm89ZnVuY3Rpb24odCl7aWYoaXNOYU4odCl8fHQlMSE9MCl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBqc1BERi5nZXRQYWdlSW5mb1wiKTtyZXR1cm57b2JqSWQ6UnRbdF0ub2JqSWQscGFnZU51bWJlcjp0LHBhZ2VDb250ZXh0OlJ0W3RdfX0sTWU9eS5fX3ByaXZhdGVfXy5nZXRQYWdlSW5mb0J5T2JqSWQ9ZnVuY3Rpb24odCl7aWYoaXNOYU4odCl8fHQlMSE9MCl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBqc1BERi5nZXRQYWdlSW5mb0J5T2JqSWRcIik7Zm9yKHZhciBlIGluIFJ0KWlmKFJ0W2VdLm9iaklkPT09dClicmVhaztyZXR1cm4gQmUoZSl9LHFlPXkuX19wcml2YXRlX18uZ2V0Q3VycmVudFBhZ2VJbmZvPXkuZ2V0Q3VycmVudFBhZ2VJbmZvPWZ1bmN0aW9uKCl7cmV0dXJue29iaklkOlJ0WyRdLm9iaklkLHBhZ2VOdW1iZXI6JCxwYWdlQ29udGV4dDpSdFskXX19O3kuYWRkUGFnZT1mdW5jdGlvbigpe3JldHVybiB2ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpc30seS5zZXRQYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHllLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxjdC5jYWxsKHRoaXMsb3RbJF0pLHRoaXN9LHkuaW5zZXJ0UGFnZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hZGRQYWdlKCksdGhpcy5tb3ZlUGFnZSgkLHQpLHRoaXN9LHkubW92ZVBhZ2U9ZnVuY3Rpb24odCxlKXt2YXIgcixuO2lmKHQ+ZSl7cj1vdFt0XSxuPVJ0W3RdO2Zvcih2YXIgaT10O2k+ZTtpLS0pb3RbaV09b3RbaS0xXSxSdFtpXT1SdFtpLTFdO290W2VdPXIsUnRbZV09bix0aGlzLnNldFBhZ2UoZSl9ZWxzZSBpZih0PGUpe3I9b3RbdF0sbj1SdFt0XTtmb3IodmFyIGE9dDthPGU7YSsrKW90W2FdPW90W2ErMV0sUnRbYV09UnRbYSsxXTtvdFtlXT1yLFJ0W2VdPW4sdGhpcy5zZXRQYWdlKGUpfXJldHVybiB0aGlzfSx5LmRlbGV0ZVBhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gYmUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXN9LHkuX19wcml2YXRlX18udGV4dD15LnRleHQ9ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLHUsYyxsLGgsZixkLHAsZz0oaT1pfHx7fSkuc2NvcGV8fHRoaXM7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUmJlwibnVtYmVyXCI9PXR5cGVvZiByJiYoXCJzdHJpbmdcIj09dHlwZW9mIG58fEFycmF5LmlzQXJyYXkobikpKXt2YXIgbT1uO249cixyPWUsZT1tfWlmKGFyZ3VtZW50c1szXWluc3RhbmNlb2YgV3Q9PTA/KHU9YXJndW1lbnRzWzRdLGM9YXJndW1lbnRzWzVdLFwib2JqZWN0XCI9PT10KGY9YXJndW1lbnRzWzNdKSYmbnVsbCE9PWZ8fChcInN0cmluZ1wiPT10eXBlb2YgdSYmKGM9dSx1PW51bGwpLFwic3RyaW5nXCI9PXR5cGVvZiBmJiYoYz1mLGY9bnVsbCksXCJudW1iZXJcIj09dHlwZW9mIGYmJih1PWYsZj1udWxsKSxpPXtmbGFnczpmLGFuZ2xlOnUsYWxpZ246Y30pKTooUihcIlRoZSB0cmFuc2Zvcm0gcGFyYW1ldGVyIG9mIHRleHQoKSB3aXRoIGEgTWF0cml4IHZhbHVlXCIpLHA9YSksaXNOYU4ocil8fGlzTmFOKG4pfHxudWxsPT1lKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBqc1BERi50ZXh0XCIpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gZzt2YXIgdix5PVwiXCIsdz1cIm51bWJlclwiPT10eXBlb2YgaS5saW5lSGVpZ2h0RmFjdG9yP2kubGluZUhlaWdodEZhY3RvcjpLZSxOPWcuaW50ZXJuYWwuc2NhbGVGYWN0b3I7ZnVuY3Rpb24gTCh0KXtyZXR1cm4gdD10LnNwbGl0KFwiXFx0XCIpLmpvaW4oQXJyYXkoaS5UYWJMZW58fDkpLmpvaW4oXCIgXCIpKSxnZSh0LGYpfWZ1bmN0aW9uIHgodCl7Zm9yKHZhciBlLHI9dC5jb25jYXQoKSxuPVtdLGk9ci5sZW5ndGg7aS0tOylcInN0cmluZ1wiPT10eXBlb2YoZT1yLnNoaWZ0KCkpP24ucHVzaChlKTpBcnJheS5pc0FycmF5KHQpJiYoMT09PWUubGVuZ3RofHx2b2lkIDA9PT1lWzFdJiZ2b2lkIDA9PT1lWzJdKT9uLnB1c2goZVswXSk6bi5wdXNoKFtlWzBdLGVbMV0sZVsyXV0pO3JldHVybiBufWZ1bmN0aW9uIEEodCxlKXt2YXIgcjtpZihcInN0cmluZ1wiPT10eXBlb2YgdClyPWUodClbMF07ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIG4saSxhPXQuY29uY2F0KCksbz1bXSxzPWEubGVuZ3RoO3MtLTspXCJzdHJpbmdcIj09dHlwZW9mKG49YS5zaGlmdCgpKT9vLnB1c2goZShuKVswXSk6QXJyYXkuaXNBcnJheShuKSYmXCJzdHJpbmdcIj09dHlwZW9mIG5bMF0mJihpPWUoblswXSxuWzFdLG5bMl0pLG8ucHVzaChbaVswXSxpWzFdLGlbMl1dKSk7cj1vfXJldHVybiByfXZhciBQPSExLGs9ITA7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpUD0hMDtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciBGPWUuY29uY2F0KCk7cz1bXTtmb3IodmFyIEksQz1GLmxlbmd0aDtDLS07KShcInN0cmluZ1wiIT10eXBlb2YoST1GLnNoaWZ0KCkpfHxBcnJheS5pc0FycmF5KEkpJiZcInN0cmluZ1wiIT10eXBlb2YgSVswXSkmJihrPSExKTtQPWt9aWYoITE9PT1QKXRocm93IG5ldyBFcnJvcignVHlwZSBvZiB0ZXh0IG11c3QgYmUgc3RyaW5nIG9yIEFycmF5LiBcIicrZSsnXCIgaXMgbm90IHJlY29nbml6ZWQuJyk7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPWUubWF0Y2goL1tcXHI/XFxuXS8pP2Uuc3BsaXQoL1xcclxcbnxcXHJ8XFxuL2cpOltlXSk7dmFyIGo9cHQvZy5pbnRlcm5hbC5zY2FsZUZhY3RvcixPPWoqKHctMSk7c3dpdGNoKGkuYmFzZWxpbmUpe2Nhc2VcImJvdHRvbVwiOm4tPU87YnJlYWs7Y2FzZVwidG9wXCI6bis9ai1PO2JyZWFrO2Nhc2VcImhhbmdpbmdcIjpuKz1qLTIqTzticmVhaztjYXNlXCJtaWRkbGVcIjpuKz1qLzItT31pZigoaD1pLm1heFdpZHRofHwwKT4wJiYoXCJzdHJpbmdcIj09dHlwZW9mIGU/ZT1nLnNwbGl0VGV4dFRvU2l6ZShlLGgpOlwiW29iamVjdCBBcnJheV1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSYmKGU9ZS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jb25jYXQoZy5zcGxpdFRleHRUb1NpemUoZSxoKSl9LFtdKSkpLG89e3RleHQ6ZSx4OnIseTpuLG9wdGlvbnM6aSxtdXRleDp7cGRmRXNjYXBlOmdlLGFjdGl2ZUZvbnRLZXk6QXQsZm9udHM6RnQsYWN0aXZlRm9udFNpemU6cHR9fSxEdC5wdWJsaXNoKFwicHJlUHJvY2Vzc1RleHRcIixvKSxlPW8udGV4dCx1PShpPW8ub3B0aW9ucykuYW5nbGUscCBpbnN0YW5jZW9mIFd0PT0wJiZ1JiZcIm51bWJlclwiPT10eXBlb2YgdSl7dSo9TWF0aC5QSS8xODAsMD09PWkucm90YXRpb25EaXJlY3Rpb24mJih1PS11KSxfPT09UyYmKHU9LXUpO3ZhciBNPU1hdGguY29zKHUpLHE9TWF0aC5zaW4odSk7cD1uZXcgV3QoTSxxLC1xLE0sMCwwKX1lbHNlIHUmJnUgaW5zdGFuY2VvZiBXdCYmKHA9dSk7XyE9PVN8fHB8fChwPUd0KSx2b2lkIDAhPT0obD1pLmNoYXJTcGFjZXx8aHIpJiYoeSs9QihVKGwpKStcIiBUY1xcblwiLHRoaXMuc2V0Q2hhclNwYWNlKHRoaXMuZ2V0Q2hhclNwYWNlKCl8fDApKSx2b2lkIDAhPT0oZD1pLmhvcml6b250YWxTY2FsZSkmJih5Kz1CKDEwMCpkKStcIiBUelxcblwiKSxpLmxhbmc7dmFyIEU9LTEsRD12b2lkIDAhPT1pLnJlbmRlcmluZ01vZGU/aS5yZW5kZXJpbmdNb2RlOmkuc3Ryb2tlLFQ9Zy5pbnRlcm5hbC5nZXRDdXJyZW50UGFnZUluZm8oKS5wYWdlQ29udGV4dDtzd2l0Y2goRCl7Y2FzZSAwOmNhc2UhMTpjYXNlXCJmaWxsXCI6RT0wO2JyZWFrO2Nhc2UgMTpjYXNlITA6Y2FzZVwic3Ryb2tlXCI6RT0xO2JyZWFrO2Nhc2UgMjpjYXNlXCJmaWxsVGhlblN0cm9rZVwiOkU9MjticmVhaztjYXNlIDM6Y2FzZVwiaW52aXNpYmxlXCI6RT0zO2JyZWFrO2Nhc2UgNDpjYXNlXCJmaWxsQW5kQWRkRm9yQ2xpcHBpbmdcIjpFPTQ7YnJlYWs7Y2FzZSA1OmNhc2VcInN0cm9rZUFuZEFkZFBhdGhGb3JDbGlwcGluZ1wiOkU9NTticmVhaztjYXNlIDY6Y2FzZVwiZmlsbFRoZW5TdHJva2VBbmRBZGRUb1BhdGhGb3JDbGlwcGluZ1wiOkU9NjticmVhaztjYXNlIDc6Y2FzZVwiYWRkVG9QYXRoRm9yQ2xpcHBpbmdcIjpFPTd9dmFyIHo9dm9pZCAwIT09VC51c2VkUmVuZGVyaW5nTW9kZT9ULnVzZWRSZW5kZXJpbmdNb2RlOi0xOy0xIT09RT95Kz1FK1wiIFRyXFxuXCI6LTEhPT16JiYoeSs9XCIwIFRyXFxuXCIpLC0xIT09RSYmKFQudXNlZFJlbmRlcmluZ01vZGU9RSksYz1pLmFsaWdufHxcImxlZnRcIjt2YXIgSCxXPXB0KncsVj1nLmludGVybmFsLnBhZ2VTaXplLmdldFdpZHRoKCksRz1GdFtBdF07bD1pLmNoYXJTcGFjZXx8aHIsaD1pLm1heFdpZHRofHwwLGY9T2JqZWN0LmFzc2lnbih7YXV0b2VuY29kZTohMCxub0JPTTohMH0saS5mbGFncyk7dmFyIFk9W10sSj1mdW5jdGlvbih0KXtyZXR1cm4gZy5nZXRTdHJpbmdVbml0V2lkdGgodCx7Zm9udDpHLGNoYXJTcGFjZTpsLGZvbnRTaXplOnB0LGRvS2VybmluZzohMX0pKnB0L059O2lmKFwiW29iamVjdCBBcnJheV1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSl7dmFyIFg7cz14KGUpLFwibGVmdFwiIT09YyYmKEg9cy5tYXAoSikpO3ZhciBLLFo9MDtpZihcInJpZ2h0XCI9PT1jKXtyLT1IWzBdLGU9W10sQz1zLmxlbmd0aDtmb3IodmFyICQ9MDskPEM7JCsrKTA9PT0kPyhLPW5yKHIpLFg9aXIobikpOihLPVUoWi1IWyRdKSxYPS1XKSxlLnB1c2goW3NbJF0sSyxYXSksWj1IWyRdfWVsc2UgaWYoXCJjZW50ZXJcIj09PWMpe3ItPUhbMF0vMixlPVtdLEM9cy5sZW5ndGg7Zm9yKHZhciBRPTA7UTxDO1ErKykwPT09UT8oSz1ucihyKSxYPWlyKG4pKTooSz1VKChaLUhbUV0pLzIpLFg9LVcpLGUucHVzaChbc1tRXSxLLFhdKSxaPUhbUV19ZWxzZSBpZihcImxlZnRcIj09PWMpe2U9W10sQz1zLmxlbmd0aDtmb3IodmFyIHR0PTA7dHQ8Qzt0dCsrKWUucHVzaChzW3R0XSl9ZWxzZSBpZihcImp1c3RpZnlcIj09PWMmJlwiSWRlbnRpdHktSFwiPT09Ry5lbmNvZGluZyl7ZT1bXSxDPXMubGVuZ3RoLGg9MCE9PWg/aDpWO2Zvcih2YXIgZXQ9MCxydD0wO3J0PEM7cnQrKylpZihYPTA9PT1ydD9pcihuKTotVyxLPTA9PT1ydD9ucihyKTpldCxydDxDLTEpe3ZhciBudD1VKChoLUhbcnRdKS8oc1tydF0uc3BsaXQoXCIgXCIpLmxlbmd0aC0xKSksaXQ9c1tydF0uc3BsaXQoXCIgXCIpO2UucHVzaChbaXRbMF0rXCIgXCIsSyxYXSksZXQ9MDtmb3IodmFyIGF0PTE7YXQ8aXQubGVuZ3RoO2F0Kyspe3ZhciBvdD0oSihpdFthdC0xXStcIiBcIitpdFthdF0pLUooaXRbYXRdKSkqTitudDthdD09aXQubGVuZ3RoLTE/ZS5wdXNoKFtpdFthdF0sb3QsMF0pOmUucHVzaChbaXRbYXRdK1wiIFwiLG90LDBdKSxldC09b3R9fWVsc2UgZS5wdXNoKFtzW3J0XSxLLFhdKTtlLnB1c2goW1wiXCIsZXQsMF0pfWVsc2V7aWYoXCJqdXN0aWZ5XCIhPT1jKXRocm93IG5ldyBFcnJvcignVW5yZWNvZ25pemVkIGFsaWdubWVudCBvcHRpb24sIHVzZSBcImxlZnRcIiwgXCJjZW50ZXJcIiwgXCJyaWdodFwiIG9yIFwianVzdGlmeVwiLicpO2ZvcihlPVtdLEM9cy5sZW5ndGgsaD0wIT09aD9oOlYscnQ9MDtydDxDO3J0Kyspe1g9MD09PXJ0P2lyKG4pOi1XLEs9MD09PXJ0P25yKHIpOjA7dmFyIHN0PXNbcnRdLnNwbGl0KFwiIFwiKS5sZW5ndGgtMSx1dD1zdD4wPyhoLUhbcnRdKS9zdDowO3J0PEMtMT9ZLnB1c2goQihVKHV0KSkpOlkucHVzaCgwKSxlLnB1c2goW3NbcnRdLEssWF0pfX19ITA9PT0oXCJib29sZWFuXCI9PXR5cGVvZiBpLlIyTD9pLlIyTDp2dCkmJihlPUEoZSxmdW5jdGlvbih0LGUscil7cmV0dXJuW3Quc3BsaXQoXCJcIikucmV2ZXJzZSgpLmpvaW4oXCJcIiksZSxyXX0pKSxvPXt0ZXh0OmUseDpyLHk6bixvcHRpb25zOmksbXV0ZXg6e3BkZkVzY2FwZTpnZSxhY3RpdmVGb250S2V5OkF0LGZvbnRzOkZ0LGFjdGl2ZUZvbnRTaXplOnB0fX0sRHQucHVibGlzaChcInBvc3RQcm9jZXNzVGV4dFwiLG8pLGU9by50ZXh0LHY9by5tdXRleC5pc0hleHx8ITE7dmFyIGN0PUZ0W0F0XS5lbmNvZGluZztcIldpbkFuc2lFbmNvZGluZ1wiIT09Y3QmJlwiU3RhbmRhcmRFbmNvZGluZ1wiIT09Y3R8fChlPUEoZSxmdW5jdGlvbih0LGUscil7cmV0dXJuW0wodCksZSxyXX0pKSxzPXgoZSksZT1bXTtmb3IodmFyIGh0LGZ0LGR0LGd0PUFycmF5LmlzQXJyYXkoc1swXSk/MTowLG10PVwiXCIsYnQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVwiXCI7cmV0dXJuIHIgaW5zdGFuY2VvZiBXdD8ocj1cIm51bWJlclwiPT10eXBlb2YgaS5hbmdsZT9WdChyLG5ldyBXdCgxLDAsMCwxLHQsZSkpOlZ0KG5ldyBXdCgxLDAsMCwxLHQsZSksciksXz09PVMmJihyPVZ0KG5ldyBXdCgxLDAsMCwtMSwwLDApLHIpKSxuPXIuam9pbihcIiBcIikrXCIgVG1cXG5cIik6bj1CKHQpK1wiIFwiK0IoZSkrXCIgVGRcXG5cIixufSx5dD0wO3l0PHMubGVuZ3RoO3l0Kyspe3N3aXRjaChtdD1cIlwiLGd0KXtjYXNlIDE6ZHQ9KHY/XCI8XCI6XCIoXCIpK3NbeXRdWzBdKyh2P1wiPlwiOlwiKVwiKSxodD1wYXJzZUZsb2F0KHNbeXRdWzFdKSxmdD1wYXJzZUZsb2F0KHNbeXRdWzJdKTticmVhaztjYXNlIDA6ZHQ9KHY/XCI8XCI6XCIoXCIpK3NbeXRdKyh2P1wiPlwiOlwiKVwiKSxodD1ucihyKSxmdD1pcihuKX12b2lkIDAhPT1ZJiZ2b2lkIDAhPT1ZW3l0XSYmKG10PVlbeXRdK1wiIFR3XFxuXCIpLDA9PT15dD9lLnB1c2gobXQrYnQoaHQsZnQscCkrZHQpOjA9PT1ndD9lLnB1c2gobXQrZHQpOjE9PT1ndCYmZS5wdXNoKG10K2J0KGh0LGZ0LHApK2R0KX1lPTA9PT1ndD9lLmpvaW4oXCIgVGpcXG5UKiBcIik6ZS5qb2luKFwiIFRqXFxuXCIpLGUrPVwiIFRqXFxuXCI7dmFyIHd0PVwiQlRcXG4vXCI7cmV0dXJuIHd0Kz1BdCtcIiBcIitwdCtcIiBUZlxcblwiLHd0Kz1CKHB0KncpK1wiIFRMXFxuXCIsd3QrPWNyK1wiXFxuXCIsd3QrPXksd3QrPWUsbHQod3QrPVwiRVRcIiksYltBdF09ITAsZ307dmFyIEVlPXkuX19wcml2YXRlX18uY2xpcD15LmNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGx0KFwiZXZlbm9kZFwiPT09dD9cIlcqXCI6XCJXXCIpLHRoaXN9O3kuY2xpcEV2ZW5PZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gRWUoXCJldmVub2RkXCIpfSx5Ll9fcHJpdmF0ZV9fLmRpc2NhcmRQYXRoPXkuZGlzY2FyZFBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gbHQoXCJuXCIpLHRoaXN9O3ZhciBSZT15Ll9fcHJpdmF0ZV9fLmlzVmFsaWRTdHlsZT1mdW5jdGlvbih0KXt2YXIgZT0hMTtyZXR1cm4tMSE9PVt2b2lkIDAsbnVsbCxcIlNcIixcIkRcIixcIkZcIixcIkRGXCIsXCJGRFwiLFwiZlwiLFwiZipcIixcIkJcIixcIkIqXCIsXCJuXCJdLmluZGV4T2YodCkmJihlPSEwKSxlfTt5Ll9fcHJpdmF0ZV9fLnNldERlZmF1bHRQYXRoT3BlcmF0aW9uPXkuc2V0RGVmYXVsdFBhdGhPcGVyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIFJlKHQpJiYoZz10KSx0aGlzfTt2YXIgRGU9eS5fX3ByaXZhdGVfXy5nZXRTdHlsZT15LmdldFN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlPWc7c3dpdGNoKHQpe2Nhc2VcIkRcIjpjYXNlXCJTXCI6ZT1cIlNcIjticmVhaztjYXNlXCJGXCI6ZT1cImZcIjticmVhaztjYXNlXCJGRFwiOmNhc2VcIkRGXCI6ZT1cIkJcIjticmVhaztjYXNlXCJmXCI6Y2FzZVwiZipcIjpjYXNlXCJCXCI6Y2FzZVwiQipcIjplPXR9cmV0dXJuIGV9LFRlPXkuY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4gbHQoXCJoXCIpLHRoaXN9O3kuc3Ryb2tlPWZ1bmN0aW9uKCl7cmV0dXJuIGx0KFwiU1wiKSx0aGlzfSx5LmZpbGw9ZnVuY3Rpb24odCl7cmV0dXJuIHplKFwiZlwiLHQpLHRoaXN9LHkuZmlsbEV2ZW5PZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHplKFwiZipcIix0KSx0aGlzfSx5LmZpbGxTdHJva2U9ZnVuY3Rpb24odCl7cmV0dXJuIHplKFwiQlwiLHQpLHRoaXN9LHkuZmlsbFN0cm9rZUV2ZW5PZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHplKFwiQipcIix0KSx0aGlzfTt2YXIgemU9ZnVuY3Rpb24oZSxyKXtcIm9iamVjdFwiPT09dChyKT9XZShyLGUpOmx0KGUpfSxVZT1mdW5jdGlvbih0KXtudWxsPT09dHx8Xz09PVMmJnZvaWQgMD09PXR8fCh0PURlKHQpLGx0KHQpKX07ZnVuY3Rpb24gSGUodCxlLHIsbixpKXt2YXIgYT1uZXcgcShlfHx0aGlzLmJvdW5kaW5nQm94LHJ8fHRoaXMueFN0ZXAsbnx8dGhpcy55U3RlcCx0aGlzLmdTdGF0ZSxpfHx0aGlzLm1hdHJpeCk7YS5zdHJlYW09dGhpcy5zdHJlYW07dmFyIG89dCtcIiQkXCIrdGhpcy5jbG9uZUluZGV4KysrXCIkJFwiO3JldHVybiBZdChvLGEpLGF9dmFyIFdlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9T3RbdC5rZXldLG49anRbcl07aWYobiBpbnN0YW5jZW9mIE0pbHQoXCJxXCIpLGx0KFZlKGUpKSxuLmdTdGF0ZSYmeS5zZXRHU3RhdGUobi5nU3RhdGUpLGx0KHQubWF0cml4LnRvU3RyaW5nKCkrXCIgY21cIiksbHQoXCIvXCIrcitcIiBzaFwiKSxsdChcIlFcIik7ZWxzZSBpZihuIGluc3RhbmNlb2YgcSl7dmFyIGk9bmV3IFd0KDEsMCwwLC0xLDAsUHIoKSk7dC5tYXRyaXgmJihpPWkubXVsdGlwbHkodC5tYXRyaXh8fEd0KSxyPUhlLmNhbGwobix0LmtleSx0LmJvdW5kaW5nQm94LHQueFN0ZXAsdC55U3RlcCxpKS5pZCksbHQoXCJxXCIpLGx0KFwiL1BhdHRlcm4gY3NcIiksbHQoXCIvXCIrcitcIiBzY25cIiksbi5nU3RhdGUmJnkuc2V0R1N0YXRlKG4uZ1N0YXRlKSxsdChlKSxsdChcIlFcIil9fSxWZT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZVwiZlwiOmNhc2VcIkZcIjpjYXNlXCJuXCI6cmV0dXJuXCJXIG5cIjtjYXNlXCJmKlwiOnJldHVyblwiVyogblwiO2Nhc2VcIkJcIjpjYXNlXCJTXCI6cmV0dXJuXCJXIFNcIjtjYXNlXCJCKlwiOnJldHVyblwiVyogU1wifX0sR2U9eS5tb3ZlVG89ZnVuY3Rpb24odCxlKXtyZXR1cm4gbHQoQihVKHQpKStcIiBcIitCKEgoZSkpK1wiIG1cIiksdGhpc30sWWU9eS5saW5lVG89ZnVuY3Rpb24odCxlKXtyZXR1cm4gbHQoQihVKHQpKStcIiBcIitCKEgoZSkpK1wiIGxcIiksdGhpc30sSmU9eS5jdXJ2ZVRvPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm4gbHQoW0IoVSh0KSksQihIKGUpKSxCKFUocikpLEIoSChuKSksQihVKGkpKSxCKEgoYSkpLFwiY1wiXS5qb2luKFwiIFwiKSksdGhpc307eS5fX3ByaXZhdGVfXy5saW5lPXkubGluZT1mdW5jdGlvbih0LGUscixuLGkpe2lmKGlzTmFOKHQpfHxpc05hTihlKXx8aXNOYU4ocil8fGlzTmFOKG4pfHwhUmUoaSkpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIGpzUERGLmxpbmVcIik7cmV0dXJuIF89PT1BP3RoaXMubGluZXMoW1tyLXQsbi1lXV0sdCxlLFsxLDFdLGl8fFwiU1wiKTp0aGlzLmxpbmVzKFtbci10LG4tZV1dLHQsZSxbMSwxXSkuc3Ryb2tlKCl9LHkuX19wcml2YXRlX18ubGluZXM9eS5saW5lcz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scyx1LGMsbCxoLGYsZCxwLGcsbSx2O2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0JiYodj1yLHI9ZSxlPXQsdD12KSxuPW58fFsxLDFdLGE9YXx8ITEsaXNOYU4oZSl8fGlzTmFOKHIpfHwhQXJyYXkuaXNBcnJheSh0KXx8IUFycmF5LmlzQXJyYXkobil8fCFSZShpKXx8XCJib29sZWFuXCIhPXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBqc1BERi5saW5lc1wiKTtmb3IoR2UoZSxyKSxvPW5bMF0scz1uWzFdLGM9dC5sZW5ndGgsZz1lLG09cix1PTA7dTxjO3UrKykyPT09KGw9dFt1XSkubGVuZ3RoPyhnPWxbMF0qbytnLG09bFsxXSpzK20sWWUoZyxtKSk6KGg9bFswXSpvK2csZj1sWzFdKnMrbSxkPWxbMl0qbytnLHA9bFszXSpzK20sZz1sWzRdKm8rZyxtPWxbNV0qcyttLEplKGgsZixkLHAsZyxtKSk7cmV0dXJuIGEmJlRlKCksVWUoaSksdGhpc30seS5wYXRoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdLG49ci5jO3N3aXRjaChyLm9wKXtjYXNlXCJtXCI6R2UoblswXSxuWzFdKTticmVhaztjYXNlXCJsXCI6WWUoblswXSxuWzFdKTticmVhaztjYXNlXCJjXCI6SmUuYXBwbHkodGhpcyxuKTticmVhaztjYXNlXCJoXCI6VGUoKX19cmV0dXJuIHRoaXN9LHkuX19wcml2YXRlX18ucmVjdD15LnJlY3Q9ZnVuY3Rpb24odCxlLHIsbixpKXtpZihpc05hTih0KXx8aXNOYU4oZSl8fGlzTmFOKHIpfHxpc05hTihuKXx8IVJlKGkpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBqc1BERi5yZWN0XCIpO3JldHVybiBfPT09QSYmKG49LW4pLGx0KFtCKFUodCkpLEIoSChlKSksQihVKHIpKSxCKFUobikpLFwicmVcIl0uam9pbihcIiBcIikpLFVlKGkpLHRoaXN9LHkuX19wcml2YXRlX18udHJpYW5nbGU9eS50cmlhbmdsZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXtpZihpc05hTih0KXx8aXNOYU4oZSl8fGlzTmFOKHIpfHxpc05hTihuKXx8aXNOYU4oaSl8fGlzTmFOKGEpfHwhUmUobykpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIGpzUERGLnRyaWFuZ2xlXCIpO3JldHVybiB0aGlzLmxpbmVzKFtbci10LG4tZV0sW2ktcixhLW5dLFt0LWksZS1hXV0sdCxlLFsxLDFdLG8sITApLHRoaXN9LHkuX19wcml2YXRlX18ucm91bmRlZFJlY3Q9eS5yb3VuZGVkUmVjdD1mdW5jdGlvbih0LGUscixuLGksYSxvKXtpZihpc05hTih0KXx8aXNOYU4oZSl8fGlzTmFOKHIpfHxpc05hTihuKXx8aXNOYU4oaSl8fGlzTmFOKGEpfHwhUmUobykpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIGpzUERGLnJvdW5kZWRSZWN0XCIpO3ZhciBzPTQvMyooTWF0aC5TUVJUMi0xKTtyZXR1cm4gaT1NYXRoLm1pbihpLC41KnIpLGE9TWF0aC5taW4oYSwuNSpuKSx0aGlzLmxpbmVzKFtbci0yKmksMF0sW2kqcywwLGksYS1hKnMsaSxhXSxbMCxuLTIqYV0sWzAsYSpzLC1pKnMsYSwtaSxhXSxbMippLXIsMF0sWy1pKnMsMCwtaSwtYSpzLC1pLC1hXSxbMCwyKmEtbl0sWzAsLWEqcyxpKnMsLWEsaSwtYV1dLHQraSxlLFsxLDFdLG8sITApLHRoaXN9LHkuX19wcml2YXRlX18uZWxsaXBzZT15LmVsbGlwc2U9ZnVuY3Rpb24odCxlLHIsbixpKXtpZihpc05hTih0KXx8aXNOYU4oZSl8fGlzTmFOKHIpfHxpc05hTihuKXx8IVJlKGkpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBqc1BERi5lbGxpcHNlXCIpO3ZhciBhPTQvMyooTWF0aC5TUVJUMi0xKSpyLG89NC8zKihNYXRoLlNRUlQyLTEpKm47cmV0dXJuIEdlKHQrcixlKSxKZSh0K3IsZS1vLHQrYSxlLW4sdCxlLW4pLEplKHQtYSxlLW4sdC1yLGUtbyx0LXIsZSksSmUodC1yLGUrbyx0LWEsZStuLHQsZStuKSxKZSh0K2EsZStuLHQrcixlK28sdCtyLGUpLFVlKGkpLHRoaXN9LHkuX19wcml2YXRlX18uY2lyY2xlPXkuY2lyY2xlPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKGlzTmFOKHQpfHxpc05hTihlKXx8aXNOYU4ocil8fCFSZShuKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8ganNQREYuY2lyY2xlXCIpO3JldHVybiB0aGlzLmVsbGlwc2UodCxlLHIscixuKX0seS5zZXRGb250PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gciYmKGU9RihlLHIpKSxBdD1OZSh0LGUse2Rpc2FibGVXYXJuaW5nOiExfSksdGhpc307dmFyIFhlPXkuX19wcml2YXRlX18uZ2V0Rm9udD15LmdldEZvbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gRnRbTmUuYXBwbHkoeSxhcmd1bWVudHMpXX07eS5fX3ByaXZhdGVfXy5nZXRGb250TGlzdD15LmdldEZvbnRMaXN0PWZ1bmN0aW9uKCl7dmFyIHQsZSxyPXt9O2Zvcih0IGluIEl0KWlmKEl0Lmhhc093blByb3BlcnR5KHQpKWZvcihlIGluIHJbdF09W10sSXRbdF0pSXRbdF0uaGFzT3duUHJvcGVydHkoZSkmJnJbdF0ucHVzaChlKTtyZXR1cm4gcn0seS5hZGRGb250PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9W1wiU3RhbmRhcmRFbmNvZGluZ1wiLFwiTWFjUm9tYW5FbmNvZGluZ1wiLFwiSWRlbnRpdHktSFwiLFwiV2luQW5zaUVuY29kaW5nXCJdO3JldHVybiBhcmd1bWVudHNbM10mJi0xIT09YS5pbmRleE9mKGFyZ3VtZW50c1szXSk/aT1hcmd1bWVudHNbM106YXJndW1lbnRzWzNdJiYtMT09YS5pbmRleE9mKGFyZ3VtZW50c1szXSkmJihyPUYocixuKSkscGUuY2FsbCh0aGlzLHQsZSxyLGk9aXx8XCJJZGVudGl0eS1IXCIpfTt2YXIgS2UsWmU9ZS5saW5lV2lkdGh8fC4yMDAwMjUsJGU9eS5fX3ByaXZhdGVfXy5nZXRMaW5lV2lkdGg9eS5nZXRMaW5lV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gWmV9LFFlPXkuX19wcml2YXRlX18uc2V0TGluZVdpZHRoPXkuc2V0TGluZVdpZHRoPWZ1bmN0aW9uKHQpe3JldHVybiBaZT10LGx0KEIoVSh0KSkrXCIgd1wiKSx0aGlzfTt5Ll9fcHJpdmF0ZV9fLnNldExpbmVEYXNoPUUuQVBJLnNldExpbmVEYXNoPUUuQVBJLnNldExpbmVEYXNoUGF0dGVybj1mdW5jdGlvbih0LGUpe2lmKHQ9dHx8W10sZT1lfHwwLGlzTmFOKGUpfHwhQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8ganNQREYuc2V0TGluZURhc2hcIik7cmV0dXJuIHQ9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEIoVSh0KSl9KS5qb2luKFwiIFwiKSxlPUIoVShlKSksbHQoXCJbXCIrdCtcIl0gXCIrZStcIiBkXCIpLHRoaXN9O3ZhciB0cj15Ll9fcHJpdmF0ZV9fLmdldExpbmVIZWlnaHQ9eS5nZXRMaW5lSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHB0KktlfTt5Ll9fcHJpdmF0ZV9fLmdldExpbmVIZWlnaHQ9eS5nZXRMaW5lSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHB0KktlfTt2YXIgZXI9eS5fX3ByaXZhdGVfXy5zZXRMaW5lSGVpZ2h0RmFjdG9yPXkuc2V0TGluZUhlaWdodEZhY3Rvcj1mdW5jdGlvbih0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YodD10fHwxLjE1KSYmKEtlPXQpLHRoaXN9LHJyPXkuX19wcml2YXRlX18uZ2V0TGluZUhlaWdodEZhY3Rvcj15LmdldExpbmVIZWlnaHRGYWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gS2V9O2VyKGUubGluZUhlaWdodCk7dmFyIG5yPXkuX19wcml2YXRlX18uZ2V0SG9yaXpvbnRhbENvb3JkaW5hdGU9ZnVuY3Rpb24odCl7cmV0dXJuIFUodCl9LGlyPXkuX19wcml2YXRlX18uZ2V0VmVydGljYWxDb29yZGluYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBfPT09Uz90OlJ0WyRdLm1lZGlhQm94LnRvcFJpZ2h0WS1SdFskXS5tZWRpYUJveC5ib3R0b21MZWZ0WS1VKHQpfSxhcj15Ll9fcHJpdmF0ZV9fLmdldEhvcml6b250YWxDb29yZGluYXRlU3RyaW5nPXkuZ2V0SG9yaXpvbnRhbENvb3JkaW5hdGVTdHJpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIEIobnIodCkpfSxvcj15Ll9fcHJpdmF0ZV9fLmdldFZlcnRpY2FsQ29vcmRpbmF0ZVN0cmluZz15LmdldFZlcnRpY2FsQ29vcmRpbmF0ZVN0cmluZz1mdW5jdGlvbih0KXtyZXR1cm4gQihpcih0KSl9LHNyPWUuc3Ryb2tlQ29sb3J8fFwiMCBHXCI7eS5fX3ByaXZhdGVfXy5nZXRTdHJva2VDb2xvcj15LmdldERyYXdDb2xvcj1mdW5jdGlvbigpe3JldHVybiBlZShzcil9LHkuX19wcml2YXRlX18uc2V0U3Ryb2tlQ29sb3I9eS5zZXREcmF3Q29sb3I9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHNyPXJlKHtjaDE6dCxjaDI6ZSxjaDM6cixjaDQ6bixwZGZDb2xvclR5cGU6XCJkcmF3XCIscHJlY2lzaW9uOjJ9KSxsdChzciksdGhpc307dmFyIHVyPWUuZmlsbENvbG9yfHxcIjAgZ1wiO3kuX19wcml2YXRlX18uZ2V0RmlsbENvbG9yPXkuZ2V0RmlsbENvbG9yPWZ1bmN0aW9uKCl7cmV0dXJuIGVlKHVyKX0seS5fX3ByaXZhdGVfXy5zZXRGaWxsQ29sb3I9eS5zZXRGaWxsQ29sb3I9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHVyPXJlKHtjaDE6dCxjaDI6ZSxjaDM6cixjaDQ6bixwZGZDb2xvclR5cGU6XCJmaWxsXCIscHJlY2lzaW9uOjJ9KSxsdCh1ciksdGhpc307dmFyIGNyPWUudGV4dENvbG9yfHxcIjAgZ1wiLGxyPXkuX19wcml2YXRlX18uZ2V0VGV4dENvbG9yPXkuZ2V0VGV4dENvbG9yPWZ1bmN0aW9uKCl7cmV0dXJuIGVlKGNyKX07eS5fX3ByaXZhdGVfXy5zZXRUZXh0Q29sb3I9eS5zZXRUZXh0Q29sb3I9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIGNyPXJlKHtjaDE6dCxjaDI6ZSxjaDM6cixjaDQ6bixwZGZDb2xvclR5cGU6XCJ0ZXh0XCIscHJlY2lzaW9uOjN9KSx0aGlzfTt2YXIgaHI9ZS5jaGFyU3BhY2UsZnI9eS5fX3ByaXZhdGVfXy5nZXRDaGFyU3BhY2U9eS5nZXRDaGFyU3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gcGFyc2VGbG9hdChocnx8MCl9O3kuX19wcml2YXRlX18uc2V0Q2hhclNwYWNlPXkuc2V0Q2hhclNwYWNlPWZ1bmN0aW9uKHQpe2lmKGlzTmFOKHQpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGpzUERGLnNldENoYXJTcGFjZVwiKTtyZXR1cm4gaHI9dCx0aGlzfTt2YXIgZHI9MDt5LkNhcEpvaW5TdHlsZXM9ezA6MCxidXR0OjAsYnV0OjAsbWl0ZXI6MCwxOjEscm91bmQ6MSxyb3VuZGVkOjEsY2lyY2xlOjEsMjoyLHByb2plY3Rpbmc6Mixwcm9qZWN0OjIsc3F1YXJlOjIsYmV2ZWw6Mn0seS5fX3ByaXZhdGVfXy5zZXRMaW5lQ2FwPXkuc2V0TGluZUNhcD1mdW5jdGlvbih0KXt2YXIgZT15LkNhcEpvaW5TdHlsZXNbdF07aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJMaW5lIGNhcCBzdHlsZSBvZiAnXCIrdCtcIicgaXMgbm90IHJlY29nbml6ZWQuIFNlZSBvciBleHRlbmQgLkNhcEpvaW5TdHlsZXMgcHJvcGVydHkgZm9yIHZhbGlkIHN0eWxlc1wiKTtyZXR1cm4gZHI9ZSxsdChlK1wiIEpcIiksdGhpc307dmFyIHByPTA7eS5fX3ByaXZhdGVfXy5zZXRMaW5lSm9pbj15LnNldExpbmVKb2luPWZ1bmN0aW9uKHQpe3ZhciBlPXkuQ2FwSm9pblN0eWxlc1t0XTtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBFcnJvcihcIkxpbmUgam9pbiBzdHlsZSBvZiAnXCIrdCtcIicgaXMgbm90IHJlY29nbml6ZWQuIFNlZSBvciBleHRlbmQgLkNhcEpvaW5TdHlsZXMgcHJvcGVydHkgZm9yIHZhbGlkIHN0eWxlc1wiKTtyZXR1cm4gcHI9ZSxsdChlK1wiIGpcIiksdGhpc30seS5fX3ByaXZhdGVfXy5zZXRMaW5lTWl0ZXJMaW1pdD15Ll9fcHJpdmF0ZV9fLnNldE1pdGVyTGltaXQ9eS5zZXRMaW5lTWl0ZXJMaW1pdD15LnNldE1pdGVyTGltaXQ9ZnVuY3Rpb24odCl7aWYodD10fHwwLGlzTmFOKHQpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIGpzUERGLnNldExpbmVNaXRlckxpbWl0XCIpO3JldHVybiBsdChCKFUodCkpK1wiIE1cIiksdGhpc30seS5HU3RhdGU9Tyx5LnNldEdTdGF0ZT1mdW5jdGlvbih0KXsodD1cInN0cmluZ1wiPT10eXBlb2YgdD9CdFtNdFt0XV06Z3IobnVsbCx0KSkuZXF1YWxzKHF0KXx8KGx0KFwiL1wiK3QuaWQrXCIgZ3NcIikscXQ9dCl9O3ZhciBncj1mdW5jdGlvbih0LGUpe2lmKCF0fHwhTXRbdF0pe3ZhciByPSExO2Zvcih2YXIgbiBpbiBCdClpZihCdC5oYXNPd25Qcm9wZXJ0eShuKSYmQnRbbl0uZXF1YWxzKGUpKXtyPSEwO2JyZWFrfWlmKHIpZT1CdFtuXTtlbHNle3ZhciBpPVwiR1NcIisoT2JqZWN0LmtleXMoQnQpLmxlbmd0aCsxKS50b1N0cmluZygxMCk7QnRbaV09ZSxlLmlkPWl9cmV0dXJuIHQmJihNdFt0XT1lLmlkKSxEdC5wdWJsaXNoKFwiYWRkR1N0YXRlXCIsZSksZX19O3kuYWRkR1N0YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGdyKHQsZSksdGhpc30seS5zYXZlR3JhcGhpY3NTdGF0ZT1mdW5jdGlvbigpe3JldHVybiBsdChcInFcIiksQ3QucHVzaCh7a2V5OkF0LHNpemU6cHQsY29sb3I6Y3J9KSx0aGlzfSx5LnJlc3RvcmVHcmFwaGljc1N0YXRlPWZ1bmN0aW9uKCl7bHQoXCJRXCIpO3ZhciB0PUN0LnBvcCgpO3JldHVybiBBdD10LmtleSxwdD10LnNpemUsY3I9dC5jb2xvcixxdD1udWxsLHRoaXN9LHkuc2V0Q3VycmVudFRyYW5zZm9ybWF0aW9uTWF0cml4PWZ1bmN0aW9uKHQpe3JldHVybiBsdCh0LnRvU3RyaW5nKCkrXCIgY21cIiksdGhpc30seS5jb21tZW50PWZ1bmN0aW9uKHQpe3JldHVybiBsdChcIiNcIit0KSx0aGlzfTt2YXIgbXI9ZnVuY3Rpb24odCxlKXt2YXIgcj10fHwwO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwieFwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByfSxzZXQ6ZnVuY3Rpb24odCl7aXNOYU4odCl8fChyPXBhcnNlRmxvYXQodCkpfX0pO3ZhciBuPWV8fDA7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJ5XCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG59LHNldDpmdW5jdGlvbih0KXtpc05hTih0KXx8KG49cGFyc2VGbG9hdCh0KSl9fSk7dmFyIGk9XCJwdFwiO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInR5cGVcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sc2V0OmZ1bmN0aW9uKHQpe2k9dC50b1N0cmluZygpfX0pLHRoaXN9LHZyPWZ1bmN0aW9uKHQsZSxyLG4pe21yLmNhbGwodGhpcyx0LGUpLHRoaXMudHlwZT1cInJlY3RcIjt2YXIgaT1yfHwwO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwid1wiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpfSxzZXQ6ZnVuY3Rpb24odCl7aXNOYU4odCl8fChpPXBhcnNlRmxvYXQodCkpfX0pO3ZhciBhPW58fDA7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiaFwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhfSxzZXQ6ZnVuY3Rpb24odCl7aXNOYU4odCl8fChhPXBhcnNlRmxvYXQodCkpfX0pLHRoaXN9LGJyPWZ1bmN0aW9uKCl7dGhpcy5wYWdlPUV0LHRoaXMuY3VycmVudFBhZ2U9JCx0aGlzLnBhZ2VzPW90LnNsaWNlKDApLHRoaXMucGFnZXNDb250ZXh0PVJ0LnNsaWNlKDApLHRoaXMueD1fdCx0aGlzLnk9UHQsdGhpcy5tYXRyaXg9a3QsdGhpcy53aWR0aD1OcigkKSx0aGlzLmhlaWdodD14cigkKSx0aGlzLm91dHB1dERlc3RpbmF0aW9uPXV0LHRoaXMuaWQ9XCJcIix0aGlzLm9iamVjdE51bWJlcj0tMX07YnIucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24oKXtFdD10aGlzLnBhZ2UsJD10aGlzLmN1cnJlbnRQYWdlLFJ0PXRoaXMucGFnZXNDb250ZXh0LG90PXRoaXMucGFnZXMsX3Q9dGhpcy54LFB0PXRoaXMueSxrdD10aGlzLm1hdHJpeCxMcigkLHRoaXMud2lkdGgpLEFyKCQsdGhpcy5oZWlnaHQpLHV0PXRoaXMub3V0cHV0RGVzdGluYXRpb259O3ZhciB5cj1mdW5jdGlvbih0LGUscixuLGkpe0h0LnB1c2gobmV3IGJyKSxFdD0kPTAsb3Q9W10sX3Q9dCxQdD1lLGt0PWksbWUoW3Isbl0pfTtmb3IodmFyIHdyIGluIHkuYmVnaW5Gb3JtT2JqZWN0PWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIHlyKHQsZSxyLG4saSksdGhpc30seS5lbmRGb3JtT2JqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihVdFt0XSlIdC5wb3AoKS5yZXN0b3JlKCk7ZWxzZXt2YXIgZT1uZXcgYnIscj1cIlhvXCIrKE9iamVjdC5rZXlzKHp0KS5sZW5ndGgrMSkudG9TdHJpbmcoMTApO2UuaWQ9cixVdFt0XT1yLHp0W3JdPWUsRHQucHVibGlzaChcImFkZEZvcm1PYmplY3RcIixlKSxIdC5wb3AoKS5yZXN0b3JlKCl9fSh0KSx0aGlzfSx5LmRvRm9ybU9iamVjdD1mdW5jdGlvbih0LGUpe3ZhciByPXp0W1V0W3RdXTtyZXR1cm4gbHQoXCJxXCIpLGx0KGUudG9TdHJpbmcoKStcIiBjbVwiKSxsdChcIi9cIityLmlkK1wiIERvXCIpLGx0KFwiUVwiKSx0aGlzfSx5LmdldEZvcm1PYmplY3Q9ZnVuY3Rpb24odCl7dmFyIGU9enRbVXRbdF1dO3JldHVybnt4OmUueCx5OmUueSx3aWR0aDplLndpZHRoLGhlaWdodDplLmhlaWdodCxtYXRyaXg6ZS5tYXRyaXh9fSx5LnNhdmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD10fHxcImdlbmVyYXRlZC5wZGZcIiwoZT1lfHx7fSkucmV0dXJuUHJvbWlzZT1lLnJldHVyblByb21pc2V8fCExLCExPT09ZS5yZXR1cm5Qcm9taXNlPyhsKGtlKFBlKCkpLHQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGwudW5sb2FkJiZpLnNldFRpbWVvdXQmJnNldFRpbWVvdXQobC51bmxvYWQsOTExKSx0aGlzKTpuZXcgUHJvbWlzZShmdW5jdGlvbihlLHIpe3RyeXt2YXIgbj1sKGtlKFBlKCkpLHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIGwudW5sb2FkJiZpLnNldFRpbWVvdXQmJnNldFRpbWVvdXQobC51bmxvYWQsOTExKSxlKG4pfWNhdGNoKGEpe3IoYS5tZXNzYWdlKX19KX0sRS5BUEkpRS5BUEkuaGFzT3duUHJvcGVydHkod3IpJiYoXCJldmVudHNcIj09PXdyJiZFLkFQSS5ldmVudHMubGVuZ3RoP2Z1bmN0aW9uKHQsZSl7dmFyIHIsbixpO2ZvcihpPWUubGVuZ3RoLTE7LTEhPT1pO2ktLSlyPWVbaV1bMF0sbj1lW2ldWzFdLHQuc3Vic2NyaWJlLmFwcGx5KHQsW3JdLmNvbmNhdChcImZ1bmN0aW9uXCI9PXR5cGVvZiBuP1tuXTpuKSl9KER0LEUuQVBJLmV2ZW50cyk6eVt3cl09RS5BUElbd3JdKTtmdW5jdGlvbiBOcih0KXtyZXR1cm4gUnRbdF0ubWVkaWFCb3gudG9wUmlnaHRYLVJ0W3RdLm1lZGlhQm94LmJvdHRvbUxlZnRYfWZ1bmN0aW9uIExyKHQsZSl7UnRbdF0ubWVkaWFCb3gudG9wUmlnaHRYPWUrUnRbdF0ubWVkaWFCb3guYm90dG9tTGVmdFh9ZnVuY3Rpb24geHIodCl7cmV0dXJuIFJ0W3RdLm1lZGlhQm94LnRvcFJpZ2h0WS1SdFt0XS5tZWRpYUJveC5ib3R0b21MZWZ0WX1mdW5jdGlvbiBBcih0LGUpe1J0W3RdLm1lZGlhQm94LnRvcFJpZ2h0WT1lK1J0W3RdLm1lZGlhQm94LmJvdHRvbUxlZnRZfXZhciBTcj15LmdldFBhZ2VXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gTnIodD10fHwkKS9TdH0sX3I9eS5zZXRQYWdlV2lkdGg9ZnVuY3Rpb24odCxlKXtMcih0LGUqU3QpfSxQcj15LmdldFBhZ2VIZWlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHhyKHQ9dHx8JCkvU3R9LGtyPXkuc2V0UGFnZUhlaWdodD1mdW5jdGlvbih0LGUpe0FyKHQsZSpTdCl9O3JldHVybiB5LmludGVybmFsPXtwZGZFc2NhcGU6Z2UsZ2V0U3R5bGU6RGUsZ2V0Rm9udDpYZSxnZXRGb250U2l6ZTptdCxnZXRDaGFyU3BhY2U6ZnIsZ2V0VGV4dENvbG9yOmxyLGdldExpbmVIZWlnaHQ6dHIsZ2V0TGluZUhlaWdodEZhY3RvcjpycixnZXRMaW5lV2lkdGg6JGUsd3JpdGU6aHQsZ2V0SG9yaXpvbnRhbENvb3JkaW5hdGU6bnIsZ2V0VmVydGljYWxDb29yZGluYXRlOmlyLGdldENvb3JkaW5hdGVTdHJpbmc6YXIsZ2V0VmVydGljYWxDb29yZGluYXRlU3RyaW5nOm9yLGNvbGxlY3Rpb25zOnt9LG5ld09iamVjdDpYdCxuZXdBZGRpdGlvbmFsT2JqZWN0OiR0LG5ld09iamVjdERlZmVycmVkOkt0LG5ld09iamVjdERlZmVycmVkQmVnaW46WnQsZ2V0RmlsdGVyczpuZSxwdXRTdHJlYW06aWUsZXZlbnRzOkR0LHNjYWxlRmFjdG9yOlN0LHBhZ2VTaXplOntnZXRXaWR0aDpmdW5jdGlvbigpe3JldHVybiBTcigkKX0sc2V0V2lkdGg6ZnVuY3Rpb24odCl7X3IoJCx0KX0sZ2V0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIFByKCQpfSxzZXRIZWlnaHQ6ZnVuY3Rpb24odCl7a3IoJCx0KX19LGVuY3J5cHRpb25PcHRpb25zOm0sZW5jcnlwdGlvbjpPZSxnZXRFbmNyeXB0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT1tP09lLmVuY3J5cHRvcih0LDApOmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sb3V0cHV0OkNlLGdldE51bWJlck9mUGFnZXM6d2UsZ2V0IHBhZ2VzKCl7cmV0dXJuIG90fSxvdXQ6bHQsZjI6VCxmMzp6LGdldFBhZ2VJbmZvOkJlLGdldFBhZ2VJbmZvQnlPYmpJZDpNZSxnZXRDdXJyZW50UGFnZUluZm86cWUsZ2V0UERGVmVyc2lvbjpOLFBvaW50Om1yLFJlY3RhbmdsZTp2cixNYXRyaXg6V3QsaGFzSG90Zml4OmplfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5pbnRlcm5hbC5wYWdlU2l6ZSxcIndpZHRoXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBTcigkKX0sc2V0OmZ1bmN0aW9uKHQpe19yKCQsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHkuaW50ZXJuYWwucGFnZVNpemUsXCJoZWlnaHRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFByKCQpfSxzZXQ6ZnVuY3Rpb24odCl7a3IoJCx0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPWR0Lmxlbmd0aDtlPHI7ZSsrKXt2YXIgbj1wZS5jYWxsKHRoaXMsdFtlXVswXSx0W2VdWzFdLHRbZV1bMl0sZHRbZV1bM10sITApOyExPT09diYmKGJbbl09ITApO3ZhciBpPXRbZV1bMF0uc3BsaXQoXCItXCIpO2RlKHtpZDpuLGZvbnROYW1lOmlbMF0sZm9udFN0eWxlOmlbMV18fFwiXCJ9KX1EdC5wdWJsaXNoKFwiYWRkRm9udHNcIix7Zm9udHM6RnQsZGljdGlvbmFyeTpJdH0pfS5jYWxsKHksZHQpLEF0PVwiRjFcIix2ZShzLG4pLER0LnB1Ymxpc2goXCJpbml0aWFsaXplZFwiKSx5fUkucHJvdG90eXBlLmxzYkZpcnN0V29yZD1mdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmdCx0Pj44JjI1NSx0Pj4xNiYyNTUsdD4+MjQmMjU1KX0sSS5wcm90b3R5cGUudG9IZXhTdHJpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3BsaXQoXCJcIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybihcIjBcIisoMjU1JnQuY2hhckNvZGVBdCgwKSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMil9KS5qb2luKFwiXCIpfSxJLnByb3RvdHlwZS5oZXhUb0J5dGVzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDtyKz0yKWUucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KHQuc3Vic3RyKHIsMiksMTYpKSk7cmV0dXJuIGUuam9pbihcIlwiKX0sSS5wcm90b3R5cGUucHJvY2Vzc093bmVyUGFzc3dvcmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gayhTKGUpLnN1YnN0cigwLDUpLHQpfSxJLnByb3RvdHlwZS5lbmNyeXB0b3I9ZnVuY3Rpb24odCxlKXt2YXIgcj1TKHRoaXMuZW5jcnlwdGlvbktleStTdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZ0LHQ+PjgmMjU1LHQ+PjE2JjI1NSwyNTUmZSxlPj44JjI1NSkpLnN1YnN0cigwLDEwKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGsocix0KX19LE8ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXt2YXIgcixuPVwiaWQsb2JqZWN0TnVtYmVyLGVxdWFsc1wiO2lmKCFlfHx0KGUpIT09dCh0aGlzKSlyZXR1cm4hMTt2YXIgaT0wO2ZvcihyIGluIHRoaXMpaWYoIShuLmluZGV4T2Yocik+PTApKXtpZih0aGlzLmhhc093blByb3BlcnR5KHIpJiYhZS5oYXNPd25Qcm9wZXJ0eShyKSlyZXR1cm4hMTtpZih0aGlzW3JdIT09ZVtyXSlyZXR1cm4hMTtpKyt9Zm9yKHIgaW4gZSllLmhhc093blByb3BlcnR5KHIpJiZuLmluZGV4T2Yocik8MCYmaS0tO3JldHVybiAwPT09aX0sRS5BUEk9e2V2ZW50czpbXX0sRS52ZXJzaW9uPVwiNC4yLjFcIjt2YXIgUj1FLkFQSSxEPTEsVD1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC9cXFxcL2csXCJcXFxcXFxcXFwiKS5yZXBsYWNlKC9cXCgvZyxcIlxcXFwoXCIpLnJlcGxhY2UoL1xcKS9nLFwiXFxcXClcIil9LHo9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvXFxcXFxcXFwvZyxcIlxcXFxcIikucmVwbGFjZSgvXFxcXFxcKC9nLFwiKFwiKS5yZXBsYWNlKC9cXFxcXFwpL2csXCIpXCIpfSxVPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKCkucmVwbGFjZSgvIy9nLFwiIzIzXCIpLnJlcGxhY2UoL1tcXHNcXG5cXHIoKTw+W1xcXXt9XFwvJV0vZyxmdW5jdGlvbih0KXt2YXIgZT10LmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuXCIjXCIrKDE9PT1lLmxlbmd0aD9cIjBcIitlOmUpfSl9LEg9ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9GaXhlZCgyKX0sVz1mdW5jdGlvbih0KXtyZXR1cm4gdC50b0ZpeGVkKDUpfTtSLl9fYWNyb2Zvcm1fXz17fTt2YXIgVj1mdW5jdGlvbih0LGUpe3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9LEc9ZnVuY3Rpb24odCl7cmV0dXJuIHQqRH0sWT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbHQscj1BdC5pbnRlcm5hbC5nZXRIZWlnaHQodCl8fDAsbj1BdC5pbnRlcm5hbC5nZXRXaWR0aCh0KXx8MDtyZXR1cm4gZS5CQm94PVswLDAsTnVtYmVyKEgobikpLE51bWJlcihIKHIpKV0sZX0sSj1SLl9fYWNyb2Zvcm1fXy5zZXRCaXQ9ZnVuY3Rpb24odCxlKXtpZih0PXR8fDAsZT1lfHwwLGlzTmFOKHQpfHxpc05hTihlKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8ganNQREYuQVBJLl9fYWNyb2Zvcm1fXy5zZXRCaXRcIik7cmV0dXJuIHR8MTw8ZX0sWD1SLl9fYWNyb2Zvcm1fXy5jbGVhckJpdD1mdW5jdGlvbih0LGUpe2lmKHQ9dHx8MCxlPWV8fDAsaXNOYU4odCl8fGlzTmFOKGUpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBqc1BERi5BUEkuX19hY3JvZm9ybV9fLmNsZWFyQml0XCIpO3JldHVybiB0Jn4oMTw8ZSl9LEs9Ui5fX2Fjcm9mb3JtX18uZ2V0Qml0PWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odCl8fGlzTmFOKGUpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBqc1BERi5BUEkuX19hY3JvZm9ybV9fLmdldEJpdFwiKTtyZXR1cm4gdCYxPDxlPzE6MH0sWj1SLl9fYWNyb2Zvcm1fXy5nZXRCaXRGb3JQZGY9ZnVuY3Rpb24odCxlKXtpZihpc05hTih0KXx8aXNOYU4oZSkpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIGpzUERGLkFQSS5fX2Fjcm9mb3JtX18uZ2V0Qml0Rm9yUGRmXCIpO3JldHVybiBLKHQsZS0xKX0sJD1SLl9fYWNyb2Zvcm1fXy5zZXRCaXRGb3JQZGY9ZnVuY3Rpb24odCxlKXtpZihpc05hTih0KXx8aXNOYU4oZSkpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIGpzUERGLkFQSS5fX2Fjcm9mb3JtX18uc2V0Qml0Rm9yUGRmXCIpO3JldHVybiBKKHQsZS0xKX0sUT1SLl9fYWNyb2Zvcm1fXy5jbGVhckJpdEZvclBkZj1mdW5jdGlvbih0LGUpe2lmKGlzTmFOKHQpfHxpc05hTihlKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8ganNQREYuQVBJLl9fYWNyb2Zvcm1fXy5jbGVhckJpdEZvclBkZlwiKTtyZXR1cm4gWCh0LGUtMSl9LHR0PVIuX19hY3JvZm9ybV9fLmNhbGN1bGF0ZUNvb3JkaW5hdGVzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5pbnRlcm5hbC5nZXRIb3Jpem9udGFsQ29vcmRpbmF0ZSxuPWUuaW50ZXJuYWwuZ2V0VmVydGljYWxDb29yZGluYXRlLGk9dFswXSxhPXRbMV0sbz10WzJdLHM9dFszXSx1PXt9O3JldHVybiB1Lmxvd2VyTGVmdF9YPXIoaSl8fDAsdS5sb3dlckxlZnRfWT1uKGErcyl8fDAsdS51cHBlclJpZ2h0X1g9cihpK28pfHwwLHUudXBwZXJSaWdodF9ZPW4oYSl8fDAsW051bWJlcihIKHUubG93ZXJMZWZ0X1gpKSxOdW1iZXIoSCh1Lmxvd2VyTGVmdF9ZKSksTnVtYmVyKEgodS51cHBlclJpZ2h0X1gpKSxOdW1iZXIoSCh1LnVwcGVyUmlnaHRfWSkpXX0sZXQ9ZnVuY3Rpb24odCl7aWYodC5hcHBlYXJhbmNlU3RyZWFtQ29udGVudClyZXR1cm4gdC5hcHBlYXJhbmNlU3RyZWFtQ29udGVudDtpZih0LlZ8fHQuRFYpe3ZhciBlPVtdLHI9dC5fVnx8dC5EVixuPXJ0KHQsciksaT10LnNjb3BlLmludGVybmFsLmdldEZvbnQodC5mb250TmFtZSx0LmZvbnRTdHlsZSkuaWQ7ZS5wdXNoKFwiL1R4IEJNQ1wiKSxlLnB1c2goXCJxXCIpLGUucHVzaChcIkJUXCIpLGUucHVzaCh0LnNjb3BlLl9fcHJpdmF0ZV9fLmVuY29kZUNvbG9yU3RyaW5nKHQuY29sb3IpKSxlLnB1c2goXCIvXCIraStcIiBcIitIKG4uZm9udFNpemUpK1wiIFRmXCIpLGUucHVzaChcIjEgMCAwIDEgMCAwIFRtXCIpLGUucHVzaChuLnRleHQpLGUucHVzaChcIkVUXCIpLGUucHVzaChcIlFcIiksZS5wdXNoKFwiRU1DXCIpO3ZhciBhPVkodCk7cmV0dXJuIGEuc2NvcGU9dC5zY29wZSxhLnN0cmVhbT1lLmpvaW4oXCJcXG5cIiksYX19LHJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9MD09PXQuZm9udFNpemU/dC5tYXhGb250U2l6ZTp0LmZvbnRTaXplLG49e3RleHQ6XCJcIixmb250U2l6ZTpcIlwifSxpPShlPVwiKVwiPT0oZT1cIihcIj09ZS5zdWJzdHIoMCwxKT9lLnN1YnN0cigxKTplKS5zdWJzdHIoZS5sZW5ndGgtMSk/ZS5zdWJzdHIoMCxlLmxlbmd0aC0xKTplKS5zcGxpdChcIiBcIik7aT10Lm11bHRpbGluZT9pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zcGxpdChcIlxcblwiKX0pOmkubWFwKGZ1bmN0aW9uKHQpe3JldHVyblt0XX0pO3ZhciBhPXIsbz1BdC5pbnRlcm5hbC5nZXRIZWlnaHQodCl8fDA7bz1vPDA/LW86bzt2YXIgcz1BdC5pbnRlcm5hbC5nZXRXaWR0aCh0KXx8MDtzPXM8MD8tczpzO3ZhciB1PWZ1bmN0aW9uKGUscixuKXtpZihlKzE8aS5sZW5ndGgpe3ZhciBhPXIrXCIgXCIraVtlKzFdWzBdO3JldHVybiBudChhLHQsbikud2lkdGg8PXMtNH1yZXR1cm4hMX07YSsrO3Q6Zm9yKDthPjA7KXtlPVwiXCIsYS0tO3ZhciBjLGwsaD1udChcIjNcIix0LGEpLmhlaWdodCxmPXQubXVsdGlsaW5lP28tYTooby1oKS8yLGQ9Zis9MixwPTAsZz0wLG09MDtpZihhPD0wKXtlPVwiKC4uLikgVGpcXG5cIixlKz1cIiUgV2lkdGggb2YgVGV4dDogXCIrbnQoZSx0LGE9MTIpLndpZHRoK1wiLCBGaWVsZFdpZHRoOlwiK3MrXCJcXG5cIjticmVha31mb3IodmFyIHY9XCJcIixiPTAseT0wO3k8aS5sZW5ndGg7eSsrKWlmKGkuaGFzT3duUHJvcGVydHkoeSkpe3ZhciB3PSExO2lmKDEhPT1pW3ldLmxlbmd0aCYmbSE9PWlbeV0ubGVuZ3RoLTEpe2lmKChoKzIpKihiKzIpKzI+byljb250aW51ZSB0O3YrPWlbeV1bbV0sdz0hMCxnPXkseS0tfWVsc2V7dj1cIiBcIj09KHYrPWlbeV1bbV0rXCIgXCIpLnN1YnN0cih2Lmxlbmd0aC0xKT92LnN1YnN0cigwLHYubGVuZ3RoLTEpOnY7dmFyIE49cGFyc2VJbnQoeSksTD11KE4sdixhKSx4PXk+PWkubGVuZ3RoLTE7aWYoTCYmIXgpe3YrPVwiIFwiLG09MDtjb250aW51ZX1pZihMfHx4KXtpZih4KWc9TjtlbHNlIGlmKHQubXVsdGlsaW5lJiYoaCsyKSooYisyKSsyPm8pY29udGludWUgdH1lbHNle2lmKCF0Lm11bHRpbGluZSljb250aW51ZSB0O2lmKChoKzIpKihiKzIpKzI+byljb250aW51ZSB0O2c9Tn19Zm9yKHZhciBBPVwiXCIsUz1wO1M8PWc7UysrKXt2YXIgXz1pW1NdO2lmKHQubXVsdGlsaW5lKXtpZihTPT09Zyl7QSs9X1ttXStcIiBcIixtPShtKzEpJV8ubGVuZ3RoO2NvbnRpbnVlfWlmKFM9PT1wKXtBKz1fW18ubGVuZ3RoLTFdK1wiIFwiO2NvbnRpbnVlfX1BKz1fWzBdK1wiIFwifXN3aXRjaChBPVwiIFwiPT1BLnN1YnN0cihBLmxlbmd0aC0xKT9BLnN1YnN0cigwLEEubGVuZ3RoLTEpOkEsbD1udChBLHQsYSkud2lkdGgsdC50ZXh0QWxpZ24pe2Nhc2VcInJpZ2h0XCI6Yz1zLWwtMjticmVhaztjYXNlXCJjZW50ZXJcIjpjPShzLWwpLzI7YnJlYWs7ZGVmYXVsdDpjPTJ9ZSs9SChjKStcIiBcIitIKGQpK1wiIFRkXFxuXCIsZSs9XCIoXCIrVChBKStcIikgVGpcXG5cIixlKz0tSChjKStcIiAwIFRkXFxuXCIsZD0tKGErMiksbD0wLHA9dz9nOmcrMSxiKyssdj1cIlwifWJyZWFrfXJldHVybiBuLnRleHQ9ZSxuLmZvbnRTaXplPWEsbn0sbnQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuc2NvcGUuaW50ZXJuYWwuZ2V0Rm9udChlLmZvbnROYW1lLGUuZm9udFN0eWxlKSxpPWUuc2NvcGUuZ2V0U3RyaW5nVW5pdFdpZHRoKHQse2ZvbnQ6bixmb250U2l6ZTpwYXJzZUZsb2F0KHIpLGNoYXJTcGFjZTowfSkqcGFyc2VGbG9hdChyKTtyZXR1cm57aGVpZ2h0OmUuc2NvcGUuZ2V0U3RyaW5nVW5pdFdpZHRoKFwiM1wiLHtmb250Om4sZm9udFNpemU6cGFyc2VGbG9hdChyKSxjaGFyU3BhY2U6MH0pKnBhcnNlRmxvYXQocikqMS41LHdpZHRoOml9fSxpdD17ZmllbGRzOltdLHhGb3JtczpbXSxhY3JvRm9ybURpY3Rpb25hcnlSb290Om51bGwscHJpbnRlZE91dDohMSxpbnRlcm5hbDpudWxsLGlzSW5pdGlhbGl6ZWQ6ITF9LGF0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9e3R5cGU6XCJyZWZlcmVuY2VcIixvYmplY3Q6dH07dm9pZCAwPT09ZS5pbnRlcm5hbC5nZXRQYWdlSW5mbyh0LnBhZ2UpLnBhZ2VDb250ZXh0LmFubm90YXRpb25zLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZT09PXIudHlwZSYmdC5vYmplY3Q9PT1yLm9iamVjdH0pJiZlLmludGVybmFsLmdldFBhZ2VJbmZvKHQucGFnZSkucGFnZUNvbnRleHQuYW5ub3RhdGlvbnMucHVzaChyKX0sb3Q9ZnVuY3Rpb24oZSxyKXtpZihyLnNjb3BlPWUsdm9pZCAwIT09ZS5pbnRlcm5hbCYmKHZvaWQgMD09PWUuaW50ZXJuYWwuYWNyb2Zvcm1QbHVnaW58fCExPT09ZS5pbnRlcm5hbC5hY3JvZm9ybVBsdWdpbi5pc0luaXRpYWxpemVkKSl7aWYoZnQuRmllbGROdW09MCxlLmludGVybmFsLmFjcm9mb3JtUGx1Z2luPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaXQpKSxlLmludGVybmFsLmFjcm9mb3JtUGx1Z2luLmFjcm9Gb3JtRGljdGlvbmFyeVJvb3QpdGhyb3cgbmV3IEVycm9yKFwiRXhjZXB0aW9uIHdoaWxlIGNyZWF0aW5nIEFjcm9mb3JtRGljdGlvbmFyeVwiKTtEPWUuaW50ZXJuYWwuc2NhbGVGYWN0b3IsZS5pbnRlcm5hbC5hY3JvZm9ybVBsdWdpbi5hY3JvRm9ybURpY3Rpb25hcnlSb290PW5ldyBodCxlLmludGVybmFsLmFjcm9mb3JtUGx1Z2luLmFjcm9Gb3JtRGljdGlvbmFyeVJvb3Quc2NvcGU9ZSxlLmludGVybmFsLmFjcm9mb3JtUGx1Z2luLmFjcm9Gb3JtRGljdGlvbmFyeVJvb3QuX2V2ZW50SUQ9ZS5pbnRlcm5hbC5ldmVudHMuc3Vic2NyaWJlKFwicG9zdFB1dFJlc291cmNlc1wiLGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3QuaW50ZXJuYWwuZXZlbnRzLnVuc3Vic2NyaWJlKHQuaW50ZXJuYWwuYWNyb2Zvcm1QbHVnaW4uYWNyb0Zvcm1EaWN0aW9uYXJ5Um9vdC5fZXZlbnRJRCksZGVsZXRlIHQuaW50ZXJuYWwuYWNyb2Zvcm1QbHVnaW4uYWNyb0Zvcm1EaWN0aW9uYXJ5Um9vdC5fZXZlbnRJRCx0LmludGVybmFsLmFjcm9mb3JtUGx1Z2luLnByaW50ZWRPdXQ9ITB9KGUpfSksZS5pbnRlcm5hbC5ldmVudHMuc3Vic2NyaWJlKFwiYnVpbGREb2N1bWVudFwiLGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3QuaW50ZXJuYWwuYWNyb2Zvcm1QbHVnaW4uYWNyb0Zvcm1EaWN0aW9uYXJ5Um9vdC5vYmpJZD12b2lkIDA7dmFyIGU9dC5pbnRlcm5hbC5hY3JvZm9ybVBsdWdpbi5hY3JvRm9ybURpY3Rpb25hcnlSb290LkZpZWxkcztmb3IodmFyIHIgaW4gZSlpZihlLmhhc093blByb3BlcnR5KHIpKXt2YXIgbj1lW3JdO24ub2JqSWQ9dm9pZCAwLG4uaGFzQW5ub3RhdGlvbiYmYXQobix0KX19KGUpfSksZS5pbnRlcm5hbC5ldmVudHMuc3Vic2NyaWJlKFwicHV0Q2F0YWxvZ1wiLGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQuaW50ZXJuYWwuYWNyb2Zvcm1QbHVnaW4uYWNyb0Zvcm1EaWN0aW9uYXJ5Um9vdCl0aHJvdyBuZXcgRXJyb3IoXCJwdXRDYXRhbG9nQ2FsbGJhY2s6IFJvb3QgbWlzc2luZy5cIik7dC5pbnRlcm5hbC53cml0ZShcIi9BY3JvRm9ybSBcIit0LmludGVybmFsLmFjcm9mb3JtUGx1Z2luLmFjcm9Gb3JtRGljdGlvbmFyeVJvb3Qub2JqSWQrXCIgMCBSXCIpfShlKX0pLGUuaW50ZXJuYWwuZXZlbnRzLnN1YnNjcmliZShcInBvc3RQdXRQYWdlc1wiLGZ1bmN0aW9uKHIpeyFmdW5jdGlvbihlLHIpe3ZhciBuPSFlO2Zvcih2YXIgaSBpbiBlfHwoci5pbnRlcm5hbC5uZXdPYmplY3REZWZlcnJlZEJlZ2luKHIuaW50ZXJuYWwuYWNyb2Zvcm1QbHVnaW4uYWNyb0Zvcm1EaWN0aW9uYXJ5Um9vdC5vYmpJZCwhMCksci5pbnRlcm5hbC5hY3JvZm9ybVBsdWdpbi5hY3JvRm9ybURpY3Rpb25hcnlSb290LnB1dFN0cmVhbSgpKSxlPWV8fHIuaW50ZXJuYWwuYWNyb2Zvcm1QbHVnaW4uYWNyb0Zvcm1EaWN0aW9uYXJ5Um9vdC5LaWRzKWlmKGUuaGFzT3duUHJvcGVydHkoaSkpe3ZhciBhPWVbaV0sbz1bXSxzPWEuUmVjdDtpZihhLlJlY3QmJihhLlJlY3Q9dHQoYS5SZWN0LHIpKSxyLmludGVybmFsLm5ld09iamVjdERlZmVycmVkQmVnaW4oYS5vYmpJZCwhMCksYS5EQT1BdC5jcmVhdGVEZWZhdWx0QXBwZWFyYW5jZVN0cmVhbShhKSxcIm9iamVjdFwiPT09dChhKSYmXCJmdW5jdGlvblwiPT10eXBlb2YgYS5nZXRLZXlWYWx1ZUxpc3RGb3JTdHJlYW0mJihvPWEuZ2V0S2V5VmFsdWVMaXN0Rm9yU3RyZWFtKCkpLGEuUmVjdD1zLGEuaGFzQXBwZWFyYW5jZVN0cmVhbSYmIWEuYXBwZWFyYW5jZVN0cmVhbUNvbnRlbnQpe3ZhciB1PWV0KGEpO28ucHVzaCh7a2V5OlwiQVBcIix2YWx1ZTpcIjw8L04gXCIrdStcIj4+XCJ9KSxyLmludGVybmFsLmFjcm9mb3JtUGx1Z2luLnhGb3Jtcy5wdXNoKHUpfWlmKGEuYXBwZWFyYW5jZVN0cmVhbUNvbnRlbnQpe3ZhciBjPVwiXCI7Zm9yKHZhciBsIGluIGEuYXBwZWFyYW5jZVN0cmVhbUNvbnRlbnQpaWYoYS5hcHBlYXJhbmNlU3RyZWFtQ29udGVudC5oYXNPd25Qcm9wZXJ0eShsKSl7dmFyIGg9YS5hcHBlYXJhbmNlU3RyZWFtQ29udGVudFtsXTtpZihjKz1cIi9cIitsK1wiIFwiLGMrPVwiPDxcIixPYmplY3Qua2V5cyhoKS5sZW5ndGg+PTF8fEFycmF5LmlzQXJyYXkoaCkpe2Zvcih2YXIgaSBpbiBoKWlmKGguaGFzT3duUHJvcGVydHkoaSkpe3ZhciBmPWhbaV07XCJmdW5jdGlvblwiPT10eXBlb2YgZiYmKGY9Zi5jYWxsKHIsYSkpLGMrPVwiL1wiK2krXCIgXCIrZitcIiBcIixyLmludGVybmFsLmFjcm9mb3JtUGx1Z2luLnhGb3Jtcy5pbmRleE9mKGYpPj0wfHxyLmludGVybmFsLmFjcm9mb3JtUGx1Z2luLnhGb3Jtcy5wdXNoKGYpfX1lbHNlXCJmdW5jdGlvblwiPT10eXBlb2YoZj1oKSYmKGY9Zi5jYWxsKHIsYSkpLGMrPVwiL1wiK2krXCIgXCIrZixyLmludGVybmFsLmFjcm9mb3JtUGx1Z2luLnhGb3Jtcy5pbmRleE9mKGYpPj0wfHxyLmludGVybmFsLmFjcm9mb3JtUGx1Z2luLnhGb3Jtcy5wdXNoKGYpO2MrPVwiPj5cIn1vLnB1c2goe2tleTpcIkFQXCIsdmFsdWU6XCI8PFxcblwiK2MrXCI+PlwifSl9ci5pbnRlcm5hbC5wdXRTdHJlYW0oe2FkZGl0aW9uYWxLZXlWYWx1ZXM6byxvYmplY3RJZDphLm9iaklkfSksci5pbnRlcm5hbC5vdXQoXCJlbmRvYmpcIil9biYmZnVuY3Rpb24oZSxyKXtmb3IodmFyIG4gaW4gZSlpZihlLmhhc093blByb3BlcnR5KG4pKXt2YXIgaT1uLGE9ZVtuXTtyLmludGVybmFsLm5ld09iamVjdERlZmVycmVkQmVnaW4oYS5vYmpJZCwhMCksXCJvYmplY3RcIj09PXQoYSkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGEucHV0U3RyZWFtJiZhLnB1dFN0cmVhbSgpLGRlbGV0ZSBlW2ldfX0oci5pbnRlcm5hbC5hY3JvZm9ybVBsdWdpbi54Rm9ybXMscil9KHIsZSl9KSxlLmludGVybmFsLmFjcm9mb3JtUGx1Z2luLmlzSW5pdGlhbGl6ZWQ9ITB9fSxzdD1SLl9fYWNyb2Zvcm1fXy5hcnJheVRvUGRmQXJyYXk9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWZ1bmN0aW9uKHQpe3JldHVybiB0fTtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIGE9XCJbXCIsbz0wO288ZS5sZW5ndGg7bysrKXN3aXRjaCgwIT09byYmKGErPVwiIFwiKSx0KGVbb10pKXtjYXNlXCJib29sZWFuXCI6Y2FzZVwibnVtYmVyXCI6Y2FzZVwib2JqZWN0XCI6YSs9ZVtvXS50b1N0cmluZygpO2JyZWFrO2Nhc2VcInN0cmluZ1wiOlwiL1wiPT09ZVtvXS5zdWJzdHIoMCwxKT9hKz1cIi9cIitVKGVbb10uc3Vic3RyKDEpKToodm9pZCAwIT09ciYmbiYmKGk9bi5pbnRlcm5hbC5nZXRFbmNyeXB0b3IocikpLGErPVwiKFwiK1QoaShlW29dLnRvU3RyaW5nKCkpKStcIilcIil9cmV0dXJuIGErXCJdXCJ9dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8ganNQREYuX19hY3JvZm9ybV9fLmFycmF5VG9QZGZBcnJheVwiKX0sdXQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWZ1bmN0aW9uKHQpe3JldHVybiB0fTtyZXR1cm4gdm9pZCAwIT09ZSYmciYmKG49ci5pbnRlcm5hbC5nZXRFbmNyeXB0b3IoZSkpLCh0PXR8fFwiXCIpLnRvU3RyaW5nKCksXCIoXCIrVChuKHQpKStcIilcIn0sY3Q9ZnVuY3Rpb24oKXt0aGlzLl9vYmpJZD12b2lkIDAsdGhpcy5fc2NvcGU9dm9pZCAwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwib2JqSWRcIix7Z2V0OmZ1bmN0aW9uKCl7aWYodm9pZCAwPT09dGhpcy5fb2JqSWQpe2lmKHZvaWQgMD09PXRoaXMuc2NvcGUpcmV0dXJuO3RoaXMuX29iaklkPXRoaXMuc2NvcGUuaW50ZXJuYWwubmV3T2JqZWN0RGVmZXJyZWQoKX1yZXR1cm4gdGhpcy5fb2JqSWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9vYmpJZD10fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwic2NvcGVcIix7dmFsdWU6dGhpcy5fc2NvcGUsd3JpdGFibGU6ITB9KX07Y3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2JqSWQrXCIgMCBSXCJ9LGN0LnByb3RvdHlwZS5wdXRTdHJlYW09ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldEtleVZhbHVlTGlzdEZvclN0cmVhbSgpO3RoaXMuc2NvcGUuaW50ZXJuYWwucHV0U3RyZWFtKHtkYXRhOnRoaXMuc3RyZWFtLGFkZGl0aW9uYWxLZXlWYWx1ZXM6dCxvYmplY3RJZDp0aGlzLm9iaklkfSksdGhpcy5zY29wZS5pbnRlcm5hbC5vdXQoXCJlbmRvYmpcIil9LGN0LnByb3RvdHlwZS5nZXRLZXlWYWx1ZUxpc3RGb3JTdHJlYW09ZnVuY3Rpb24oKXt2YXIgdD1bXSxlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm5cImNvbnRlbnRcIiE9dCYmXCJhcHBlYXJhbmNlU3RyZWFtQ29udGVudFwiIT10JiZcInNjb3BlXCIhPXQmJlwib2JqSWRcIiE9dCYmXCJfXCIhPXQuc3Vic3RyaW5nKDAsMSl9KTtmb3IodmFyIHIgaW4gZSlpZighMT09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcyxlW3JdKS5jb25maWd1cmFibGUpe3ZhciBuPWVbcl0saT10aGlzW25dO2kmJihBcnJheS5pc0FycmF5KGkpP3QucHVzaCh7a2V5Om4sdmFsdWU6c3QoaSx0aGlzLm9iaklkLHRoaXMuc2NvcGUpfSk6aSBpbnN0YW5jZW9mIGN0PyhpLnNjb3BlPXRoaXMuc2NvcGUsdC5wdXNoKHtrZXk6bix2YWx1ZTppLm9iaklkK1wiIDAgUlwifSkpOlwiZnVuY3Rpb25cIiE9dHlwZW9mIGkmJnQucHVzaCh7a2V5Om4sdmFsdWU6aX0pKX1yZXR1cm4gdH07dmFyIGx0PWZ1bmN0aW9uKCl7Y3QuY2FsbCh0aGlzKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIlR5cGVcIix7dmFsdWU6XCIvWE9iamVjdFwiLGNvbmZpZ3VyYWJsZTohMSx3cml0YWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiU3VidHlwZVwiLHt2YWx1ZTpcIi9Gb3JtXCIsY29uZmlndXJhYmxlOiExLHdyaXRhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJGb3JtVHlwZVwiLHt2YWx1ZToxLGNvbmZpZ3VyYWJsZTohMSx3cml0YWJsZTohMH0pO3ZhciB0LGU9W107T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJCQm94XCIse2NvbmZpZ3VyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZX0sc2V0OmZ1bmN0aW9uKHQpe2U9dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIlJlc291cmNlc1wiLHt2YWx1ZTpcIjIgMCBSXCIsY29uZmlndXJhYmxlOiExLHdyaXRhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJzdHJlYW1cIix7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsc2V0OmZ1bmN0aW9uKGUpe3Q9ZS50cmltKCl9LGdldDpmdW5jdGlvbigpe3JldHVybiB0fHxudWxsfX0pfTtWKGx0LGN0KTt2YXIgaHQ9ZnVuY3Rpb24oKXtjdC5jYWxsKHRoaXMpO3ZhciB0LGU9W107T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJLaWRzXCIse2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLmxlbmd0aD4wP2U6dm9pZCAwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiRmllbGRzXCIse2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiBlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiREFcIix7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7aWYodCl7dmFyIGU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9O3JldHVybiB0aGlzLnNjb3BlJiYoZT10aGlzLnNjb3BlLmludGVybmFsLmdldEVuY3J5cHRvcih0aGlzLm9iaklkKSksXCIoXCIrVChlKHQpKStcIilcIn19LHNldDpmdW5jdGlvbihlKXt0PWV9fSl9O1YoaHQsY3QpO3ZhciBmdD1mdW5jdGlvbiB0KCl7Y3QuY2FsbCh0aGlzKTt2YXIgZT00O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiRlwiLHtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZX0sc2V0OmZ1bmN0aW9uKHQpe2lmKGlzTmFOKHQpKXRocm93IG5ldyBFcnJvcignSW52YWxpZCB2YWx1ZSBcIicrdCsnXCIgZm9yIGF0dHJpYnV0ZSBGIHN1cHBsaWVkLicpO2U9dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInNob3dXaGVuUHJpbnRlZFwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbihaKGUsMykpfSxzZXQ6ZnVuY3Rpb24odCl7ITA9PT1Cb29sZWFuKHQpP3RoaXMuRj0kKGUsMyk6dGhpcy5GPVEoZSwzKX19KTt2YXIgcj0wO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiRmZcIix7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHNldDpmdW5jdGlvbih0KXtpZihpc05hTih0KSl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdmFsdWUgXCInK3QrJ1wiIGZvciBhdHRyaWJ1dGUgRmYgc3VwcGxpZWQuJyk7cj10fX0pO3ZhciBuPVtdO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiUmVjdFwiLHtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtpZigwIT09bi5sZW5ndGgpcmV0dXJuIG59LHNldDpmdW5jdGlvbih0KXtuPXZvaWQgMCE9PXQ/dDpbXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInhcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIW58fGlzTmFOKG5bMF0pPzA6blswXX0sc2V0OmZ1bmN0aW9uKHQpe25bMF09dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInlcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIW58fGlzTmFOKG5bMV0pPzA6blsxXX0sc2V0OmZ1bmN0aW9uKHQpe25bMV09dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIndpZHRoXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiFufHxpc05hTihuWzJdKT8wOm5bMl19LHNldDpmdW5jdGlvbih0KXtuWzJdPXR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJoZWlnaHRcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIW58fGlzTmFOKG5bM10pPzA6blszXX0sc2V0OmZ1bmN0aW9uKHQpe25bM109dH19KTt2YXIgaT1cIlwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiRlRcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGl9LHNldDpmdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZVwiL0J0blwiOmNhc2VcIi9UeFwiOmNhc2VcIi9DaFwiOmNhc2VcIi9TaWdcIjppPXQ7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdmFsdWUgXCInK3QrJ1wiIGZvciBhdHRyaWJ1dGUgRlQgc3VwcGxpZWQuJyl9fX0pO3ZhciBhPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJUXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExLGdldDpmdW5jdGlvbigpe2lmKCFhfHxhLmxlbmd0aDwxKXtpZih0aGlzIGluc3RhbmNlb2Ygd3QpcmV0dXJuO2E9XCJGaWVsZE9iamVjdFwiK3QuRmllbGROdW0rK312YXIgZT1mdW5jdGlvbih0KXtyZXR1cm4gdH07cmV0dXJuIHRoaXMuc2NvcGUmJihlPXRoaXMuc2NvcGUuaW50ZXJuYWwuZ2V0RW5jcnlwdG9yKHRoaXMub2JqSWQpKSxcIihcIitUKGUoYSkpK1wiKVwifSxzZXQ6ZnVuY3Rpb24odCl7YT10LnRvU3RyaW5nKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJmaWVsZE5hbWVcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldDpmdW5jdGlvbih0KXthPXR9fSk7dmFyIG89XCJoZWx2ZXRpY2FcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImZvbnROYW1lXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvfSxzZXQ6ZnVuY3Rpb24odCl7bz10fX0pO3ZhciBzPVwibm9ybWFsXCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJmb250U3R5bGVcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHN9LHNldDpmdW5jdGlvbih0KXtzPXR9fSk7dmFyIHU9MDtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImZvbnRTaXplXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1fSxzZXQ6ZnVuY3Rpb24odCl7dT10fX0pO3ZhciBjPXZvaWQgMDtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIm1heEZvbnRTaXplXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1jPzUwL0Q6Y30sc2V0OmZ1bmN0aW9uKHQpe2M9dH19KTt2YXIgbD1cImJsYWNrXCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJjb2xvclwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbH0sc2V0OmZ1bmN0aW9uKHQpe2w9dH19KTt2YXIgaD1cIi9GMSAwIFRmIDAgZ1wiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiREFcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7aWYoISghaHx8dGhpcyBpbnN0YW5jZW9mIHd0fHx0aGlzIGluc3RhbmNlb2YgTHQpKXJldHVybiB1dChoLHRoaXMub2JqSWQsdGhpcy5zY29wZSl9LHNldDpmdW5jdGlvbih0KXt0PXQudG9TdHJpbmcoKSxoPXR9fSk7dmFyIGY9bnVsbDtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIkRWXCIse2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiExLGdldDpmdW5jdGlvbigpe2lmKGYpcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiB2dD09MD91dChmLHRoaXMub2JqSWQsdGhpcy5zY29wZSk6Zn0sc2V0OmZ1bmN0aW9uKHQpe3Q9dC50b1N0cmluZygpLGY9dGhpcyBpbnN0YW5jZW9mIHZ0PT0wP1wiKFwiPT09dC5zdWJzdHIoMCwxKT96KHQuc3Vic3RyKDEsdC5sZW5ndGgtMikpOnoodCk6dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImRlZmF1bHRWYWx1ZVwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHZ0PT0xP3ooZi5zdWJzdHIoMSxmLmxlbmd0aC0xKSk6Zn0sc2V0OmZ1bmN0aW9uKHQpe3Q9dC50b1N0cmluZygpLGY9dGhpcyBpbnN0YW5jZW9mIHZ0PT0xP1wiL1wiK1UodCk6dH19KTt2YXIgZD1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiX1ZcIix7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7aWYoZClyZXR1cm4gZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuVj10fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiVlwiLHtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtpZihkKXJldHVybiB0aGlzIGluc3RhbmNlb2YgdnQ9PTA/dXQoZCx0aGlzLm9iaklkLHRoaXMuc2NvcGUpOmR9LHNldDpmdW5jdGlvbih0KXt0PXQudG9TdHJpbmcoKSxkPXRoaXMgaW5zdGFuY2VvZiB2dD09MD9cIihcIj09PXQuc3Vic3RyKDAsMSk/eih0LnN1YnN0cigxLHQubGVuZ3RoLTIpKTp6KHQpOnR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJ2YWx1ZVwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHZ0PT0xP3ooZC5zdWJzdHIoMSxkLmxlbmd0aC0xKSk6ZH0sc2V0OmZ1bmN0aW9uKHQpe3Q9dC50b1N0cmluZygpLGQ9dGhpcyBpbnN0YW5jZW9mIHZ0PT0xP1wiL1wiK1UodCk6dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImhhc0Fubm90YXRpb25cIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUmVjdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIlR5cGVcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzQW5ub3RhdGlvbj9cIi9Bbm5vdFwiOm51bGx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJTdWJ0eXBlXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc0Fubm90YXRpb24/XCIvV2lkZ2V0XCI6bnVsbH19KTt2YXIgcCxnPSExO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiaGFzQXBwZWFyYW5jZVN0cmVhbVwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ30sc2V0OmZ1bmN0aW9uKHQpe3Q9Qm9vbGVhbih0KSxnPXR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJwYWdlXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKHApcmV0dXJuIHB9LHNldDpmdW5jdGlvbih0KXtwPXR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJyZWFkT25seVwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbihaKHRoaXMuRmYsMSkpfSxzZXQ6ZnVuY3Rpb24odCl7ITA9PT1Cb29sZWFuKHQpP3RoaXMuRmY9JCh0aGlzLkZmLDEpOnRoaXMuRmY9USh0aGlzLkZmLDEpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicmVxdWlyZWRcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4oWih0aGlzLkZmLDIpKX0sc2V0OmZ1bmN0aW9uKHQpeyEwPT09Qm9vbGVhbih0KT90aGlzLkZmPSQodGhpcy5GZiwyKTp0aGlzLkZmPVEodGhpcy5GZiwyKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIm5vRXhwb3J0XCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKFoodGhpcy5GZiwzKSl9LHNldDpmdW5jdGlvbih0KXshMD09PUJvb2xlYW4odCk/dGhpcy5GZj0kKHRoaXMuRmYsMyk6dGhpcy5GZj1RKHRoaXMuRmYsMyl9fSk7dmFyIG09bnVsbDtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIlFcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7aWYobnVsbCE9PW0pcmV0dXJuIG19LHNldDpmdW5jdGlvbih0KXtpZigtMT09PVswLDEsMl0uaW5kZXhPZih0KSl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdmFsdWUgXCInK3QrJ1wiIGZvciBhdHRyaWJ1dGUgUSBzdXBwbGllZC4nKTttPXR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJ0ZXh0QWxpZ25cIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ7c3dpdGNoKG0pe2Nhc2UgMDpkZWZhdWx0OnQ9XCJsZWZ0XCI7YnJlYWs7Y2FzZSAxOnQ9XCJjZW50ZXJcIjticmVhaztjYXNlIDI6dD1cInJpZ2h0XCJ9cmV0dXJuIHR9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHNldDpmdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZVwicmlnaHRcIjpjYXNlIDI6bT0yO2JyZWFrO2Nhc2VcImNlbnRlclwiOmNhc2UgMTptPTE7YnJlYWs7ZGVmYXVsdDptPTB9fX0pfTtWKGZ0LGN0KTt2YXIgZHQ9ZnVuY3Rpb24oKXtmdC5jYWxsKHRoaXMpLHRoaXMuRlQ9XCIvQ2hcIix0aGlzLlY9XCIoKVwiLHRoaXMuZm9udE5hbWU9XCJ6YXBmZGluZ2JhdHNcIjt2YXIgdD0wO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiVElcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHR9LHNldDpmdW5jdGlvbihlKXt0PWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJ0b3BJbmRleFwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdH0sc2V0OmZ1bmN0aW9uKGUpe3Q9ZX19KTt2YXIgZT1bXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIk9wdFwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gc3QoZSx0aGlzLm9iaklkLHRoaXMuc2NvcGUpfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIHIsbjtuPVtdLFwic3RyaW5nXCI9PXR5cGVvZihyPXQpJiYobj1mdW5jdGlvbih0LGUscil7cnx8KHI9MSk7Zm9yKHZhciBuLGk9W107bj1lLmV4ZWModCk7KWkucHVzaChuW3JdKTtyZXR1cm4gaX0ociwvXFwoKC4qPylcXCkvZykpLGU9bn19KSx0aGlzLmdldE9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sdGhpcy5zZXRPcHRpb25zPWZ1bmN0aW9uKHQpe2U9dCx0aGlzLnNvcnQmJmUuc29ydCgpfSx0aGlzLmFkZE9wdGlvbj1mdW5jdGlvbih0KXt0PSh0PXR8fFwiXCIpLnRvU3RyaW5nKCksZS5wdXNoKHQpLHRoaXMuc29ydCYmZS5zb3J0KCl9LHRoaXMucmVtb3ZlT3B0aW9uPWZ1bmN0aW9uKHQscil7Zm9yKHI9cnx8ITEsdD0odD10fHxcIlwiKS50b1N0cmluZygpOy0xIT09ZS5pbmRleE9mKHQpJiYoZS5zcGxpY2UoZS5pbmRleE9mKHQpLDEpLCExIT09cik7KTt9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiY29tYm9cIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4oWih0aGlzLkZmLDE4KSl9LHNldDpmdW5jdGlvbih0KXshMD09PUJvb2xlYW4odCk/dGhpcy5GZj0kKHRoaXMuRmYsMTgpOnRoaXMuRmY9USh0aGlzLkZmLDE4KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImVkaXRcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4oWih0aGlzLkZmLDE5KSl9LHNldDpmdW5jdGlvbih0KXshMD09PXRoaXMuY29tYm8mJighMD09PUJvb2xlYW4odCk/dGhpcy5GZj0kKHRoaXMuRmYsMTkpOnRoaXMuRmY9USh0aGlzLkZmLDE5KSl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJzb3J0XCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKFoodGhpcy5GZiwyMCkpfSxzZXQ6ZnVuY3Rpb24odCl7ITA9PT1Cb29sZWFuKHQpPyh0aGlzLkZmPSQodGhpcy5GZiwyMCksZS5zb3J0KCkpOnRoaXMuRmY9USh0aGlzLkZmLDIwKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIm11bHRpU2VsZWN0XCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKFoodGhpcy5GZiwyMikpfSxzZXQ6ZnVuY3Rpb24odCl7ITA9PT1Cb29sZWFuKHQpP3RoaXMuRmY9JCh0aGlzLkZmLDIyKTp0aGlzLkZmPVEodGhpcy5GZiwyMil9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJkb05vdFNwZWxsQ2hlY2tcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4oWih0aGlzLkZmLDIzKSl9LHNldDpmdW5jdGlvbih0KXshMD09PUJvb2xlYW4odCk/dGhpcy5GZj0kKHRoaXMuRmYsMjMpOnRoaXMuRmY9USh0aGlzLkZmLDIzKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImNvbW1pdE9uU2VsQ2hhbmdlXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKFoodGhpcy5GZiwyNykpfSxzZXQ6ZnVuY3Rpb24odCl7ITA9PT1Cb29sZWFuKHQpP3RoaXMuRmY9JCh0aGlzLkZmLDI3KTp0aGlzLkZmPVEodGhpcy5GZiwyNyl9fSksdGhpcy5oYXNBcHBlYXJhbmNlU3RyZWFtPSExfTtWKGR0LGZ0KTt2YXIgcHQ9ZnVuY3Rpb24oKXtkdC5jYWxsKHRoaXMpLHRoaXMuZm9udE5hbWU9XCJoZWx2ZXRpY2FcIix0aGlzLmNvbWJvPSExfTtWKHB0LGR0KTt2YXIgZ3Q9ZnVuY3Rpb24oKXtwdC5jYWxsKHRoaXMpLHRoaXMuY29tYm89ITB9O1YoZ3QscHQpO3ZhciBtdD1mdW5jdGlvbigpe2d0LmNhbGwodGhpcyksdGhpcy5lZGl0PSEwfTtWKG10LGd0KTt2YXIgdnQ9ZnVuY3Rpb24oKXtmdC5jYWxsKHRoaXMpLHRoaXMuRlQ9XCIvQnRuXCIsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJub1RvZ2dsZVRvT2ZmXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKFoodGhpcy5GZiwxNSkpfSxzZXQ6ZnVuY3Rpb24odCl7ITA9PT1Cb29sZWFuKHQpP3RoaXMuRmY9JCh0aGlzLkZmLDE1KTp0aGlzLkZmPVEodGhpcy5GZiwxNSl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJyYWRpb1wiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbihaKHRoaXMuRmYsMTYpKX0sc2V0OmZ1bmN0aW9uKHQpeyEwPT09Qm9vbGVhbih0KT90aGlzLkZmPSQodGhpcy5GZiwxNik6dGhpcy5GZj1RKHRoaXMuRmYsMTYpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicHVzaEJ1dHRvblwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbihaKHRoaXMuRmYsMTcpKX0sc2V0OmZ1bmN0aW9uKHQpeyEwPT09Qm9vbGVhbih0KT90aGlzLkZmPSQodGhpcy5GZiwxNyk6dGhpcy5GZj1RKHRoaXMuRmYsMTcpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicmFkaW9Jc1VuaXNvblwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbihaKHRoaXMuRmYsMjYpKX0sc2V0OmZ1bmN0aW9uKHQpeyEwPT09Qm9vbGVhbih0KT90aGlzLkZmPSQodGhpcy5GZiwyNik6dGhpcy5GZj1RKHRoaXMuRmYsMjYpfX0pO3ZhciBlLHI9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJNS1wiLHtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0KXtyZXR1cm4gdH07aWYodGhpcy5zY29wZSYmKHQ9dGhpcy5zY29wZS5pbnRlcm5hbC5nZXRFbmNyeXB0b3IodGhpcy5vYmpJZCkpLDAhPT1PYmplY3Qua2V5cyhyKS5sZW5ndGgpe3ZhciBlLG49W107Zm9yKGUgaW4gbi5wdXNoKFwiPDxcIiksciluLnB1c2goXCIvXCIrZStcIiAoXCIrVCh0KHJbZV0pKStcIilcIik7cmV0dXJuIG4ucHVzaChcIj4+XCIpLG4uam9pbihcIlxcblwiKX19LHNldDpmdW5jdGlvbihlKXtcIm9iamVjdFwiPT09dChlKSYmKHI9ZSl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJjYXB0aW9uXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkNBfHxcIlwifSxzZXQ6ZnVuY3Rpb24odCl7XCJzdHJpbmdcIj09dHlwZW9mIHQmJihyLkNBPXQpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiQVNcIix7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGV9LHNldDpmdW5jdGlvbih0KXt2YXIgcj1udWxsPT10P1wiXCI6dC50b1N0cmluZygpO1wiL1wiPT09ci5zdWJzdHIoMCwxKSYmKHI9ci5zdWJzdHIoMSkpLGU9XCIvXCIrVShyKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImFwcGVhcmFuY2VTdGF0ZVwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zdWJzdHIoMSxlLmxlbmd0aC0xKX0sc2V0OmZ1bmN0aW9uKHQpe2U9XCIvXCIrVSh0KX19KX07Vih2dCxmdCk7dmFyIGJ0PWZ1bmN0aW9uKCl7dnQuY2FsbCh0aGlzKSx0aGlzLnB1c2hCdXR0b249ITB9O1YoYnQsdnQpO3ZhciB5dD1mdW5jdGlvbigpe3Z0LmNhbGwodGhpcyksdGhpcy5yYWRpbz0hMCx0aGlzLnB1c2hCdXR0b249ITE7dmFyIHQ9W107T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJLaWRzXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0fSxzZXQ6ZnVuY3Rpb24oZSl7dD12b2lkIDAhPT1lP2U6W119fSl9O1YoeXQsdnQpO3ZhciB3dD1mdW5jdGlvbigpe3ZhciBlLHI7ZnQuY2FsbCh0aGlzKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIlBhcmVudFwiLHtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZX0sc2V0OmZ1bmN0aW9uKHQpe2U9dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIm9wdGlvbk5hbWVcIix7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHNldDpmdW5jdGlvbih0KXtyPXR9fSk7dmFyIG4saT17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIk1LXCIse2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQpe3JldHVybiB0fTt0aGlzLnNjb3BlJiYodD10aGlzLnNjb3BlLmludGVybmFsLmdldEVuY3J5cHRvcih0aGlzLm9iaklkKSk7dmFyIGUscj1bXTtmb3IoZSBpbiByLnB1c2goXCI8PFwiKSxpKXIucHVzaChcIi9cIitlK1wiIChcIitUKHQoaVtlXSkpK1wiKVwiKTtyZXR1cm4gci5wdXNoKFwiPj5cIiksci5qb2luKFwiXFxuXCIpfSxzZXQ6ZnVuY3Rpb24oZSl7XCJvYmplY3RcIj09PXQoZSkmJihpPWUpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiY2FwdGlvblwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5DQXx8XCJcIn0sc2V0OmZ1bmN0aW9uKHQpe1wic3RyaW5nXCI9PXR5cGVvZiB0JiYoaS5DQT10KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIkFTXCIse2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiBufSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9bnVsbD09dD9cIlwiOnQudG9TdHJpbmcoKTtcIi9cIj09PWUuc3Vic3RyKDAsMSkmJihlPWUuc3Vic3RyKDEpKSxuPVwiL1wiK1UoZSl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJhcHBlYXJhbmNlU3RhdGVcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uc3Vic3RyKDEsbi5sZW5ndGgtMSl9LHNldDpmdW5jdGlvbih0KXt2YXIgZT1udWxsPT10P1wiXCI6dC50b1N0cmluZygpO1wiL1wiPT09ZS5zdWJzdHIoMCwxKSYmKGU9ZS5zdWJzdHIoMSkpLG49XCIvXCIrVShlKX19KSx0aGlzLmNhcHRpb249XCJsXCIsdGhpcy5hcHBlYXJhbmNlU3RhdGU9XCJPZmZcIix0aGlzLl9BcHBlYXJhbmNlVHlwZT1BdC5SYWRpb0J1dHRvbi5DaXJjbGUsdGhpcy5hcHBlYXJhbmNlU3RyZWFtQ29udGVudD10aGlzLl9BcHBlYXJhbmNlVHlwZS5jcmVhdGVBcHBlYXJhbmNlU3RyZWFtKHRoaXMub3B0aW9uTmFtZSl9O1Yod3QsZnQpLHl0LnByb3RvdHlwZS5zZXRBcHBlYXJhbmNlPWZ1bmN0aW9uKHQpe2lmKCEoXCJjcmVhdGVBcHBlYXJhbmNlU3RyZWFtXCJpbiB0KXx8IShcImdldENBXCJpbiB0KSl0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBhc3NpZ24gQXBwZWFyYW5jZSB0byBSYWRpb0J1dHRvbi4gQXBwZWFyYW5jZSB3YXMgSW52YWxpZCFcIik7Zm9yKHZhciBlIGluIHRoaXMuS2lkcylpZih0aGlzLktpZHMuaGFzT3duUHJvcGVydHkoZSkpe3ZhciByPXRoaXMuS2lkc1tlXTtyLmFwcGVhcmFuY2VTdHJlYW1Db250ZW50PXQuY3JlYXRlQXBwZWFyYW5jZVN0cmVhbShyLm9wdGlvbk5hbWUpLHIuY2FwdGlvbj10LmdldENBKCl9fSx5dC5wcm90b3R5cGUuY3JlYXRlT3B0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB3dDtyZXR1cm4gZS5QYXJlbnQ9dGhpcyxlLm9wdGlvbk5hbWU9dCx0aGlzLktpZHMucHVzaChlKSxTdC5jYWxsKHRoaXMuc2NvcGUsZSksZX07dmFyIE50PWZ1bmN0aW9uKCl7dnQuY2FsbCh0aGlzKSx0aGlzLmZvbnROYW1lPVwiemFwZmRpbmdiYXRzXCIsdGhpcy5jYXB0aW9uPVwiM1wiLHRoaXMuYXBwZWFyYW5jZVN0YXRlPVwiT25cIix0aGlzLnZhbHVlPVwiT25cIix0aGlzLnRleHRBbGlnbj1cImNlbnRlclwiLHRoaXMuYXBwZWFyYW5jZVN0cmVhbUNvbnRlbnQ9QXQuQ2hlY2tCb3guY3JlYXRlQXBwZWFyYW5jZVN0cmVhbSgpfTtWKE50LHZ0KTt2YXIgTHQ9ZnVuY3Rpb24oKXtmdC5jYWxsKHRoaXMpLHRoaXMuRlQ9XCIvVHhcIixPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIm11bHRpbGluZVwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbihaKHRoaXMuRmYsMTMpKX0sc2V0OmZ1bmN0aW9uKHQpeyEwPT09Qm9vbGVhbih0KT90aGlzLkZmPSQodGhpcy5GZiwxMyk6dGhpcy5GZj1RKHRoaXMuRmYsMTMpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiZmlsZVNlbGVjdFwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbihaKHRoaXMuRmYsMjEpKX0sc2V0OmZ1bmN0aW9uKHQpeyEwPT09Qm9vbGVhbih0KT90aGlzLkZmPSQodGhpcy5GZiwyMSk6dGhpcy5GZj1RKHRoaXMuRmYsMjEpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiZG9Ob3RTcGVsbENoZWNrXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKFoodGhpcy5GZiwyMykpfSxzZXQ6ZnVuY3Rpb24odCl7ITA9PT1Cb29sZWFuKHQpP3RoaXMuRmY9JCh0aGlzLkZmLDIzKTp0aGlzLkZmPVEodGhpcy5GZiwyMyl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJkb05vdFNjcm9sbFwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbihaKHRoaXMuRmYsMjQpKX0sc2V0OmZ1bmN0aW9uKHQpeyEwPT09Qm9vbGVhbih0KT90aGlzLkZmPSQodGhpcy5GZiwyNCk6dGhpcy5GZj1RKHRoaXMuRmYsMjQpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiY29tYlwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbihaKHRoaXMuRmYsMjUpKX0sc2V0OmZ1bmN0aW9uKHQpeyEwPT09Qm9vbGVhbih0KT90aGlzLkZmPSQodGhpcy5GZiwyNSk6dGhpcy5GZj1RKHRoaXMuRmYsMjUpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicmljaFRleHRcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4oWih0aGlzLkZmLDI2KSl9LHNldDpmdW5jdGlvbih0KXshMD09PUJvb2xlYW4odCk/dGhpcy5GZj0kKHRoaXMuRmYsMjYpOnRoaXMuRmY9USh0aGlzLkZmLDI2KX19KTt2YXIgdD1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiTWF4TGVuXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0fSxzZXQ6ZnVuY3Rpb24oZSl7dD1lfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwibWF4TGVuZ3RoXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0fSxzZXQ6ZnVuY3Rpb24oZSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKHQ9ZSl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJoYXNBcHBlYXJhbmNlU3RyZWFtXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLlZ8fHRoaXMuRFZ9fSl9O1YoTHQsZnQpO3ZhciB4dD1mdW5jdGlvbigpe0x0LmNhbGwodGhpcyksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJwYXNzd29yZFwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbihaKHRoaXMuRmYsMTQpKX0sc2V0OmZ1bmN0aW9uKHQpeyEwPT09Qm9vbGVhbih0KT90aGlzLkZmPSQodGhpcy5GZiwxNCk6dGhpcy5GZj1RKHRoaXMuRmYsMTQpfX0pLHRoaXMucGFzc3dvcmQ9ITB9O1YoeHQsTHQpO3ZhciBBdD17Q2hlY2tCb3g6e2NyZWF0ZUFwcGVhcmFuY2VTdHJlYW06ZnVuY3Rpb24oKXtyZXR1cm57Tjp7T246QXQuQ2hlY2tCb3guWWVzTm9ybWFsfSxEOntPbjpBdC5DaGVja0JveC5ZZXNQdXNoRG93bixPZmY6QXQuQ2hlY2tCb3guT2ZmUHVzaERvd259fX0sWWVzUHVzaERvd246ZnVuY3Rpb24odCl7dmFyIGU9WSh0KTtlLnNjb3BlPXQuc2NvcGU7dmFyIHI9W10sbj10LnNjb3BlLmludGVybmFsLmdldEZvbnQodC5mb250TmFtZSx0LmZvbnRTdHlsZSkuaWQsaT10LnNjb3BlLl9fcHJpdmF0ZV9fLmVuY29kZUNvbG9yU3RyaW5nKHQuY29sb3IpLGE9cnQodCx0LmNhcHRpb24pO3JldHVybiByLnB1c2goXCIwLjc0OTAyMyBnXCIpLHIucHVzaChcIjAgMCBcIitIKEF0LmludGVybmFsLmdldFdpZHRoKHQpKStcIiBcIitIKEF0LmludGVybmFsLmdldEhlaWdodCh0KSkrXCIgcmVcIiksci5wdXNoKFwiZlwiKSxyLnB1c2goXCJCTUNcIiksci5wdXNoKFwicVwiKSxyLnB1c2goXCIwIDAgMSByZ1wiKSxyLnB1c2goXCIvXCIrbitcIiBcIitIKGEuZm9udFNpemUpK1wiIFRmIFwiK2kpLHIucHVzaChcIkJUXCIpLHIucHVzaChhLnRleHQpLHIucHVzaChcIkVUXCIpLHIucHVzaChcIlFcIiksci5wdXNoKFwiRU1DXCIpLGUuc3RyZWFtPXIuam9pbihcIlxcblwiKSxlfSxZZXNOb3JtYWw6ZnVuY3Rpb24odCl7dmFyIGU9WSh0KTtlLnNjb3BlPXQuc2NvcGU7dmFyIHI9dC5zY29wZS5pbnRlcm5hbC5nZXRGb250KHQuZm9udE5hbWUsdC5mb250U3R5bGUpLmlkLG49dC5zY29wZS5fX3ByaXZhdGVfXy5lbmNvZGVDb2xvclN0cmluZyh0LmNvbG9yKSxpPVtdLGE9QXQuaW50ZXJuYWwuZ2V0SGVpZ2h0KHQpLG89QXQuaW50ZXJuYWwuZ2V0V2lkdGgodCkscz1ydCh0LHQuY2FwdGlvbik7cmV0dXJuIGkucHVzaChcIjEgZ1wiKSxpLnB1c2goXCIwIDAgXCIrSChvKStcIiBcIitIKGEpK1wiIHJlXCIpLGkucHVzaChcImZcIiksaS5wdXNoKFwicVwiKSxpLnB1c2goXCIwIDAgMSByZ1wiKSxpLnB1c2goXCIwIDAgXCIrSChvLTEpK1wiIFwiK0goYS0xKStcIiByZVwiKSxpLnB1c2goXCJXXCIpLGkucHVzaChcIm5cIiksaS5wdXNoKFwiMCBnXCIpLGkucHVzaChcIkJUXCIpLGkucHVzaChcIi9cIityK1wiIFwiK0gocy5mb250U2l6ZSkrXCIgVGYgXCIrbiksaS5wdXNoKHMudGV4dCksaS5wdXNoKFwiRVRcIiksaS5wdXNoKFwiUVwiKSxlLnN0cmVhbT1pLmpvaW4oXCJcXG5cIiksZX0sT2ZmUHVzaERvd246ZnVuY3Rpb24odCl7dmFyIGU9WSh0KTtlLnNjb3BlPXQuc2NvcGU7dmFyIHI9W107cmV0dXJuIHIucHVzaChcIjAuNzQ5MDIzIGdcIiksci5wdXNoKFwiMCAwIFwiK0goQXQuaW50ZXJuYWwuZ2V0V2lkdGgodCkpK1wiIFwiK0goQXQuaW50ZXJuYWwuZ2V0SGVpZ2h0KHQpKStcIiByZVwiKSxyLnB1c2goXCJmXCIpLGUuc3RyZWFtPXIuam9pbihcIlxcblwiKSxlfX0sUmFkaW9CdXR0b246e0NpcmNsZTp7Y3JlYXRlQXBwZWFyYW5jZVN0cmVhbTpmdW5jdGlvbih0KXt2YXIgZT17RDp7T2ZmOkF0LlJhZGlvQnV0dG9uLkNpcmNsZS5PZmZQdXNoRG93bn0sTjp7fX07cmV0dXJuIGUuTlt0XT1BdC5SYWRpb0J1dHRvbi5DaXJjbGUuWWVzTm9ybWFsLGUuRFt0XT1BdC5SYWRpb0J1dHRvbi5DaXJjbGUuWWVzUHVzaERvd24sZX0sZ2V0Q0E6ZnVuY3Rpb24oKXtyZXR1cm5cImxcIn0sWWVzTm9ybWFsOmZ1bmN0aW9uKHQpe3ZhciBlPVkodCk7ZS5zY29wZT10LnNjb3BlO3ZhciByPVtdLG49QXQuaW50ZXJuYWwuZ2V0V2lkdGgodCk8PUF0LmludGVybmFsLmdldEhlaWdodCh0KT9BdC5pbnRlcm5hbC5nZXRXaWR0aCh0KS80OkF0LmludGVybmFsLmdldEhlaWdodCh0KS80O249TnVtYmVyKCguOSpuKS50b0ZpeGVkKDUpKTt2YXIgaT1BdC5pbnRlcm5hbC5CZXppZXJfQyxhPU51bWJlcigobippKS50b0ZpeGVkKDUpKTtyZXR1cm4gci5wdXNoKFwicVwiKSxyLnB1c2goXCIxIDAgMCAxIFwiK1coQXQuaW50ZXJuYWwuZ2V0V2lkdGgodCkvMikrXCIgXCIrVyhBdC5pbnRlcm5hbC5nZXRIZWlnaHQodCkvMikrXCIgY21cIiksci5wdXNoKG4rXCIgMCBtXCIpLHIucHVzaChuK1wiIFwiK2ErXCIgXCIrYStcIiBcIituK1wiIDAgXCIrbitcIiBjXCIpLHIucHVzaChcIi1cIithK1wiIFwiK24rXCIgLVwiK24rXCIgXCIrYStcIiAtXCIrbitcIiAwIGNcIiksci5wdXNoKFwiLVwiK24rXCIgLVwiK2ErXCIgLVwiK2ErXCIgLVwiK24rXCIgMCAtXCIrbitcIiBjXCIpLHIucHVzaChhK1wiIC1cIituK1wiIFwiK24rXCIgLVwiK2ErXCIgXCIrbitcIiAwIGNcIiksci5wdXNoKFwiZlwiKSxyLnB1c2goXCJRXCIpLGUuc3RyZWFtPXIuam9pbihcIlxcblwiKSxlfSxZZXNQdXNoRG93bjpmdW5jdGlvbih0KXt2YXIgZT1ZKHQpO2Uuc2NvcGU9dC5zY29wZTt2YXIgcj1bXSxuPUF0LmludGVybmFsLmdldFdpZHRoKHQpPD1BdC5pbnRlcm5hbC5nZXRIZWlnaHQodCk/QXQuaW50ZXJuYWwuZ2V0V2lkdGgodCkvNDpBdC5pbnRlcm5hbC5nZXRIZWlnaHQodCkvNDtuPU51bWJlcigoLjkqbikudG9GaXhlZCg1KSk7dmFyIGk9TnVtYmVyKCgyKm4pLnRvRml4ZWQoNSkpLGE9TnVtYmVyKChpKkF0LmludGVybmFsLkJlemllcl9DKS50b0ZpeGVkKDUpKSxvPU51bWJlcigobipBdC5pbnRlcm5hbC5CZXppZXJfQykudG9GaXhlZCg1KSk7cmV0dXJuIHIucHVzaChcIjAuNzQ5MDIzIGdcIiksci5wdXNoKFwicVwiKSxyLnB1c2goXCIxIDAgMCAxIFwiK1coQXQuaW50ZXJuYWwuZ2V0V2lkdGgodCkvMikrXCIgXCIrVyhBdC5pbnRlcm5hbC5nZXRIZWlnaHQodCkvMikrXCIgY21cIiksci5wdXNoKGkrXCIgMCBtXCIpLHIucHVzaChpK1wiIFwiK2ErXCIgXCIrYStcIiBcIitpK1wiIDAgXCIraStcIiBjXCIpLHIucHVzaChcIi1cIithK1wiIFwiK2krXCIgLVwiK2krXCIgXCIrYStcIiAtXCIraStcIiAwIGNcIiksci5wdXNoKFwiLVwiK2krXCIgLVwiK2ErXCIgLVwiK2ErXCIgLVwiK2krXCIgMCAtXCIraStcIiBjXCIpLHIucHVzaChhK1wiIC1cIitpK1wiIFwiK2krXCIgLVwiK2ErXCIgXCIraStcIiAwIGNcIiksci5wdXNoKFwiZlwiKSxyLnB1c2goXCJRXCIpLHIucHVzaChcIjAgZ1wiKSxyLnB1c2goXCJxXCIpLHIucHVzaChcIjEgMCAwIDEgXCIrVyhBdC5pbnRlcm5hbC5nZXRXaWR0aCh0KS8yKStcIiBcIitXKEF0LmludGVybmFsLmdldEhlaWdodCh0KS8yKStcIiBjbVwiKSxyLnB1c2gobitcIiAwIG1cIiksci5wdXNoKG4rXCIgXCIrbytcIiBcIitvK1wiIFwiK24rXCIgMCBcIituK1wiIGNcIiksci5wdXNoKFwiLVwiK28rXCIgXCIrbitcIiAtXCIrbitcIiBcIitvK1wiIC1cIituK1wiIDAgY1wiKSxyLnB1c2goXCItXCIrbitcIiAtXCIrbytcIiAtXCIrbytcIiAtXCIrbitcIiAwIC1cIituK1wiIGNcIiksci5wdXNoKG8rXCIgLVwiK24rXCIgXCIrbitcIiAtXCIrbytcIiBcIituK1wiIDAgY1wiKSxyLnB1c2goXCJmXCIpLHIucHVzaChcIlFcIiksZS5zdHJlYW09ci5qb2luKFwiXFxuXCIpLGV9LE9mZlB1c2hEb3duOmZ1bmN0aW9uKHQpe3ZhciBlPVkodCk7ZS5zY29wZT10LnNjb3BlO3ZhciByPVtdLG49QXQuaW50ZXJuYWwuZ2V0V2lkdGgodCk8PUF0LmludGVybmFsLmdldEhlaWdodCh0KT9BdC5pbnRlcm5hbC5nZXRXaWR0aCh0KS80OkF0LmludGVybmFsLmdldEhlaWdodCh0KS80O249TnVtYmVyKCguOSpuKS50b0ZpeGVkKDUpKTt2YXIgaT1OdW1iZXIoKDIqbikudG9GaXhlZCg1KSksYT1OdW1iZXIoKGkqQXQuaW50ZXJuYWwuQmV6aWVyX0MpLnRvRml4ZWQoNSkpO3JldHVybiByLnB1c2goXCIwLjc0OTAyMyBnXCIpLHIucHVzaChcInFcIiksci5wdXNoKFwiMSAwIDAgMSBcIitXKEF0LmludGVybmFsLmdldFdpZHRoKHQpLzIpK1wiIFwiK1coQXQuaW50ZXJuYWwuZ2V0SGVpZ2h0KHQpLzIpK1wiIGNtXCIpLHIucHVzaChpK1wiIDAgbVwiKSxyLnB1c2goaStcIiBcIithK1wiIFwiK2ErXCIgXCIraStcIiAwIFwiK2krXCIgY1wiKSxyLnB1c2goXCItXCIrYStcIiBcIitpK1wiIC1cIitpK1wiIFwiK2ErXCIgLVwiK2krXCIgMCBjXCIpLHIucHVzaChcIi1cIitpK1wiIC1cIithK1wiIC1cIithK1wiIC1cIitpK1wiIDAgLVwiK2krXCIgY1wiKSxyLnB1c2goYStcIiAtXCIraStcIiBcIitpK1wiIC1cIithK1wiIFwiK2krXCIgMCBjXCIpLHIucHVzaChcImZcIiksci5wdXNoKFwiUVwiKSxlLnN0cmVhbT1yLmpvaW4oXCJcXG5cIiksZX19LENyb3NzOntjcmVhdGVBcHBlYXJhbmNlU3RyZWFtOmZ1bmN0aW9uKHQpe3ZhciBlPXtEOntPZmY6QXQuUmFkaW9CdXR0b24uQ3Jvc3MuT2ZmUHVzaERvd259LE46e319O3JldHVybiBlLk5bdF09QXQuUmFkaW9CdXR0b24uQ3Jvc3MuWWVzTm9ybWFsLGUuRFt0XT1BdC5SYWRpb0J1dHRvbi5Dcm9zcy5ZZXNQdXNoRG93bixlfSxnZXRDQTpmdW5jdGlvbigpe3JldHVyblwiOFwifSxZZXNOb3JtYWw6ZnVuY3Rpb24odCl7dmFyIGU9WSh0KTtlLnNjb3BlPXQuc2NvcGU7dmFyIHI9W10sbj1BdC5pbnRlcm5hbC5jYWxjdWxhdGVDcm9zcyh0KTtyZXR1cm4gci5wdXNoKFwicVwiKSxyLnB1c2goXCIxIDEgXCIrSChBdC5pbnRlcm5hbC5nZXRXaWR0aCh0KS0yKStcIiBcIitIKEF0LmludGVybmFsLmdldEhlaWdodCh0KS0yKStcIiByZVwiKSxyLnB1c2goXCJXXCIpLHIucHVzaChcIm5cIiksci5wdXNoKEgobi54MS54KStcIiBcIitIKG4ueDEueSkrXCIgbVwiKSxyLnB1c2goSChuLngyLngpK1wiIFwiK0gobi54Mi55KStcIiBsXCIpLHIucHVzaChIKG4ueDQueCkrXCIgXCIrSChuLng0LnkpK1wiIG1cIiksci5wdXNoKEgobi54My54KStcIiBcIitIKG4ueDMueSkrXCIgbFwiKSxyLnB1c2goXCJzXCIpLHIucHVzaChcIlFcIiksZS5zdHJlYW09ci5qb2luKFwiXFxuXCIpLGV9LFllc1B1c2hEb3duOmZ1bmN0aW9uKHQpe3ZhciBlPVkodCk7ZS5zY29wZT10LnNjb3BlO3ZhciByPUF0LmludGVybmFsLmNhbGN1bGF0ZUNyb3NzKHQpLG49W107cmV0dXJuIG4ucHVzaChcIjAuNzQ5MDIzIGdcIiksbi5wdXNoKFwiMCAwIFwiK0goQXQuaW50ZXJuYWwuZ2V0V2lkdGgodCkpK1wiIFwiK0goQXQuaW50ZXJuYWwuZ2V0SGVpZ2h0KHQpKStcIiByZVwiKSxuLnB1c2goXCJmXCIpLG4ucHVzaChcInFcIiksbi5wdXNoKFwiMSAxIFwiK0goQXQuaW50ZXJuYWwuZ2V0V2lkdGgodCktMikrXCIgXCIrSChBdC5pbnRlcm5hbC5nZXRIZWlnaHQodCktMikrXCIgcmVcIiksbi5wdXNoKFwiV1wiKSxuLnB1c2goXCJuXCIpLG4ucHVzaChIKHIueDEueCkrXCIgXCIrSChyLngxLnkpK1wiIG1cIiksbi5wdXNoKEgoci54Mi54KStcIiBcIitIKHIueDIueSkrXCIgbFwiKSxuLnB1c2goSChyLng0LngpK1wiIFwiK0goci54NC55KStcIiBtXCIpLG4ucHVzaChIKHIueDMueCkrXCIgXCIrSChyLngzLnkpK1wiIGxcIiksbi5wdXNoKFwic1wiKSxuLnB1c2goXCJRXCIpLGUuc3RyZWFtPW4uam9pbihcIlxcblwiKSxlfSxPZmZQdXNoRG93bjpmdW5jdGlvbih0KXt2YXIgZT1ZKHQpO2Uuc2NvcGU9dC5zY29wZTt2YXIgcj1bXTtyZXR1cm4gci5wdXNoKFwiMC43NDkwMjMgZ1wiKSxyLnB1c2goXCIwIDAgXCIrSChBdC5pbnRlcm5hbC5nZXRXaWR0aCh0KSkrXCIgXCIrSChBdC5pbnRlcm5hbC5nZXRIZWlnaHQodCkpK1wiIHJlXCIpLHIucHVzaChcImZcIiksZS5zdHJlYW09ci5qb2luKFwiXFxuXCIpLGV9fX0sY3JlYXRlRGVmYXVsdEFwcGVhcmFuY2VTdHJlYW06ZnVuY3Rpb24odCl7dmFyIGU9dC5zY29wZS5pbnRlcm5hbC5nZXRGb250KHQuZm9udE5hbWUsdC5mb250U3R5bGUpLmlkLHI9dC5zY29wZS5fX3ByaXZhdGVfXy5lbmNvZGVDb2xvclN0cmluZyh0LmNvbG9yKTtyZXR1cm5cIi9cIitlK1wiIFwiK3QuZm9udFNpemUrXCIgVGYgXCIrcn19O0F0LmludGVybmFsPXtCZXppZXJfQzouNTUxOTE1MDI0NDk0LGNhbGN1bGF0ZUNyb3NzOmZ1bmN0aW9uKHQpe3ZhciBlPUF0LmludGVybmFsLmdldFdpZHRoKHQpLHI9QXQuaW50ZXJuYWwuZ2V0SGVpZ2h0KHQpLG49TWF0aC5taW4oZSxyKTtyZXR1cm57eDE6e3g6KGUtbikvMix5OihyLW4pLzIrbn0seDI6e3g6KGUtbikvMituLHk6KHItbikvMn0seDM6e3g6KGUtbikvMix5OihyLW4pLzJ9LHg0Ont4OihlLW4pLzIrbix5OihyLW4pLzIrbn19fX0sQXQuaW50ZXJuYWwuZ2V0V2lkdGg9ZnVuY3Rpb24oZSl7dmFyIHI9MDtyZXR1cm5cIm9iamVjdFwiPT09dChlKSYmKHI9RyhlLlJlY3RbMl0pKSxyfSxBdC5pbnRlcm5hbC5nZXRIZWlnaHQ9ZnVuY3Rpb24oZSl7dmFyIHI9MDtyZXR1cm5cIm9iamVjdFwiPT09dChlKSYmKHI9RyhlLlJlY3RbM10pKSxyfTt2YXIgU3Q9Ui5hZGRGaWVsZD1mdW5jdGlvbih0KXtpZihvdCh0aGlzLHQpLCEodCBpbnN0YW5jZW9mIGZ0KSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBqc1BERi5hZGRGaWVsZC5cIik7dmFyIGU7cmV0dXJuKGU9dCkuc2NvcGUuaW50ZXJuYWwuYWNyb2Zvcm1QbHVnaW4ucHJpbnRlZE91dCYmKGUuc2NvcGUuaW50ZXJuYWwuYWNyb2Zvcm1QbHVnaW4ucHJpbnRlZE91dD0hMSxlLnNjb3BlLmludGVybmFsLmFjcm9mb3JtUGx1Z2luLmFjcm9Gb3JtRGljdGlvbmFyeVJvb3Q9bnVsbCksZS5zY29wZS5pbnRlcm5hbC5hY3JvZm9ybVBsdWdpbi5hY3JvRm9ybURpY3Rpb25hcnlSb290LkZpZWxkcy5wdXNoKGUpLHQucGFnZT10LnNjb3BlLmludGVybmFsLmdldEN1cnJlbnRQYWdlSW5mbygpLnBhZ2VOdW1iZXIsdGhpc307Ui5BY3JvRm9ybUNob2ljZUZpZWxkPWR0LFIuQWNyb0Zvcm1MaXN0Qm94PXB0LFIuQWNyb0Zvcm1Db21ib0JveD1ndCxSLkFjcm9Gb3JtRWRpdEJveD1tdCxSLkFjcm9Gb3JtQnV0dG9uPXZ0LFIuQWNyb0Zvcm1QdXNoQnV0dG9uPWJ0LFIuQWNyb0Zvcm1SYWRpb0J1dHRvbj15dCxSLkFjcm9Gb3JtQ2hlY2tCb3g9TnQsUi5BY3JvRm9ybVRleHRGaWVsZD1MdCxSLkFjcm9Gb3JtUGFzc3dvcmRGaWVsZD14dCxSLkFjcm9Gb3JtQXBwZWFyYW5jZT1BdCxSLkFjcm9Gb3JtPXtDaG9pY2VGaWVsZDpkdCxMaXN0Qm94OnB0LENvbWJvQm94Omd0LEVkaXRCb3g6bXQsQnV0dG9uOnZ0LFB1c2hCdXR0b246YnQsUmFkaW9CdXR0b246eXQsQ2hlY2tCb3g6TnQsVGV4dEZpZWxkOkx0LFBhc3N3b3JkRmllbGQ6eHQsQXBwZWFyYW5jZTpBdH0sRS5BY3JvRm9ybT17Q2hvaWNlRmllbGQ6ZHQsTGlzdEJveDpwdCxDb21ib0JveDpndCxFZGl0Qm94Om10LEJ1dHRvbjp2dCxQdXNoQnV0dG9uOmJ0LFJhZGlvQnV0dG9uOnl0LENoZWNrQm94Ok50LFRleHRGaWVsZDpMdCxQYXNzd29yZEZpZWxkOnh0LEFwcGVhcmFuY2U6QXR9O3ZhciBfdD1FLkFjcm9Gb3JtO2Z1bmN0aW9uIFB0KHQpe3JldHVybiB0LnJlZHVjZShmdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cix0fSx7fSl9IWZ1bmN0aW9uKGUpe3ZhciByPVwiYWRkSW1hZ2VfXCI7ZS5fX2FkZGltYWdlX189e307dmFyIG49XCJVTktOT1dOXCIsaT17UE5HOltbMTM3LDgwLDc4LDcxXV0sVElGRjpbWzc3LDc3LDAsNDJdLFs3Myw3Myw0MiwwXV0sSlBFRzpbWzI1NSwyMTYsMjU1LDIyNCx2b2lkIDAsdm9pZCAwLDc0LDcwLDczLDcwLDBdLFsyNTUsMjE2LDI1NSwyMjUsdm9pZCAwLHZvaWQgMCw2OSwxMjAsMTA1LDEwMiwwLDBdLFsyNTUsMjE2LDI1NSwyMTldLFsyNTUsMjE2LDI1NSwyMzhdXSxKUEVHMjAwMDpbWzAsMCwwLDEyLDEwNiw4MCwzMiwzMl1dLEdJRjg3YTpbWzcxLDczLDcwLDU2LDU1LDk3XV0sR0lGODlhOltbNzEsNzMsNzAsNTYsNTcsOTddXSxXRUJQOltbODIsNzMsNzAsNzAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLDg3LDY5LDY2LDgwXV0sQk1QOltbNjYsNzddLFs2Niw2NV0sWzY3LDczXSxbNjcsODBdLFs3Myw2N10sWzgwLDg0XV19LGE9ZS5fX2FkZGltYWdlX18uZ2V0SW1hZ2VGaWxlVHlwZUJ5SW1hZ2VEYXRhPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHMsdSxjPW47aWYoXCJSR0JBXCI9PT0oZT1lfHxuKXx8dm9pZCAwIT09dC5kYXRhJiZ0LmRhdGEgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSYmXCJoZWlnaHRcImluIHQmJlwid2lkdGhcImluIHQpcmV0dXJuXCJSR0JBXCI7aWYoQSh0KSlmb3IodSBpbiBpKWZvcihvPWlbdV0scj0wO3I8by5sZW5ndGg7cis9MSl7Zm9yKHM9ITAsYT0wO2E8b1tyXS5sZW5ndGg7YSs9MSlpZih2b2lkIDAhPT1vW3JdW2FdJiZvW3JdW2FdIT09dFthXSl7cz0hMTticmVha31pZighMD09PXMpe2M9dTticmVha319ZWxzZSBmb3IodSBpbiBpKWZvcihvPWlbdV0scj0wO3I8by5sZW5ndGg7cis9MSl7Zm9yKHM9ITAsYT0wO2E8b1tyXS5sZW5ndGg7YSs9MSlpZih2b2lkIDAhPT1vW3JdW2FdJiZvW3JdW2FdIT09dC5jaGFyQ29kZUF0KGEpKXtzPSExO2JyZWFrfWlmKCEwPT09cyl7Yz11O2JyZWFrfX1yZXR1cm4gYz09PW4mJmUhPT1uJiYoYz1lKSxjfSxvPWZ1bmN0aW9uIHQoZSl7Zm9yKHZhciByPXRoaXMuaW50ZXJuYWwud3JpdGUsbj10aGlzLmludGVybmFsLnB1dFN0cmVhbSxpPSgwLHRoaXMuaW50ZXJuYWwuZ2V0RmlsdGVycykoKTstMSE9PWkuaW5kZXhPZihcIkZsYXRlRW5jb2RlXCIpOylpLnNwbGljZShpLmluZGV4T2YoXCJGbGF0ZUVuY29kZVwiKSwxKTtlLm9iamVjdElkPXRoaXMuaW50ZXJuYWwubmV3T2JqZWN0KCk7dmFyIGE9W107aWYoYS5wdXNoKHtrZXk6XCJUeXBlXCIsdmFsdWU6XCIvWE9iamVjdFwifSksYS5wdXNoKHtrZXk6XCJTdWJ0eXBlXCIsdmFsdWU6XCIvSW1hZ2VcIn0pLGEucHVzaCh7a2V5OlwiV2lkdGhcIix2YWx1ZTplLndpZHRofSksYS5wdXNoKHtrZXk6XCJIZWlnaHRcIix2YWx1ZTplLmhlaWdodH0pLGUuY29sb3JTcGFjZT09PXkuSU5ERVhFRD9hLnB1c2goe2tleTpcIkNvbG9yU3BhY2VcIix2YWx1ZTpcIlsvSW5kZXhlZCAvRGV2aWNlUkdCIFwiKyhlLnBhbGV0dGUubGVuZ3RoLzMtMSkrXCIgXCIrKFwic01hc2tcImluIGUmJnZvaWQgMCE9PWUuc01hc2s/ZS5vYmplY3RJZCsyOmUub2JqZWN0SWQrMSkrXCIgMCBSXVwifSk6KGEucHVzaCh7a2V5OlwiQ29sb3JTcGFjZVwiLHZhbHVlOlwiL1wiK2UuY29sb3JTcGFjZX0pLGUuY29sb3JTcGFjZT09PXkuREVWSUNFX0NNWUsmJmEucHVzaCh7a2V5OlwiRGVjb2RlXCIsdmFsdWU6XCJbMSAwIDEgMCAxIDAgMSAwXVwifSkpLGEucHVzaCh7a2V5OlwiQml0c1BlckNvbXBvbmVudFwiLHZhbHVlOmUuYml0c1BlckNvbXBvbmVudH0pLFwiZGVjb2RlUGFyYW1ldGVyc1wiaW4gZSYmdm9pZCAwIT09ZS5kZWNvZGVQYXJhbWV0ZXJzJiZhLnB1c2goe2tleTpcIkRlY29kZVBhcm1zXCIsdmFsdWU6XCI8PFwiK2UuZGVjb2RlUGFyYW1ldGVycytcIj4+XCJ9KSxcInRyYW5zcGFyZW5jeVwiaW4gZSYmQXJyYXkuaXNBcnJheShlLnRyYW5zcGFyZW5jeSkmJmUudHJhbnNwYXJlbmN5Lmxlbmd0aD4wKXtmb3IodmFyIG89XCJcIixzPTAsdT1lLnRyYW5zcGFyZW5jeS5sZW5ndGg7czx1O3MrKylvKz1lLnRyYW5zcGFyZW5jeVtzXStcIiBcIitlLnRyYW5zcGFyZW5jeVtzXStcIiBcIjthLnB1c2goe2tleTpcIk1hc2tcIix2YWx1ZTpcIltcIitvK1wiXVwifSl9dm9pZCAwIT09ZS5zTWFzayYmYS5wdXNoKHtrZXk6XCJTTWFza1wiLHZhbHVlOmUub2JqZWN0SWQrMStcIiAwIFJcIn0pO3ZhciBjPXZvaWQgMCE9PWUuZmlsdGVyP1tcIi9cIitlLmZpbHRlcl06dm9pZCAwO2lmKG4oe2RhdGE6ZS5kYXRhLGFkZGl0aW9uYWxLZXlWYWx1ZXM6YSxhbHJlYWR5QXBwbGllZEZpbHRlcnM6YyxvYmplY3RJZDplLm9iamVjdElkfSkscihcImVuZG9ialwiKSxcInNNYXNrXCJpbiBlJiZ2b2lkIDAhPT1lLnNNYXNrKXt2YXIgbCxoPW51bGwhPT0obD1lLnNNYXNrQml0c1BlckNvbXBvbmVudCkmJnZvaWQgMCE9PWw/bDplLmJpdHNQZXJDb21wb25lbnQsZj17d2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHQsY29sb3JTcGFjZTpcIkRldmljZUdyYXlcIixiaXRzUGVyQ29tcG9uZW50OmgsZGF0YTplLnNNYXNrfTtcImZpbHRlclwiaW4gZSYmKGYuZGVjb2RlUGFyYW1ldGVycz1cIi9QcmVkaWN0b3IgXCIuY29uY2F0KGUucHJlZGljdG9yLFwiIC9Db2xvcnMgMSAvQml0c1BlckNvbXBvbmVudCBcIikuY29uY2F0KGgsXCIgL0NvbHVtbnMgXCIpLmNvbmNhdChlLndpZHRoKSxmLmZpbHRlcj1lLmZpbHRlciksdC5jYWxsKHRoaXMsZil9aWYoZS5jb2xvclNwYWNlPT09eS5JTkRFWEVEKXt2YXIgZD10aGlzLmludGVybmFsLm5ld09iamVjdCgpO24oe2RhdGE6XyhuZXcgVWludDhBcnJheShlLnBhbGV0dGUpKSxvYmplY3RJZDpkfSkscihcImVuZG9ialwiKX19LHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmludGVybmFsLmNvbGxlY3Rpb25zW3IrXCJpbWFnZXNcIl07Zm9yKHZhciBlIGluIHQpby5jYWxsKHRoaXMsdFtlXSl9LHU9ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMuaW50ZXJuYWwuY29sbGVjdGlvbnNbcitcImltYWdlc1wiXSxuPXRoaXMuaW50ZXJuYWwud3JpdGU7Zm9yKHZhciBpIGluIGUpbihcIi9JXCIrKHQ9ZVtpXSkuaW5kZXgsdC5vYmplY3RJZCxcIjBcIixcIlJcIil9LGM9ZnVuY3Rpb24oKXt0aGlzLmludGVybmFsLmNvbGxlY3Rpb25zW3IrXCJpbWFnZXNcIl18fCh0aGlzLmludGVybmFsLmNvbGxlY3Rpb25zW3IrXCJpbWFnZXNcIl09e30sdGhpcy5pbnRlcm5hbC5ldmVudHMuc3Vic2NyaWJlKFwicHV0UmVzb3VyY2VzXCIscyksdGhpcy5pbnRlcm5hbC5ldmVudHMuc3Vic2NyaWJlKFwicHV0WG9iamVjdERpY3RcIix1KSl9LGw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmludGVybmFsLmNvbGxlY3Rpb25zW3IrXCJpbWFnZXNcIl07cmV0dXJuIGMuY2FsbCh0aGlzKSx0fSxoPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuaW50ZXJuYWwuY29sbGVjdGlvbnNbcitcImltYWdlc1wiXSkubGVuZ3RofSxkPWZ1bmN0aW9uKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGVbXCJwcm9jZXNzXCIrdC50b1VwcGVyQ2FzZSgpXX0scD1mdW5jdGlvbihlKXtyZXR1cm5cIm9iamVjdFwiPT09dChlKSYmMT09PWUubm9kZVR5cGV9LGc9ZnVuY3Rpb24odCxyKXtpZihcIklNR1wiPT09dC5ub2RlTmFtZSYmdC5oYXNBdHRyaWJ1dGUoXCJzcmNcIikpe3ZhciBuPVwiXCIrdC5nZXRBdHRyaWJ1dGUoXCJzcmNcIik7aWYoMD09PW4uaW5kZXhPZihcImRhdGE6aW1hZ2UvXCIpKXJldHVybiBmKHVuZXNjYXBlKG4pLnNwbGl0KFwiYmFzZTY0LFwiKS5wb3AoKSk7dmFyIGk9ZS5sb2FkRmlsZShuLCEwKTtpZih2b2lkIDAhPT1pKXJldHVybiBpfWlmKFwiQ0FOVkFTXCI9PT10Lm5vZGVOYW1lKXtpZigwPT09dC53aWR0aHx8MD09PXQuaGVpZ2h0KXRocm93IG5ldyBFcnJvcihcIkdpdmVuIGNhbnZhcyBtdXN0IGhhdmUgZGF0YS4gQ2FudmFzIHdpZHRoOiBcIit0LndpZHRoK1wiLCBoZWlnaHQ6IFwiK3QuaGVpZ2h0KTt2YXIgYTtzd2l0Y2gocil7Y2FzZVwiUE5HXCI6YT1cImltYWdlL3BuZ1wiO2JyZWFrO2Nhc2VcIldFQlBcIjphPVwiaW1hZ2Uvd2VicFwiO2JyZWFrO2RlZmF1bHQ6YT1cImltYWdlL2pwZWdcIn1yZXR1cm4gZih0LnRvRGF0YVVSTChhLDEpLnNwbGl0KFwiYmFzZTY0LFwiKS5wb3AoKSl9fSxtPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW50ZXJuYWwuY29sbGVjdGlvbnNbcitcImltYWdlc1wiXTtpZihlKWZvcih2YXIgbiBpbiBlKWlmKHQ9PT1lW25dLmFsaWFzKXJldHVybiBlW25dfSx2PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdHx8ZXx8KHQ9LTk2LGU9LTk2KSx0PDAmJih0PS0xKnIud2lkdGgqNzIvdC90aGlzLmludGVybmFsLnNjYWxlRmFjdG9yKSxlPDAmJihlPS0xKnIuaGVpZ2h0KjcyL2UvdGhpcy5pbnRlcm5hbC5zY2FsZUZhY3RvciksMD09PXQmJih0PWUqci53aWR0aC9yLmhlaWdodCksMD09PWUmJihlPXQqci5oZWlnaHQvci53aWR0aCksW3QsZV19LGI9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXYuY2FsbCh0aGlzLHIsbixpKSxzPXRoaXMuaW50ZXJuYWwuZ2V0Q29vcmRpbmF0ZVN0cmluZyx1PXRoaXMuaW50ZXJuYWwuZ2V0VmVydGljYWxDb29yZGluYXRlU3RyaW5nLGM9bC5jYWxsKHRoaXMpO2lmKHI9b1swXSxuPW9bMV0sY1tpLmluZGV4XT1pLGEpe2EqPU1hdGguUEkvMTgwO3ZhciBoPU1hdGguY29zKGEpLGY9TWF0aC5zaW4oYSksZD1mdW5jdGlvbih0KXtyZXR1cm4gdC50b0ZpeGVkKDQpfSxwPVtkKGgpLGQoZiksZCgtMSpmKSxkKGgpLDAsMCxcImNtXCJdfXRoaXMuaW50ZXJuYWwud3JpdGUoXCJxXCIpLGE/KHRoaXMuaW50ZXJuYWwud3JpdGUoWzEsXCIwXCIsXCIwXCIsMSxzKHQpLHUoZStuKSxcImNtXCJdLmpvaW4oXCIgXCIpKSx0aGlzLmludGVybmFsLndyaXRlKHAuam9pbihcIiBcIikpLHRoaXMuaW50ZXJuYWwud3JpdGUoW3MociksXCIwXCIsXCIwXCIscyhuKSxcIjBcIixcIjBcIixcImNtXCJdLmpvaW4oXCIgXCIpKSk6dGhpcy5pbnRlcm5hbC53cml0ZShbcyhyKSxcIjBcIixcIjBcIixzKG4pLHModCksdShlK24pLFwiY21cIl0uam9pbihcIiBcIikpLHRoaXMuaXNBZHZhbmNlZEFQSSgpJiZ0aGlzLmludGVybmFsLndyaXRlKFsxLDAsMCwtMSwwLDAsXCJjbVwiXS5qb2luKFwiIFwiKSksdGhpcy5pbnRlcm5hbC53cml0ZShcIi9JXCIraS5pbmRleCtcIiBEb1wiKSx0aGlzLmludGVybmFsLndyaXRlKFwiUVwiKX0seT1lLmNvbG9yX3NwYWNlcz17REVWSUNFX1JHQjpcIkRldmljZVJHQlwiLERFVklDRV9HUkFZOlwiRGV2aWNlR3JheVwiLERFVklDRV9DTVlLOlwiRGV2aWNlQ01ZS1wiLENBTF9HUkVZOlwiQ2FsR3JheVwiLENBTF9SR0I6XCJDYWxSR0JcIixMQUI6XCJMYWJcIixJQ0NfQkFTRUQ6XCJJQ0NCYXNlZFwiLElOREVYRUQ6XCJJbmRleGVkXCIsUEFUVEVSTjpcIlBhdHRlcm5cIixTRVBBUkFUSU9OOlwiU2VwYXJhdGlvblwiLERFVklDRV9OOlwiRGV2aWNlTlwifTtlLmRlY29kZT17RENUX0RFQ09ERTpcIkRDVERlY29kZVwiLEZMQVRFX0RFQ09ERTpcIkZsYXRlRGVjb2RlXCIsTFpXX0RFQ09ERTpcIkxaV0RlY29kZVwiLEpQWF9ERUNPREU6XCJKUFhEZWNvZGVcIixKQklHMl9ERUNPREU6XCJKQklHMkRlY29kZVwiLEFTQ0lJODVfREVDT0RFOlwiQVNDSUk4NURlY29kZVwiLEFTQ0lJX0hFWF9ERUNPREU6XCJBU0NJSUhleERlY29kZVwiLFJVTl9MRU5HVEhfREVDT0RFOlwiUnVuTGVuZ3RoRGVjb2RlXCIsQ0NJVFRfRkFYX0RFQ09ERTpcIkNDSVRURmF4RGVjb2RlXCJ9O3ZhciB3PWUuaW1hZ2VfY29tcHJlc3Npb249e05PTkU6XCJOT05FXCIsRkFTVDpcIkZBU1RcIixNRURJVU06XCJNRURJVU1cIixTTE9XOlwiU0xPV1wifSxOPWUuX19hZGRpbWFnZV9fLnNIYXNoQ29kZT1mdW5jdGlvbih0KXt2YXIgZSxyLG49MDtpZihcInN0cmluZ1wiPT10eXBlb2YgdClmb3Iocj10Lmxlbmd0aCxlPTA7ZTxyO2UrKyluPShuPDw1KS1uK3QuY2hhckNvZGVBdChlKSxufD0wO2Vsc2UgaWYoQSh0KSlmb3Iocj10LmJ5dGVMZW5ndGgvMixlPTA7ZTxyO2UrKyluPShuPDw1KS1uK3RbZV0sbnw9MDtyZXR1cm4gbn0sTD1lLl9fYWRkaW1hZ2VfXy52YWxpZGF0ZVN0cmluZ0FzQmFzZTY0PWZ1bmN0aW9uKHQpeyh0PXR8fFwiXCIpLnRvU3RyaW5nKCkudHJpbSgpO3ZhciBlPSEwO3JldHVybiAwPT09dC5sZW5ndGgmJihlPSExKSx0Lmxlbmd0aCU0IT0wJiYoZT0hMSksITE9PT0vXltBLVphLXowLTkrL10rJC8udGVzdCh0LnN1YnN0cigwLHQubGVuZ3RoLTIpKSYmKGU9ITEpLCExPT09L15bQS1aYS16MC05L11bQS1aYS16MC05Ky9dfFtBLVphLXowLTkrL109fD09JC8udGVzdCh0LnN1YnN0cigtMikpJiYoZT0hMSksZX0seD1lLl9fYWRkaW1hZ2VfXy5leHRyYWN0SW1hZ2VGcm9tRGF0YVVybD1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiBudWxsO2lmKCEodD10LnRyaW0oKSkuc3RhcnRzV2l0aChcImRhdGE6XCIpKXJldHVybiBudWxsO3ZhciBlPXQuaW5kZXhPZihcIixcIik7cmV0dXJuIGU8MD9udWxsOnQuc3Vic3RyaW5nKDAsZSkudHJpbSgpLmVuZHNXaXRoKFwiYmFzZTY0XCIpP3Quc3Vic3RyaW5nKGUrMSk6bnVsbH07ZS5fX2FkZGltYWdlX18uaXNBcnJheUJ1ZmZlcj1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfTt2YXIgQT1lLl9fYWRkaW1hZ2VfXy5pc0FycmF5QnVmZmVyVmlldz1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEludDhBcnJheXx8dCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheXx8dCBpbnN0YW5jZW9mIEludDE2QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50MTZBcnJheXx8dCBpbnN0YW5jZW9mIEludDMyQXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50MzJBcnJheXx8dCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheXx8dCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheX0sUz1lLl9fYWRkaW1hZ2VfXy5iaW5hcnlTdHJpbmdUb1VpbnQ4QXJyYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IFVpbnQ4QXJyYXkoZSksbj0wO248ZTtuKyspcltuXT10LmNoYXJDb2RlQXQobik7cmV0dXJuIHJ9LF89ZS5fX2FkZGltYWdlX18uYXJyYXlCdWZmZXJUb0JpbmFyeVN0cmluZz1mdW5jdGlvbih0KXtmb3IodmFyIGU9XCJcIixyPUEodCk/dDpuZXcgVWludDhBcnJheSh0KSxuPTA7bjxyLmxlbmd0aDtuKz04MTkyKWUrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxyLnN1YmFycmF5KG4sbis4MTkyKSk7cmV0dXJuIGV9O2UuYWRkSW1hZ2U9ZnVuY3Rpb24oKXt2YXIgZSxyLGksYSxvLHMsdSxsLGg7aWYoXCJudW1iZXJcIj09dHlwZW9mIGFyZ3VtZW50c1sxXT8ocj1uLGk9YXJndW1lbnRzWzFdLGE9YXJndW1lbnRzWzJdLG89YXJndW1lbnRzWzNdLHM9YXJndW1lbnRzWzRdLHU9YXJndW1lbnRzWzVdLGw9YXJndW1lbnRzWzZdLGg9YXJndW1lbnRzWzddKToocj1hcmd1bWVudHNbMV0saT1hcmd1bWVudHNbMl0sYT1hcmd1bWVudHNbM10sbz1hcmd1bWVudHNbNF0scz1hcmd1bWVudHNbNV0sdT1hcmd1bWVudHNbNl0sbD1hcmd1bWVudHNbN10saD1hcmd1bWVudHNbOF0pLFwib2JqZWN0XCI9PT10KGU9YXJndW1lbnRzWzBdKSYmIXAoZSkmJlwiaW1hZ2VEYXRhXCJpbiBlKXt2YXIgZj1lO2U9Zi5pbWFnZURhdGEscj1mLmZvcm1hdHx8cnx8bixpPWYueHx8aXx8MCxhPWYueXx8YXx8MCxvPWYud3x8Zi53aWR0aHx8byxzPWYuaHx8Zi5oZWlnaHR8fHMsdT1mLmFsaWFzfHx1LGw9Zi5jb21wcmVzc2lvbnx8bCxoPWYucm90YXRpb258fGYuYW5nbGV8fGh9dmFyIGQ9dGhpcy5pbnRlcm5hbC5nZXRGaWx0ZXJzKCk7aWYodm9pZCAwPT09bCYmLTEhPT1kLmluZGV4T2YoXCJGbGF0ZUVuY29kZVwiKSYmKGw9XCJTTE9XXCIpLGlzTmFOKGkpfHxpc05hTihhKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvb3JkaW5hdGVzIHBhc3NlZCB0byBqc1BERi5hZGRJbWFnZVwiKTtjLmNhbGwodGhpcyk7dmFyIGc9UC5jYWxsKHRoaXMsZSxyLHUsbCk7cmV0dXJuIGIuY2FsbCh0aGlzLGksYSxvLHMsZyxoKSx0aGlzfTt2YXIgUD1mdW5jdGlvbih0LHIsaSxvKXt2YXIgcyx1LGM7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJmEodCk9PT1uKXt0PXVuZXNjYXBlKHQpO3ZhciBsPWsodCwhMSk7KFwiXCIhPT1sfHx2b2lkIDAhPT0obD1lLmxvYWRGaWxlKHQsITApKSkmJih0PWwpfWlmKHAodCkmJih0PWcodCxyKSkscj1hKHQsciksIWQocikpdGhyb3cgbmV3IEVycm9yKFwiYWRkSW1hZ2UgZG9lcyBub3Qgc3VwcG9ydCBmaWxlcyBvZiB0eXBlICdcIityK1wiJywgcGxlYXNlIGVuc3VyZSB0aGF0IGEgcGx1Z2luIGZvciAnXCIrcitcIicgc3VwcG9ydCBpcyBhZGRlZC5cIik7aWYoKG51bGw9PShjPWkpfHwwPT09Yy5sZW5ndGgpJiYoaT1mdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdHx8QSh0KT9OKHQpOkEodC5kYXRhKT9OKHQuZGF0YSk6bnVsbH0odCkpLChzPW0uY2FsbCh0aGlzLGkpKXx8KHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxcIlJHQkFcIj09PXJ8fCh1PXQsdD1TKHQpKSxzPXRoaXNbXCJwcm9jZXNzXCIrci50b1VwcGVyQ2FzZSgpXSh0LGguY2FsbCh0aGlzKSxpLGZ1bmN0aW9uKHQpe3JldHVybiB0JiZcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9dC50b1VwcGVyQ2FzZSgpKSx0IGluIGUuaW1hZ2VfY29tcHJlc3Npb24/dDp3Lk5PTkV9KG8pLHUpKSwhcyl0aHJvdyBuZXcgRXJyb3IoXCJBbiB1bmtub3duIGVycm9yIG9jY3VycmVkIHdoaWxzdCBwcm9jZXNzaW5nIHRoZSBpbWFnZS5cIik7cmV0dXJuIHN9LGs9ZS5fX2FkZGltYWdlX18uY29udmVydEJhc2U2NFRvQmluYXJ5U3RyaW5nPWZ1bmN0aW9uKHQsZSl7ZT1cImJvb2xlYW5cIiE9dHlwZW9mIGV8fGU7dmFyIHIsbj1cIlwiO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXt2YXIgaTtyPW51bGwhPT0oaT14KHQpKSYmdm9pZCAwIT09aT9pOnQ7dHJ5e249ZihyKX1jYXRjaChhKXtpZihlKXRocm93IEwocik/bmV3IEVycm9yKFwiYXRvYi1FcnJvciBpbiBqc1BERi5jb252ZXJ0QmFzZTY0VG9CaW5hcnlTdHJpbmcgXCIrYS5tZXNzYWdlKTpuZXcgRXJyb3IoXCJTdXBwbGllZCBEYXRhIGlzIG5vdCBhIHZhbGlkIGJhc2U2NC1TdHJpbmcganNQREYuY29udmVydEJhc2U2NFRvQmluYXJ5U3RyaW5nIFwiKX19cmV0dXJuIG59O2UuZ2V0SW1hZ2VQcm9wZXJ0aWVzPWZ1bmN0aW9uKHQpe3ZhciByLGksbz1cIlwiO2lmKHAodCkmJih0PWcodCkpLFwic3RyaW5nXCI9PXR5cGVvZiB0JiZhKHQpPT09biYmKFwiXCI9PT0obz1rKHQsITEpKSYmKG89ZS5sb2FkRmlsZSh0KXx8XCJcIiksdD1vKSxpPWEodCksIWQoaSkpdGhyb3cgbmV3IEVycm9yKFwiYWRkSW1hZ2UgZG9lcyBub3Qgc3VwcG9ydCBmaWxlcyBvZiB0eXBlICdcIitpK1wiJywgcGxlYXNlIGVuc3VyZSB0aGF0IGEgcGx1Z2luIGZvciAnXCIraStcIicgc3VwcG9ydCBpcyBhZGRlZC5cIik7aWYodCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fCh0PVModCkpLCEocj10aGlzW1wicHJvY2Vzc1wiK2kudG9VcHBlckNhc2UoKV0odCkpKXRocm93IG5ldyBFcnJvcihcIkFuIHVua25vd24gZXJyb3Igb2NjdXJyZWQgd2hpbHN0IHByb2Nlc3NpbmcgdGhlIGltYWdlXCIpO3JldHVybiByLmZpbGVUeXBlPWkscn19KEUuQVBJKSxcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNCBTdGV2ZW4gU3B1bmdpbiAoVHdlbHZlVG9uZSBMTEMpICBzdGV2ZW5AdHdlbHZldG9uZS50dlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZVxuICovXG5mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXtpZih2b2lkIDAhPT10JiZcIlwiIT10KXJldHVybiEwfTtFLkFQSS5ldmVudHMucHVzaChbXCJhZGRQYWdlXCIsZnVuY3Rpb24odCl7dGhpcy5pbnRlcm5hbC5nZXRQYWdlSW5mbyh0LnBhZ2VOdW1iZXIpLnBhZ2VDb250ZXh0LmFubm90YXRpb25zPVtdfV0pLHQuZXZlbnRzLnB1c2goW1wicHV0UGFnZVwiLGZ1bmN0aW9uKHQpe2Zvcih2YXIgcixuLGksYT10aGlzLmludGVybmFsLmdldENvb3JkaW5hdGVTdHJpbmcsbz10aGlzLmludGVybmFsLmdldFZlcnRpY2FsQ29vcmRpbmF0ZVN0cmluZyxzPXRoaXMuaW50ZXJuYWwuZ2V0UGFnZUluZm9CeU9iaklkKHQub2JqSWQpLHU9dC5wYWdlQ29udGV4dC5hbm5vdGF0aW9ucyxjPSExLGw9MDtsPHUubGVuZ3RoJiYhYztsKyspc3dpdGNoKChyPXVbbF0pLnR5cGUpe2Nhc2VcImxpbmtcIjooZShyLm9wdGlvbnMudXJsKXx8ZShyLm9wdGlvbnMucGFnZU51bWJlcikpJiYoYz0hMCk7YnJlYWs7Y2FzZVwicmVmZXJlbmNlXCI6Y2FzZVwidGV4dFwiOmNhc2VcImZyZWV0ZXh0XCI6Yz0hMH1pZigwIT1jKXt0aGlzLmludGVybmFsLndyaXRlKFwiL0Fubm90cyBbXCIpO2Zvcih2YXIgaD0wO2g8dS5sZW5ndGg7aCsrKXtyPXVbaF07dmFyIGY9dGhpcy5pbnRlcm5hbC5wZGZFc2NhcGUsZD10aGlzLmludGVybmFsLmdldEVuY3J5cHRvcih0Lm9iaklkKTtzd2l0Y2goci50eXBlKXtjYXNlXCJyZWZlcmVuY2VcIjp0aGlzLmludGVybmFsLndyaXRlKFwiIFwiK3Iub2JqZWN0Lm9iaklkK1wiIDAgUiBcIik7YnJlYWs7Y2FzZVwidGV4dFwiOnZhciBwPXRoaXMuaW50ZXJuYWwubmV3QWRkaXRpb25hbE9iamVjdCgpLGc9dGhpcy5pbnRlcm5hbC5uZXdBZGRpdGlvbmFsT2JqZWN0KCksbT10aGlzLmludGVybmFsLmdldEVuY3J5cHRvcihwLm9iaklkKSx2PXIudGl0bGV8fFwiTm90ZVwiO2k9XCI8PC9UeXBlIC9Bbm5vdCAvU3VidHlwZSAvVGV4dCBcIisobj1cIi9SZWN0IFtcIithKHIuYm91bmRzLngpK1wiIFwiK28oci5ib3VuZHMueStyLmJvdW5kcy5oKStcIiBcIithKHIuYm91bmRzLngrci5ib3VuZHMudykrXCIgXCIrbyhyLmJvdW5kcy55KStcIl0gXCIpK1wiL0NvbnRlbnRzIChcIitmKG0oci5jb250ZW50cykpK1wiKVwiLGkrPVwiIC9Qb3B1cCBcIitnLm9iaklkK1wiIDAgUlwiLGkrPVwiIC9QIFwiK3Mub2JqSWQrXCIgMCBSXCIsaSs9XCIgL1QgKFwiK2YobSh2KSkrXCIpID4+XCIscC5jb250ZW50PWk7dmFyIGI9cC5vYmpJZCtcIiAwIFJcIjtpPVwiPDwvVHlwZSAvQW5ub3QgL1N1YnR5cGUgL1BvcHVwIFwiKyhuPVwiL1JlY3QgW1wiK2Eoci5ib3VuZHMueCszMCkrXCIgXCIrbyhyLmJvdW5kcy55K3IuYm91bmRzLmgpK1wiIFwiK2Eoci5ib3VuZHMueCtyLmJvdW5kcy53KzMwKStcIiBcIitvKHIuYm91bmRzLnkpK1wiXSBcIikrXCIgL1BhcmVudCBcIitiLHIub3BlbiYmKGkrPVwiIC9PcGVuIHRydWVcIiksaSs9XCIgPj5cIixnLmNvbnRlbnQ9aSx0aGlzLmludGVybmFsLndyaXRlKHAub2JqSWQsXCIwIFJcIixnLm9iaklkLFwiMCBSXCIpO2JyZWFrO2Nhc2VcImZyZWV0ZXh0XCI6bj1cIi9SZWN0IFtcIithKHIuYm91bmRzLngpK1wiIFwiK28oci5ib3VuZHMueSkrXCIgXCIrYShyLmJvdW5kcy54K3IuYm91bmRzLncpK1wiIFwiK28oci5ib3VuZHMueStyLmJvdW5kcy5oKStcIl0gXCI7dmFyIHk9XCJmb250OiBIZWx2ZXRpY2Esc2Fucy1zZXJpZiAxMi4wcHQ7IHRleHQtYWxpZ246bGVmdDsgY29sb3I6I1wiKyhyLmNvbG9yfHxcIiMwMDAwMDBcIik7aT1cIjw8L1R5cGUgL0Fubm90IC9TdWJ0eXBlIC9GcmVlVGV4dCBcIituK1wiL0NvbnRlbnRzIChcIitmKGQoci5jb250ZW50cykpK1wiKVwiLGkrPVwiIC9EUyhcIitmKGQoeSkpK1wiKVwiLGkrPVwiIC9Cb3JkZXIgWzAgMCAwXVwiLGkrPVwiID4+XCIsdGhpcy5pbnRlcm5hbC53cml0ZShpKTticmVhaztjYXNlXCJsaW5rXCI6aWYoci5vcHRpb25zLm5hbWUpe3ZhciB3PXRoaXMuYW5ub3RhdGlvbnMuX25hbWVNYXBbci5vcHRpb25zLm5hbWVdO3Iub3B0aW9ucy5wYWdlTnVtYmVyPXcucGFnZSxyLm9wdGlvbnMudG9wPXcueX1lbHNlIHIub3B0aW9ucy50b3B8fChyLm9wdGlvbnMudG9wPTApO2lmKG49XCIvUmVjdCBbXCIrci5maW5hbEJvdW5kcy54K1wiIFwiK3IuZmluYWxCb3VuZHMueStcIiBcIityLmZpbmFsQm91bmRzLncrXCIgXCIrci5maW5hbEJvdW5kcy5oK1wiXSBcIixpPVwiXCIsci5vcHRpb25zLnVybClpPVwiPDwvVHlwZSAvQW5ub3QgL1N1YnR5cGUgL0xpbmsgXCIrbitcIi9Cb3JkZXIgWzAgMCAwXSAvQSA8PC9TIC9VUkkgL1VSSSAoXCIrZihkKHIub3B0aW9ucy51cmwpKStcIikgPj5cIjtlbHNlIGlmKHIub3B0aW9ucy5wYWdlTnVtYmVyKXN3aXRjaChpPVwiPDwvVHlwZSAvQW5ub3QgL1N1YnR5cGUgL0xpbmsgXCIrbitcIi9Cb3JkZXIgWzAgMCAwXSAvRGVzdCBbXCIrdGhpcy5pbnRlcm5hbC5nZXRQYWdlSW5mbyhyLm9wdGlvbnMucGFnZU51bWJlcikub2JqSWQrXCIgMCBSXCIsci5vcHRpb25zLm1hZ0ZhY3Rvcj1yLm9wdGlvbnMubWFnRmFjdG9yfHxcIlhZWlwiLHIub3B0aW9ucy5tYWdGYWN0b3Ipe2Nhc2VcIkZpdFwiOmkrPVwiIC9GaXRdXCI7YnJlYWs7Y2FzZVwiRml0SFwiOmkrPVwiIC9GaXRIIFwiK3Iub3B0aW9ucy50b3ArXCJdXCI7YnJlYWs7Y2FzZVwiRml0VlwiOnIub3B0aW9ucy5sZWZ0PXIub3B0aW9ucy5sZWZ0fHwwLGkrPVwiIC9GaXRWIFwiK3Iub3B0aW9ucy5sZWZ0K1wiXVwiO2JyZWFrO2RlZmF1bHQ6dmFyIE49byhyLm9wdGlvbnMudG9wKTtyLm9wdGlvbnMubGVmdD1yLm9wdGlvbnMubGVmdHx8MCx2b2lkIDA9PT1yLm9wdGlvbnMuem9vbSYmKHIub3B0aW9ucy56b29tPTApLGkrPVwiIC9YWVogXCIrci5vcHRpb25zLmxlZnQrXCIgXCIrTitcIiBcIityLm9wdGlvbnMuem9vbStcIl1cIn1cIlwiIT1pJiYoaSs9XCIgPj5cIix0aGlzLmludGVybmFsLndyaXRlKGkpKX19dGhpcy5pbnRlcm5hbC53cml0ZShcIl1cIil9fV0pLHQuY3JlYXRlQW5ub3RhdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmludGVybmFsLmdldEN1cnJlbnRQYWdlSW5mbygpO3N3aXRjaCh0LnR5cGUpe2Nhc2VcImxpbmtcIjp0aGlzLmxpbmsodC5ib3VuZHMueCx0LmJvdW5kcy55LHQuYm91bmRzLncsdC5ib3VuZHMuaCx0KTticmVhaztjYXNlXCJ0ZXh0XCI6Y2FzZVwiZnJlZXRleHRcIjplLnBhZ2VDb250ZXh0LmFubm90YXRpb25zLnB1c2godCl9fSx0Lmxpbms9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10aGlzLmludGVybmFsLmdldEN1cnJlbnRQYWdlSW5mbygpLG89dGhpcy5pbnRlcm5hbC5nZXRDb29yZGluYXRlU3RyaW5nLHM9dGhpcy5pbnRlcm5hbC5nZXRWZXJ0aWNhbENvb3JkaW5hdGVTdHJpbmc7YS5wYWdlQ29udGV4dC5hbm5vdGF0aW9ucy5wdXNoKHtmaW5hbEJvdW5kczp7eDpvKHQpLHk6cyhlKSx3Om8odCtyKSxoOnMoZStuKX0sb3B0aW9uczppLHR5cGU6XCJsaW5rXCJ9KX0sdC50ZXh0V2l0aExpbms9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvPXRoaXMuZ2V0VGV4dFdpZHRoKHQpLHM9dGhpcy5pbnRlcm5hbC5nZXRMaW5lSGVpZ2h0KCkvdGhpcy5pbnRlcm5hbC5zY2FsZUZhY3RvcjtpZih2b2lkIDAhPT1uLm1heFdpZHRoKXthPW4ubWF4V2lkdGg7dmFyIHU9dGhpcy5zcGxpdFRleHRUb1NpemUodCxhKS5sZW5ndGg7aT1NYXRoLmNlaWwocyp1KX1lbHNlIGE9byxpPXM7cmV0dXJuIHRoaXMudGV4dCh0LGUscixuKSxyKz0uMipzLFwiY2VudGVyXCI9PT1uLmFsaWduJiYoZS09by8yKSxcInJpZ2h0XCI9PT1uLmFsaWduJiYoZS09byksdGhpcy5saW5rKGUsci1zLGEsaSxuKSxvfSx0LmdldFRleHRXaWR0aD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmludGVybmFsLmdldEZvbnRTaXplKCk7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nVW5pdFdpZHRoKHQpKmUvdGhpcy5pbnRlcm5hbC5zY2FsZUZhY3Rvcn19KEUuQVBJKSxcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNyBBcmFzIEFiYmFzaVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZVxuICovXG5mdW5jdGlvbih0KXt2YXIgZT17MTU2OTpbNjUxNTJdLDE1NzA6WzY1MTUzLDY1MTU0XSwxNTcxOls2NTE1NSw2NTE1Nl0sMTU3MjpbNjUxNTcsNjUxNThdLDE1NzM6WzY1MTU5LDY1MTYwXSwxNTc0Ols2NTE2MSw2NTE2Miw2NTE2Myw2NTE2NF0sMTU3NTpbNjUxNjUsNjUxNjZdLDE1NzY6WzY1MTY3LDY1MTY4LDY1MTY5LDY1MTcwXSwxNTc3Ols2NTE3MSw2NTE3Ml0sMTU3ODpbNjUxNzMsNjUxNzQsNjUxNzUsNjUxNzZdLDE1Nzk6WzY1MTc3LDY1MTc4LDY1MTc5LDY1MTgwXSwxNTgwOls2NTE4MSw2NTE4Miw2NTE4Myw2NTE4NF0sMTU4MTpbNjUxODUsNjUxODYsNjUxODcsNjUxODhdLDE1ODI6WzY1MTg5LDY1MTkwLDY1MTkxLDY1MTkyXSwxNTgzOls2NTE5Myw2NTE5NF0sMTU4NDpbNjUxOTUsNjUxOTZdLDE1ODU6WzY1MTk3LDY1MTk4XSwxNTg2Ols2NTE5OSw2NTIwMF0sMTU4NzpbNjUyMDEsNjUyMDIsNjUyMDMsNjUyMDRdLDE1ODg6WzY1MjA1LDY1MjA2LDY1MjA3LDY1MjA4XSwxNTg5Ols2NTIwOSw2NTIxMCw2NTIxMSw2NTIxMl0sMTU5MDpbNjUyMTMsNjUyMTQsNjUyMTUsNjUyMTZdLDE1OTE6WzY1MjE3LDY1MjE4LDY1MjE5LDY1MjIwXSwxNTkyOls2NTIyMSw2NTIyMiw2NTIyMyw2NTIyNF0sMTU5MzpbNjUyMjUsNjUyMjYsNjUyMjcsNjUyMjhdLDE1OTQ6WzY1MjI5LDY1MjMwLDY1MjMxLDY1MjMyXSwxNjAxOls2NTIzMyw2NTIzNCw2NTIzNSw2NTIzNl0sMTYwMjpbNjUyMzcsNjUyMzgsNjUyMzksNjUyNDBdLDE2MDM6WzY1MjQxLDY1MjQyLDY1MjQzLDY1MjQ0XSwxNjA0Ols2NTI0NSw2NTI0Niw2NTI0Nyw2NTI0OF0sMTYwNTpbNjUyNDksNjUyNTAsNjUyNTEsNjUyNTJdLDE2MDY6WzY1MjUzLDY1MjU0LDY1MjU1LDY1MjU2XSwxNjA3Ols2NTI1Nyw2NTI1OCw2NTI1OSw2NTI2MF0sMTYwODpbNjUyNjEsNjUyNjJdLDE2MDk6WzY1MjYzLDY1MjY0LDY0NDg4LDY0NDg5XSwxNjEwOls2NTI2NSw2NTI2Niw2NTI2Nyw2NTI2OF0sMTY0OTpbNjQzMzYsNjQzMzddLDE2NTU6WzY0NDc3XSwxNjU3Ols2NDM1OCw2NDM1OSw2NDM2MCw2NDM2MV0sMTY1ODpbNjQzNTAsNjQzNTEsNjQzNTIsNjQzNTNdLDE2NTk6WzY0MzM4LDY0MzM5LDY0MzQwLDY0MzQxXSwxNjYyOls2NDM0Miw2NDM0Myw2NDM0NCw2NDM0NV0sMTY2MzpbNjQzNTQsNjQzNTUsNjQzNTYsNjQzNTddLDE2NjQ6WzY0MzQ2LDY0MzQ3LDY0MzQ4LDY0MzQ5XSwxNjY3Ols2NDM3NCw2NDM3NSw2NDM3Niw2NDM3N10sMTY2ODpbNjQzNzAsNjQzNzEsNjQzNzIsNjQzNzNdLDE2NzA6WzY0Mzc4LDY0Mzc5LDY0MzgwLDY0MzgxXSwxNjcxOls2NDM4Miw2NDM4Myw2NDM4NCw2NDM4NV0sMTY3MjpbNjQzOTIsNjQzOTNdLDE2NzY6WzY0Mzg4LDY0Mzg5XSwxNjc3Ols2NDM4Niw2NDM4N10sMTY3ODpbNjQzOTAsNjQzOTFdLDE2ODE6WzY0Mzk2LDY0Mzk3XSwxNjg4Ols2NDM5NCw2NDM5NV0sMTcwMDpbNjQzNjIsNjQzNjMsNjQzNjQsNjQzNjVdLDE3MDI6WzY0MzY2LDY0MzY3LDY0MzY4LDY0MzY5XSwxNzA1Ols2NDM5OCw2NDM5OSw2NDQwMCw2NDQwMV0sMTcwOTpbNjQ0NjcsNjQ0NjgsNjQ0NjksNjQ0NzBdLDE3MTE6WzY0NDAyLDY0NDAzLDY0NDA0LDY0NDA1XSwxNzEzOls2NDQxMCw2NDQxMSw2NDQxMiw2NDQxM10sMTcxNTpbNjQ0MDYsNjQ0MDcsNjQ0MDgsNjQ0MDldLDE3MjI6WzY0NDE0LDY0NDE1XSwxNzIzOls2NDQxNiw2NDQxNyw2NDQxOCw2NDQxOV0sMTcyNjpbNjQ0MjYsNjQ0MjcsNjQ0MjgsNjQ0MjldLDE3Mjg6WzY0NDIwLDY0NDIxXSwxNzI5Ols2NDQyMiw2NDQyMyw2NDQyNCw2NDQyNV0sMTczMzpbNjQ0ODAsNjQ0ODFdLDE3MzQ6WzY0NDczLDY0NDc0XSwxNzM1Ols2NDQ3MSw2NDQ3Ml0sMTczNjpbNjQ0NzUsNjQ0NzZdLDE3Mzc6WzY0NDgyLDY0NDgzXSwxNzM5Ols2NDQ3OCw2NDQ3OV0sMTc0MDpbNjQ1MDgsNjQ1MDksNjQ1MTAsNjQ1MTFdLDE3NDQ6WzY0NDg0LDY0NDg1LDY0NDg2LDY0NDg3XSwxNzQ2Ols2NDQzMCw2NDQzMV0sMTc0NzpbNjQ0MzIsNjQ0MzNdfSxyPXs2NTI0Nzp7NjUxNTQ6NjUyNjksNjUxNTY6NjUyNzEsNjUxNjA6NjUyNzMsNjUxNjY6NjUyNzV9LDY1MjQ4Ons2NTE1NDo2NTI3MCw2NTE1Njo2NTI3Miw2NTE2MDo2NTI3NCw2NTE2Njo2NTI3Nn0sNjUxNjU6ezY1MjQ3Ons2NTI0ODp7NjUyNTg6NjUwMTB9fX0sMTYxNzp7MTYxMjo2NDYwNiwxNjEzOjY0NjA3LDE2MTQ6NjQ2MDgsMTYxNTo2NDYwOSwxNjE2OjY0NjEwfX0sbj17MTYxMjo2NDYwNiwxNjEzOjY0NjA3LDE2MTQ6NjQ2MDgsMTYxNTo2NDYwOSwxNjE2OjY0NjEwfSxpPVsxNTcwLDE1NzEsMTU3MywxNTc1XTt0Ll9fYXJhYmljUGFyc2VyX189e307dmFyIGE9dC5fX2FyYWJpY1BhcnNlcl9fLmlzSW5BcmFiaWNTdWJzdGl0dXRpb25BPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT1lW3QuY2hhckNvZGVBdCgwKV19LG89dC5fX2FyYWJpY1BhcnNlcl9fLmlzQXJhYmljTGV0dGVyPWZ1bmN0aW9uKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiYvXltcXHUwNjAwLVxcdTA2RkZcXHUwNzUwLVxcdTA3N0ZcXHUwOEEwLVxcdTA4RkZcXHVGQjUwLVxcdUZERkZcXHVGRTcwLVxcdUZFRkZdKyQvLnRlc3QodCl9LHM9dC5fX2FyYWJpY1BhcnNlcl9fLmlzQXJhYmljRW5kTGV0dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBvKHQpJiZhKHQpJiZlW3QuY2hhckNvZGVBdCgwKV0ubGVuZ3RoPD0yfSx1PXQuX19hcmFiaWNQYXJzZXJfXy5pc0FyYWJpY0FsZkxldHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbyh0KSYmaS5pbmRleE9mKHQuY2hhckNvZGVBdCgwKSk+PTB9O3QuX19hcmFiaWNQYXJzZXJfXy5hcmFiaWNMZXR0ZXJIYXNJc29sYXRlZEZvcm09ZnVuY3Rpb24odCl7cmV0dXJuIG8odCkmJmEodCkmJmVbdC5jaGFyQ29kZUF0KDApXS5sZW5ndGg+PTF9O3ZhciBjPXQuX19hcmFiaWNQYXJzZXJfXy5hcmFiaWNMZXR0ZXJIYXNGaW5hbEZvcm09ZnVuY3Rpb24odCl7cmV0dXJuIG8odCkmJmEodCkmJmVbdC5jaGFyQ29kZUF0KDApXS5sZW5ndGg+PTJ9O3QuX19hcmFiaWNQYXJzZXJfXy5hcmFiaWNMZXR0ZXJIYXNJbml0aWFsRm9ybT1mdW5jdGlvbih0KXtyZXR1cm4gbyh0KSYmYSh0KSYmZVt0LmNoYXJDb2RlQXQoMCldLmxlbmd0aD49M307dmFyIGw9dC5fX2FyYWJpY1BhcnNlcl9fLmFyYWJpY0xldHRlckhhc01lZGlhbEZvcm09ZnVuY3Rpb24odCl7cmV0dXJuIG8odCkmJmEodCkmJjQ9PWVbdC5jaGFyQ29kZUF0KDApXS5sZW5ndGh9LGg9dC5fX2FyYWJpY1BhcnNlcl9fLnJlc29sdmVMaWdhdHVyZXM9ZnVuY3Rpb24odCl7dmFyIGU9MCxuPXIsaT1cIlwiLGE9MDtmb3IoZT0wO2U8dC5sZW5ndGg7ZSs9MSl2b2lkIDAhPT1uW3QuY2hhckNvZGVBdChlKV0/KGErKyxcIm51bWJlclwiPT10eXBlb2Yobj1uW3QuY2hhckNvZGVBdChlKV0pJiYoaSs9U3RyaW5nLmZyb21DaGFyQ29kZShuKSxuPXIsYT0wKSxlPT09dC5sZW5ndGgtMSYmKG49cixpKz10LmNoYXJBdChlLShhLTEpKSxlLT1hLTEsYT0wKSk6KG49cixpKz10LmNoYXJBdChlLWEpLGUtPWEsYT0wKTtyZXR1cm4gaX07dC5fX2FyYWJpY1BhcnNlcl9fLmlzQXJhYmljRGlhY3JpdGljPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10JiZ2b2lkIDAhPT1uW3QuY2hhckNvZGVBdCgwKV19O3ZhciBmPXQuX19hcmFiaWNQYXJzZXJfXy5nZXRDb3JyZWN0Rm9ybT1mdW5jdGlvbih0LGUscil7cmV0dXJuIG8odCk/ITE9PT1hKHQpPy0xOiFjKHQpfHwhbyhlKSYmIW8ocil8fCFvKHIpJiZzKGUpfHxzKHQpJiYhbyhlKXx8cyh0KSYmdShlKXx8cyh0KSYmcyhlKT8wOmwodCkmJm8oZSkmJiFzKGUpJiZvKHIpJiZjKHIpPzM6cyh0KXx8IW8ocik/MToyOi0xfSxkPWZ1bmN0aW9uKHQpe3ZhciByPTAsbj0wLGk9MCxhPVwiXCIscz1cIlwiLHU9XCJcIixjPSh0PXR8fFwiXCIpLnNwbGl0KFwiXFxcXHMrXCIpLGw9W107Zm9yKHI9MDtyPGMubGVuZ3RoO3IrPTEpe2ZvcihsLnB1c2goXCJcIiksbj0wO248Y1tyXS5sZW5ndGg7bis9MSlhPWNbcl1bbl0scz1jW3JdW24tMV0sdT1jW3JdW24rMV0sbyhhKT8oaT1mKGEscyx1KSxsW3JdKz0tMSE9PWk/U3RyaW5nLmZyb21DaGFyQ29kZShlW2EuY2hhckNvZGVBdCgwKV1baV0pOmEpOmxbcl0rPWE7bFtyXT1oKGxbcl0pfXJldHVybiBsLmpvaW4oXCIgXCIpfSxwPXQuX19hcmFiaWNQYXJzZXJfXy5wcm9jZXNzQXJhYmljPXQucHJvY2Vzc0FyYWJpYz1mdW5jdGlvbigpe3ZhciB0LGU9XCJzdHJpbmdcIj09dHlwZW9mIGFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06YXJndW1lbnRzWzBdLnRleHQscj1bXTtpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbj0wO2ZvcihyPVtdLG49MDtuPGUubGVuZ3RoO24rPTEpQXJyYXkuaXNBcnJheShlW25dKT9yLnB1c2goW2QoZVtuXVswXSksZVtuXVsxXSxlW25dWzJdXSk6ci5wdXNoKFtkKGVbbl0pXSk7dD1yfWVsc2UgdD1kKGUpO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBhcmd1bWVudHNbMF0/dDooYXJndW1lbnRzWzBdLnRleHQ9dCxhcmd1bWVudHNbMF0pfTt0LmV2ZW50cy5wdXNoKFtcInByZVByb2Nlc3NUZXh0XCIscF0pfShFLkFQSSksRS5BUEkuYXV0b1ByaW50PWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybih0PXR8fHt9KS52YXJpYW50PXQudmFyaWFudHx8XCJub24tY29uZm9ybVwiLFwiamF2YXNjcmlwdFwiPT09dC52YXJpYW50P3RoaXMuYWRkSlMoXCJwcmludCh7fSk7XCIpOih0aGlzLmludGVybmFsLmV2ZW50cy5zdWJzY3JpYmUoXCJwb3N0UHV0UmVzb3VyY2VzXCIsZnVuY3Rpb24oKXtlPXRoaXMuaW50ZXJuYWwubmV3T2JqZWN0KCksdGhpcy5pbnRlcm5hbC5vdXQoXCI8PFwiKSx0aGlzLmludGVybmFsLm91dChcIi9TIC9OYW1lZFwiKSx0aGlzLmludGVybmFsLm91dChcIi9UeXBlIC9BY3Rpb25cIiksdGhpcy5pbnRlcm5hbC5vdXQoXCIvTiAvUHJpbnRcIiksdGhpcy5pbnRlcm5hbC5vdXQoXCI+PlwiKSx0aGlzLmludGVybmFsLm91dChcImVuZG9ialwiKX0pLHRoaXMuaW50ZXJuYWwuZXZlbnRzLnN1YnNjcmliZShcInB1dENhdGFsb2dcIixmdW5jdGlvbigpe3RoaXMuaW50ZXJuYWwub3V0KFwiL09wZW5BY3Rpb24gXCIrZStcIiAwIFJcIil9KSksdGhpc30sXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgU3RldmVuIFNwdW5naW4gKFR3ZWx2ZVRvbmUgTExDKSAgc3RldmVuQHR3ZWx2ZXRvbmUudHZcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2VcbiAqL1xuZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24oKXt2YXIgdD12b2lkIDA7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJwZGZcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHR9LHNldDpmdW5jdGlvbihlKXt0PWV9fSk7dmFyIGU9MTUwO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwid2lkdGhcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGV9LHNldDpmdW5jdGlvbih0KXtlPWlzTmFOKHQpfHwhMT09PU51bWJlci5pc0ludGVnZXIodCl8fHQ8MD8xNTA6dCx0aGlzLmdldENvbnRleHQoXCIyZFwiKS5wYWdlV3JhcFhFbmFibGVkJiYodGhpcy5nZXRDb250ZXh0KFwiMmRcIikucGFnZVdyYXBYPWUrMSl9fSk7dmFyIHI9MzAwO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiaGVpZ2h0XCIse2dldDpmdW5jdGlvbigpe3JldHVybiByfSxzZXQ6ZnVuY3Rpb24odCl7cj1pc05hTih0KXx8ITE9PT1OdW1iZXIuaXNJbnRlZ2VyKHQpfHx0PDA/MzAwOnQsdGhpcy5nZXRDb250ZXh0KFwiMmRcIikucGFnZVdyYXBZRW5hYmxlZCYmKHRoaXMuZ2V0Q29udGV4dChcIjJkXCIpLnBhZ2VXcmFwWT1yKzEpfX0pO3ZhciBuPVtdO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiY2hpbGROb2Rlc1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbn0sc2V0OmZ1bmN0aW9uKHQpe249dH19KTt2YXIgaT17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInN0eWxlXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBpfSxzZXQ6ZnVuY3Rpb24odCl7aT10fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicGFyZW50Tm9kZVwiLHt9KX07ZS5wcm90b3R5cGUuZ2V0Q29udGV4dD1mdW5jdGlvbih0LGUpe3ZhciByO2lmKFwiMmRcIiE9PSh0PXR8fFwiMmRcIikpcmV0dXJuIG51bGw7Zm9yKHIgaW4gZSl0aGlzLnBkZi5jb250ZXh0MmQuaGFzT3duUHJvcGVydHkocikmJih0aGlzLnBkZi5jb250ZXh0MmRbcl09ZVtyXSk7cmV0dXJuIHRoaXMucGRmLmNvbnRleHQyZC5fY2FudmFzPXRoaXMsdGhpcy5wZGYuY29udGV4dDJkfSxlLnByb3RvdHlwZS50b0RhdGFVUkw9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0b0RhdGFVUkwgaXMgbm90IGltcGxlbWVudGVkLlwiKX0sdC5ldmVudHMucHVzaChbXCJpbml0aWFsaXplZFwiLGZ1bmN0aW9uKCl7dGhpcy5jYW52YXM9bmV3IGUsdGhpcy5jYW52YXMucGRmPXRoaXN9XSl9KEUuQVBJKSxmdW5jdGlvbihlKXt2YXIgcj17bGVmdDowLHRvcDowLGJvdHRvbTowLHJpZ2h0OjB9LG49ITEsaT1mdW5jdGlvbigpe3ZvaWQgMD09PXRoaXMuaW50ZXJuYWwuX19jZWxsX18mJih0aGlzLmludGVybmFsLl9fY2VsbF9fPXt9LHRoaXMuaW50ZXJuYWwuX19jZWxsX18ucGFkZGluZz0zLHRoaXMuaW50ZXJuYWwuX19jZWxsX18uaGVhZGVyRnVuY3Rpb249dm9pZCAwLHRoaXMuaW50ZXJuYWwuX19jZWxsX18ubWFyZ2lucz1PYmplY3QuYXNzaWduKHt9LHIpLHRoaXMuaW50ZXJuYWwuX19jZWxsX18ubWFyZ2lucy53aWR0aD10aGlzLmdldFBhZ2VXaWR0aCgpLGEuY2FsbCh0aGlzKSl9LGE9ZnVuY3Rpb24oKXt0aGlzLmludGVybmFsLl9fY2VsbF9fLmxhc3RDZWxsPW5ldyBvLHRoaXMuaW50ZXJuYWwuX19jZWxsX18ucGFnZXM9MX0sbz1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50c1swXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInhcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdH0sc2V0OmZ1bmN0aW9uKGUpe3Q9ZX19KTt2YXIgZT1hcmd1bWVudHNbMV07T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJ5XCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGV9LHNldDpmdW5jdGlvbih0KXtlPXR9fSk7dmFyIHI9YXJndW1lbnRzWzJdO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwid2lkdGhcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcn0sc2V0OmZ1bmN0aW9uKHQpe3I9dH19KTt2YXIgbj1hcmd1bWVudHNbM107T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJoZWlnaHRcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbn0sc2V0OmZ1bmN0aW9uKHQpe249dH19KTt2YXIgaT1hcmd1bWVudHNbNF07T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJ0ZXh0XCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGl9LHNldDpmdW5jdGlvbih0KXtpPXR9fSk7dmFyIGE9YXJndW1lbnRzWzVdO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwibGluZU51bWJlclwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhfSxzZXQ6ZnVuY3Rpb24odCl7YT10fX0pO3ZhciBvPWFyZ3VtZW50c1s2XTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJhbGlnblwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvfSxzZXQ6ZnVuY3Rpb24odCl7bz10fX0pLHRoaXN9O28ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBvKHRoaXMueCx0aGlzLnksdGhpcy53aWR0aCx0aGlzLmhlaWdodCx0aGlzLnRleHQsdGhpcy5saW5lTnVtYmVyLHRoaXMuYWxpZ24pfSxvLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMueCx0aGlzLnksdGhpcy53aWR0aCx0aGlzLmhlaWdodCx0aGlzLnRleHQsdGhpcy5saW5lTnVtYmVyLHRoaXMuYWxpZ25dfSxlLnNldEhlYWRlckZ1bmN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBpLmNhbGwodGhpcyksdGhpcy5pbnRlcm5hbC5fX2NlbGxfXy5oZWFkZXJGdW5jdGlvbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6dm9pZCAwLHRoaXN9LGUuZ2V0VGV4dERpbWVuc2lvbnM9ZnVuY3Rpb24odCxlKXtpLmNhbGwodGhpcyk7dmFyIHI9KGU9ZXx8e30pLmZvbnRTaXplfHx0aGlzLmdldEZvbnRTaXplKCksbj1lLmZvbnR8fHRoaXMuZ2V0Rm9udCgpLGE9ZS5zY2FsZUZhY3Rvcnx8dGhpcy5pbnRlcm5hbC5zY2FsZUZhY3RvcixvPTAscz0wLHU9MCxjPXRoaXM7aWYoIUFycmF5LmlzQXJyYXkodCkmJlwic3RyaW5nXCIhPXR5cGVvZiB0KXtpZihcIm51bWJlclwiIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoXCJnZXRUZXh0RGltZW5zaW9ucyBleHBlY3RzIHRleHQtcGFyYW1ldGVyIHRvIGJlIG9mIHR5cGUgU3RyaW5nIG9yIHR5cGUgTnVtYmVyIG9yIGFuIEFycmF5IG9mIFN0cmluZ3MuXCIpO3Q9U3RyaW5nKHQpfXZhciBsPWUubWF4V2lkdGg7bD4wP1wic3RyaW5nXCI9PXR5cGVvZiB0P3Q9dGhpcy5zcGxpdFRleHRUb1NpemUodCxsKTpcIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkmJih0PXQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY29uY2F0KGMuc3BsaXRUZXh0VG9TaXplKGUsbCkpfSxbXSkpOnQ9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtmb3IodmFyIGg9MDtoPHQubGVuZ3RoO2grKylvPCh1PXRoaXMuZ2V0U3RyaW5nVW5pdFdpZHRoKHRbaF0se2ZvbnQ6bn0pKnIpJiYobz11KTtyZXR1cm4gMCE9PW8mJihzPXQubGVuZ3RoKSx7dzpvLz1hLGg6TWF0aC5tYXgoKHMqcip0aGlzLmdldExpbmVIZWlnaHRGYWN0b3IoKS1yKih0aGlzLmdldExpbmVIZWlnaHRGYWN0b3IoKS0xKSkvYSwwKX19LGUuY2VsbEFkZFBhZ2U9ZnVuY3Rpb24oKXtpLmNhbGwodGhpcyksdGhpcy5hZGRQYWdlKCk7dmFyIHQ9dGhpcy5pbnRlcm5hbC5fX2NlbGxfXy5tYXJnaW5zfHxyO3JldHVybiB0aGlzLmludGVybmFsLl9fY2VsbF9fLmxhc3RDZWxsPW5ldyBvKHQubGVmdCx0LnRvcCx2b2lkIDAsdm9pZCAwKSx0aGlzLmludGVybmFsLl9fY2VsbF9fLnBhZ2VzKz0xLHRoaXN9O3ZhciBzPWUuY2VsbD1mdW5jdGlvbigpe3ZhciB0O3Q9YXJndW1lbnRzWzBdaW5zdGFuY2VvZiBvP2FyZ3VtZW50c1swXTpuZXcgbyhhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM10sYXJndW1lbnRzWzRdLGFyZ3VtZW50c1s1XSxhcmd1bWVudHNbNl0pLGkuY2FsbCh0aGlzKTt2YXIgZT10aGlzLmludGVybmFsLl9fY2VsbF9fLmxhc3RDZWxsLGE9dGhpcy5pbnRlcm5hbC5fX2NlbGxfXy5wYWRkaW5nLHM9dGhpcy5pbnRlcm5hbC5fX2NlbGxfXy5tYXJnaW5zfHxyLHU9dGhpcy5pbnRlcm5hbC5fX2NlbGxfXy50YWJsZUhlYWRlclJvdyxjPXRoaXMuaW50ZXJuYWwuX19jZWxsX18ucHJpbnRIZWFkZXJzO3JldHVybiB2b2lkIDAhPT1lLmxpbmVOdW1iZXImJihlLmxpbmVOdW1iZXI9PT10LmxpbmVOdW1iZXI/KHQueD0oZS54fHwwKSsoZS53aWR0aHx8MCksdC55PWUueXx8MCk6ZS55K2UuaGVpZ2h0K3QuaGVpZ2h0K3MuYm90dG9tPnRoaXMuZ2V0UGFnZUhlaWdodCgpPyh0aGlzLmNlbGxBZGRQYWdlKCksdC55PXMudG9wLGMmJnUmJih0aGlzLnByaW50SGVhZGVyUm93KHQubGluZU51bWJlciwhMCksdC55Kz11WzBdLmhlaWdodCkpOnQueT1lLnkrZS5oZWlnaHR8fHQueSksdm9pZCAwIT09dC50ZXh0WzBdJiYodGhpcy5yZWN0KHQueCx0LnksdC53aWR0aCx0LmhlaWdodCwhMD09PW4/XCJGRFwiOnZvaWQgMCksXCJyaWdodFwiPT09dC5hbGlnbj90aGlzLnRleHQodC50ZXh0LHQueCt0LndpZHRoLWEsdC55K2Ese2FsaWduOlwicmlnaHRcIixiYXNlbGluZTpcInRvcFwifSk6XCJjZW50ZXJcIj09PXQuYWxpZ24/dGhpcy50ZXh0KHQudGV4dCx0LngrdC53aWR0aC8yLHQueSthLHthbGlnbjpcImNlbnRlclwiLGJhc2VsaW5lOlwidG9wXCIsbWF4V2lkdGg6dC53aWR0aC1hLWF9KTp0aGlzLnRleHQodC50ZXh0LHQueCthLHQueSthLHthbGlnbjpcImxlZnRcIixiYXNlbGluZTpcInRvcFwiLG1heFdpZHRoOnQud2lkdGgtYS1hfSkpLHRoaXMuaW50ZXJuYWwuX19jZWxsX18ubGFzdENlbGw9dCx0aGlzfTtlLnRhYmxlPWZ1bmN0aW9uKGUsbixjLGwsaCl7aWYoaS5jYWxsKHRoaXMpLCFjKXRocm93IG5ldyBFcnJvcihcIk5vIGRhdGEgZm9yIFBERiB0YWJsZS5cIik7dmFyIGYsZCxwLGcsbT1bXSx2PVtdLGI9W10seT17fSx3PXt9LE49W10sTD1bXSx4PShoPWh8fHt9KS5hdXRvU2l6ZXx8ITEsQT0hMSE9PWgucHJpbnRIZWFkZXJzLFM9aC5jc3MmJnZvaWQgMCE9PWguY3NzW1wiZm9udC1zaXplXCJdPzE2KmguY3NzW1wiZm9udC1zaXplXCJdOmguZm9udFNpemV8fDEyLF89aC5tYXJnaW5zfHxPYmplY3QuYXNzaWduKHt3aWR0aDp0aGlzLmdldFBhZ2VXaWR0aCgpfSxyKSxQPVwibnVtYmVyXCI9PXR5cGVvZiBoLnBhZGRpbmc/aC5wYWRkaW5nOjMsaz1oLmhlYWRlckJhY2tncm91bmRDb2xvcnx8XCIjYzhjOGM4XCIsRj1oLmhlYWRlclRleHRDb2xvcnx8XCIjMDAwXCI7aWYoYS5jYWxsKHRoaXMpLHRoaXMuaW50ZXJuYWwuX19jZWxsX18ucHJpbnRIZWFkZXJzPUEsdGhpcy5pbnRlcm5hbC5fX2NlbGxfXy5tYXJnaW5zPV8sdGhpcy5pbnRlcm5hbC5fX2NlbGxfXy50YWJsZV9mb250X3NpemU9Uyx0aGlzLmludGVybmFsLl9fY2VsbF9fLnBhZGRpbmc9UCx0aGlzLmludGVybmFsLl9fY2VsbF9fLmhlYWRlckJhY2tncm91bmRDb2xvcj1rLHRoaXMuaW50ZXJuYWwuX19jZWxsX18uaGVhZGVyVGV4dENvbG9yPUYsdGhpcy5zZXRGb250U2l6ZShTKSxudWxsPT1sKXY9bT1PYmplY3Qua2V5cyhjWzBdKSxiPW0ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuXCJsZWZ0XCJ9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkobCkmJlwib2JqZWN0XCI9PT10KGxbMF0pKWZvcihtPWwubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5hbWV9KSx2PWwubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnByb21wdHx8dC5uYW1lfHxcIlwifSksYj1sLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5hbGlnbnx8XCJsZWZ0XCJ9KSxmPTA7ZjxsLmxlbmd0aDtmKz0xKXdbbFtmXS5uYW1lXT0uNzQ5OTk5MDU1MTE4MTEwMypsW2ZdLndpZHRoO2Vsc2UgQXJyYXkuaXNBcnJheShsKSYmXCJzdHJpbmdcIj09dHlwZW9mIGxbMF0mJih2PW09bCxiPW0ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuXCJsZWZ0XCJ9KSk7aWYoeHx8QXJyYXkuaXNBcnJheShsKSYmXCJzdHJpbmdcIj09dHlwZW9mIGxbMF0pZm9yKGY9MDtmPG0ubGVuZ3RoO2YrPTEpe2Zvcih5W2c9bVtmXV09Yy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbZ119KSx0aGlzLnNldEZvbnQodm9pZCAwLFwiYm9sZFwiKSxOLnB1c2godGhpcy5nZXRUZXh0RGltZW5zaW9ucyh2W2ZdLHtmb250U2l6ZTp0aGlzLmludGVybmFsLl9fY2VsbF9fLnRhYmxlX2ZvbnRfc2l6ZSxzY2FsZUZhY3Rvcjp0aGlzLmludGVybmFsLnNjYWxlRmFjdG9yfSkudyksZD15W2ddLHRoaXMuc2V0Rm9udCh2b2lkIDAsXCJub3JtYWxcIikscD0wO3A8ZC5sZW5ndGg7cCs9MSlOLnB1c2godGhpcy5nZXRUZXh0RGltZW5zaW9ucyhkW3BdLHtmb250U2l6ZTp0aGlzLmludGVybmFsLl9fY2VsbF9fLnRhYmxlX2ZvbnRfc2l6ZSxzY2FsZUZhY3Rvcjp0aGlzLmludGVybmFsLnNjYWxlRmFjdG9yfSkudyk7d1tnXT1NYXRoLm1heC5hcHBseShudWxsLE4pK1ArUCxOPVtdfWlmKEEpe3ZhciBJPXt9O2ZvcihmPTA7ZjxtLmxlbmd0aDtmKz0xKUlbbVtmXV09e30sSVttW2ZdXS50ZXh0PXZbZl0sSVttW2ZdXS5hbGlnbj1iW2ZdO3ZhciBDPXUuY2FsbCh0aGlzLEksdyk7TD1tLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8oZSxuLHdbdF0sQyxJW3RdLnRleHQsdm9pZCAwLElbdF0uYWxpZ24pfSksdGhpcy5zZXRUYWJsZUhlYWRlclJvdyhMKSx0aGlzLnByaW50SGVhZGVyUm93KDEsITEpfXZhciBqPWwucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZS5uYW1lXT1lLmFsaWduLHR9LHt9KTtmb3IoZj0wO2Y8Yy5sZW5ndGg7Zis9MSl7XCJyb3dTdGFydFwiaW4gaCYmaC5yb3dTdGFydCBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZoLnJvd1N0YXJ0KHtyb3c6ZixkYXRhOmNbZl19LHRoaXMpO3ZhciBPPXUuY2FsbCh0aGlzLGNbZl0sdyk7Zm9yKHA9MDtwPG0ubGVuZ3RoO3ArPTEpe3ZhciBCPWNbZl1bbVtwXV07XCJjZWxsU3RhcnRcImluIGgmJmguY2VsbFN0YXJ0IGluc3RhbmNlb2YgRnVuY3Rpb24mJmguY2VsbFN0YXJ0KHtyb3c6Zixjb2w6cCxkYXRhOkJ9LHRoaXMpLHMuY2FsbCh0aGlzLG5ldyBvKGUsbix3W21bcF1dLE8sQixmKzIsalttW3BdXSkpfX1yZXR1cm4gdGhpcy5pbnRlcm5hbC5fX2NlbGxfXy50YWJsZV94PWUsdGhpcy5pbnRlcm5hbC5fX2NlbGxfXy50YWJsZV95PW4sdGhpc307dmFyIHU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmludGVybmFsLl9fY2VsbF9fLnBhZGRpbmcsbj10aGlzLmludGVybmFsLl9fY2VsbF9fLnRhYmxlX2ZvbnRfc2l6ZSxpPXRoaXMuaW50ZXJuYWwuc2NhbGVGYWN0b3I7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihuKXt2YXIgaT10W25dO3JldHVybiB0aGlzLnNwbGl0VGV4dFRvU2l6ZShpLmhhc093blByb3BlcnR5KFwidGV4dFwiKT9pLnRleHQ6aSxlW25dLXItcil9LHRoaXMpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRMaW5lSGVpZ2h0RmFjdG9yKCkqdC5sZW5ndGgqbi9pK3Ircn0sdGhpcykucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZSl9LDApfTtlLnNldFRhYmxlSGVhZGVyUm93PWZ1bmN0aW9uKHQpe2kuY2FsbCh0aGlzKSx0aGlzLmludGVybmFsLl9fY2VsbF9fLnRhYmxlSGVhZGVyUm93PXR9LGUucHJpbnRIZWFkZXJSb3c9ZnVuY3Rpb24odCxlKXtpZihpLmNhbGwodGhpcyksIXRoaXMuaW50ZXJuYWwuX19jZWxsX18udGFibGVIZWFkZXJSb3cpdGhyb3cgbmV3IEVycm9yKFwiUHJvcGVydHkgdGFibGVIZWFkZXJSb3cgZG9lcyBub3QgZXhpc3QuXCIpO3ZhciByO2lmKG49ITAsXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5pbnRlcm5hbC5fX2NlbGxfXy5oZWFkZXJGdW5jdGlvbil7dmFyIGE9dGhpcy5pbnRlcm5hbC5fX2NlbGxfXy5oZWFkZXJGdW5jdGlvbih0aGlzLHRoaXMuaW50ZXJuYWwuX19jZWxsX18ucGFnZXMpO3RoaXMuaW50ZXJuYWwuX19jZWxsX18ubGFzdENlbGw9bmV3IG8oYVswXSxhWzFdLGFbMl0sYVszXSx2b2lkIDAsLTEpfXRoaXMuc2V0Rm9udCh2b2lkIDAsXCJib2xkXCIpO2Zvcih2YXIgdT1bXSxjPTA7Yzx0aGlzLmludGVybmFsLl9fY2VsbF9fLnRhYmxlSGVhZGVyUm93Lmxlbmd0aDtjKz0xKXtyPXRoaXMuaW50ZXJuYWwuX19jZWxsX18udGFibGVIZWFkZXJSb3dbY10uY2xvbmUoKSxlJiYoci55PXRoaXMuaW50ZXJuYWwuX19jZWxsX18ubWFyZ2lucy50b3B8fDAsdS5wdXNoKHIpKSxyLmxpbmVOdW1iZXI9dDt2YXIgbD10aGlzLmdldFRleHRDb2xvcigpO3RoaXMuc2V0VGV4dENvbG9yKHRoaXMuaW50ZXJuYWwuX19jZWxsX18uaGVhZGVyVGV4dENvbG9yKSx0aGlzLnNldEZpbGxDb2xvcih0aGlzLmludGVybmFsLl9fY2VsbF9fLmhlYWRlckJhY2tncm91bmRDb2xvcikscy5jYWxsKHRoaXMsciksdGhpcy5zZXRUZXh0Q29sb3IobCl9dS5sZW5ndGg+MCYmdGhpcy5zZXRUYWJsZUhlYWRlclJvdyh1KSx0aGlzLnNldEZvbnQodm9pZCAwLFwibm9ybWFsXCIpLG49ITF9fShFLkFQSSk7dmFyIGt0PXtpdGFsaWM6W1wiaXRhbGljXCIsXCJvYmxpcXVlXCIsXCJub3JtYWxcIl0sb2JsaXF1ZTpbXCJvYmxpcXVlXCIsXCJpdGFsaWNcIixcIm5vcm1hbFwiXSxub3JtYWw6W1wibm9ybWFsXCIsXCJvYmxpcXVlXCIsXCJpdGFsaWNcIl19LEZ0PVtcInVsdHJhLWNvbmRlbnNlZFwiLFwiZXh0cmEtY29uZGVuc2VkXCIsXCJjb25kZW5zZWRcIixcInNlbWktY29uZGVuc2VkXCIsXCJub3JtYWxcIixcInNlbWktZXhwYW5kZWRcIixcImV4cGFuZGVkXCIsXCJleHRyYS1leHBhbmRlZFwiLFwidWx0cmEtZXhwYW5kZWRcIl0sSXQ9UHQoRnQpLEN0PVsxMDAsMjAwLDMwMCw0MDAsNTAwLDYwMCw3MDAsODAwLDkwMF0sanQ9UHQoQ3QpO2Z1bmN0aW9uIE90KHQpe3ZhciBlPXQuZmFtaWx5LnJlcGxhY2UoL1wifCcvZyxcIlwiKS50b0xvd2VyQ2FzZSgpLHI9ZnVuY3Rpb24odCl7cmV0dXJuIGt0W3Q9dHx8XCJub3JtYWxcIl0/dDpcIm5vcm1hbFwifSh0LnN0eWxlKSxuPWZ1bmN0aW9uKHQpe3JldHVybiB0P1wibnVtYmVyXCI9PXR5cGVvZiB0P3Q+PTEwMCYmdDw9OTAwJiZ0JTEwMD09MD90OjQwMDovXlxcZDAwJC8udGVzdCh0KT9wYXJzZUludCh0KTpcImJvbGRcIj09PXQ/NzAwOjQwMDo0MDB9KHQud2VpZ2h0KSxpPWZ1bmN0aW9uKHQpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBJdFt0PXR8fFwibm9ybWFsXCJdP3Q6XCJub3JtYWxcIn0odC5zdHJldGNoKTtyZXR1cm57ZmFtaWx5OmUsc3R5bGU6cix3ZWlnaHQ6bixzdHJldGNoOmksc3JjOnQuc3JjfHxbXSxyZWY6dC5yZWZ8fHtuYW1lOmUsc3R5bGU6W2kscixuXS5qb2luKFwiIFwiKX19fWZ1bmN0aW9uIEJ0KHQsZSxyLG4pe3ZhciBpO2ZvcihpPXI7aT49MCYmaTxlLmxlbmd0aDtpKz1uKWlmKHRbZVtpXV0pcmV0dXJuIHRbZVtpXV07Zm9yKGk9cjtpPj0wJiZpPGUubGVuZ3RoO2ktPW4paWYodFtlW2ldXSlyZXR1cm4gdFtlW2ldXX12YXIgTXQ9e1wic2Fucy1zZXJpZlwiOlwiaGVsdmV0aWNhXCIsZml4ZWQ6XCJjb3VyaWVyXCIsbW9ub3NwYWNlOlwiY291cmllclwiLHRlcm1pbmFsOlwiY291cmllclwiLGN1cnNpdmU6XCJ0aW1lc1wiLGZhbnRhc3k6XCJ0aW1lc1wiLHNlcmlmOlwidGltZXNcIn0scXQ9e2NhcHRpb246XCJ0aW1lc1wiLGljb246XCJ0aW1lc1wiLG1lbnU6XCJ0aW1lc1wiLFwibWVzc2FnZS1ib3hcIjpcInRpbWVzXCIsXCJzbWFsbC1jYXB0aW9uXCI6XCJ0aW1lc1wiLFwic3RhdHVzLWJhclwiOlwidGltZXNcIn07ZnVuY3Rpb24gRXQodCl7cmV0dXJuW3Quc3RyZXRjaCx0LnN0eWxlLHQud2VpZ2h0LHQuZmFtaWx5XS5qb2luKFwiIFwiKX1mdW5jdGlvbiBSdCh0KXtyZXR1cm4gdC50cmltTGVmdCgpfWZ1bmN0aW9uIER0KHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDspe2lmKHQuY2hhckF0KHIpPT09ZSlyZXR1cm5bdC5zdWJzdHJpbmcoMCxyKSx0LnN1YnN0cmluZyhyKzEpXTtyKz0xfXJldHVybiBudWxsfWZ1bmN0aW9uIFR0KHQpe3ZhciBlPXQubWF0Y2goL14oLVthLXpfXXxbYS16X10pW2EtejAtOV8tXSovaSk7cmV0dXJuIG51bGw9PT1lP251bGw6W2VbMF0sdC5zdWJzdHJpbmcoZVswXS5sZW5ndGgpXX12YXIgenQsVXQsSHQsV3QsVnQsR3Q9W1widGltZXNcIl07ZnVuY3Rpb24gWXQodCxyLG4saSxhKXt2YXIgbz00LHM9S3Q7c3dpdGNoKGEpe2Nhc2UgRS5BUEkuaW1hZ2VfY29tcHJlc3Npb24uRkFTVDpvPTEscz1YdDticmVhaztjYXNlIEUuQVBJLmltYWdlX2NvbXByZXNzaW9uLk1FRElVTTpvPTYscz1adDticmVhaztjYXNlIEUuQVBJLmltYWdlX2NvbXByZXNzaW9uLlNMT1c6bz05LHM9JHR9dD1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGksYT10Lmxlbmd0aC9lLG89bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgrYSkscz1bSnQsWHQsS3QsWnQsJHRdLHU9MDt1PGE7dSs9MSl7dmFyIGM9dSplLGw9dC5zdWJhcnJheShjLGMrZSk7aWYobilvLnNldChuKGwscixpKSxjK3UpO2Vsc2V7Zm9yKHZhciBoPXMubGVuZ3RoLGY9W10sZD0wO2Q8aDtkKz0xKWZbZF09c1tkXShsLHIsaSk7dmFyIHA9dGUoZi5jb25jYXQoKSk7by5zZXQoZltwXSxjK3UpfWk9bH1yZXR1cm4gb30odCxyLE1hdGguY2VpbChuKmkvOCkscyk7dmFyIHU9ZSh0LHtsZXZlbDpvfSk7cmV0dXJuIEUuQVBJLl9fYWRkaW1hZ2VfXy5hcnJheUJ1ZmZlclRvQmluYXJ5U3RyaW5nKHUpfWZ1bmN0aW9uIEp0KHQpe3ZhciBlPUFycmF5LmFwcGx5KFtdLHQpO3JldHVybiBlLnVuc2hpZnQoMCksZX1mdW5jdGlvbiBYdCh0LGUpe3ZhciByPXQubGVuZ3RoLG49W107blswXT0xO2Zvcih2YXIgaT0wO2k8cjtpKz0xKXt2YXIgYT10W2ktZV18fDA7bltpKzFdPXRbaV0tYSsyNTYmMjU1fXJldHVybiBufWZ1bmN0aW9uIEt0KHQsZSxyKXt2YXIgbj10Lmxlbmd0aCxpPVtdO2lbMF09Mjtmb3IodmFyIGE9MDthPG47YSs9MSl7dmFyIG89ciYmclthXXx8MDtpW2ErMV09dFthXS1vKzI1NiYyNTV9cmV0dXJuIGl9ZnVuY3Rpb24gWnQodCxlLHIpe3ZhciBuPXQubGVuZ3RoLGk9W107aVswXT0zO2Zvcih2YXIgYT0wO2E8bjthKz0xKXt2YXIgbz10W2EtZV18fDAscz1yJiZyW2FdfHwwO2lbYSsxXT10W2FdKzI1Ni0obytzPj4+MSkmMjU1fXJldHVybiBpfWZ1bmN0aW9uICR0KHQsZSxyKXt2YXIgbj10Lmxlbmd0aCxpPVtdO2lbMF09NDtmb3IodmFyIGE9MDthPG47YSs9MSl7dmFyIG89UXQodFthLWVdfHwwLHImJnJbYV18fDAsciYmclthLWVdfHwwKTtpW2ErMV09dFthXS1vKzI1NiYyNTV9cmV0dXJuIGl9ZnVuY3Rpb24gUXQodCxlLHIpe2lmKHQ9PT1lJiZlPT09cilyZXR1cm4gdDt2YXIgbj1NYXRoLmFicyhlLXIpLGk9TWF0aC5hYnModC1yKSxhPU1hdGguYWJzKHQrZS1yLXIpO3JldHVybiBuPD1pJiZuPD1hP3Q6aTw9YT9lOnJ9ZnVuY3Rpb24gdGUodCl7dmFyIGU9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrTWF0aC5hYnMoZSl9LDApfSk7cmV0dXJuIGUuaW5kZXhPZihNYXRoLm1pbi5hcHBseShudWxsLGUpKX1mdW5jdGlvbiBlZSh0LGUscil7dmFyIG49ZSpyLGk9TWF0aC5mbG9vcihuLzgpLGE9MTYtKG4tOCppK3IpLG89KDE8PHIpLTE7cmV0dXJuIG5lKHQsaSk+PmEmb31mdW5jdGlvbiByZSh0LGUscixuKXt2YXIgaT1yKm4sYT1NYXRoLmZsb29yKGkvOCksbz0xNi0oaS04KmErbikscz0oMTw8biktMSx1PShlJnMpPDxvOyFmdW5jdGlvbih0LGUscil7aWYoZSsxPHQuYnl0ZUxlbmd0aCl0LnNldFVpbnQxNihlLHIsITEpO2Vsc2V7dmFyIG49cj4+OCYyNTU7dC5zZXRVaW50OChlLG4pfX1cbi8qKlxuICogQGxpY2Vuc2VcbiAqIChjKSBEZWFuIE1jTmFtZWUgPGRlYW5AZ21haWwuY29tPiwgMjAxMy5cbiAqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZGVhbm0vb21nZ2lmXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbiAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4gKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3JcbiAqIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbiAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1NcbiAqIElOIFRIRSBTT0ZUV0FSRS5cbiAqXG4gKiBvbWdnaWYgaXMgYSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIGEgR0lGIDg5YSBlbmNvZGVyIGFuZCBkZWNvZGVyLFxuICogaW5jbHVkaW5nIGFuaW1hdGlvbiBhbmQgY29tcHJlc3Npb24uICBJdCBkb2VzIG5vdCByZWx5IG9uIGFueSBzcGVjaWZpY1xuICogdW5kZXJseWluZyBzeXN0ZW0sIHNvIHNob3VsZCBydW4gaW4gdGhlIGJyb3dzZXIsIE5vZGUsIG9yIFBsYXNrLlxuICovKHQsYSxuZSh0LGEpJn4oczw8bykmNjU1MzV8dSl9ZnVuY3Rpb24gbmUodCxlKXtyZXR1cm4gZSsxPHQuYnl0ZUxlbmd0aD90LmdldFVpbnQxNihlLCExKTp0LmdldFVpbnQ4KGUpPDw4fWZ1bmN0aW9uIGllKHQpe3ZhciBlPTA7aWYoNzEhPT10W2UrK118fDczIT09dFtlKytdfHw3MCE9PXRbZSsrXXx8NTYhPT10W2UrK118fDU2IT0odFtlKytdKzEmMjUzKXx8OTchPT10W2UrK10pdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBHSUYgODdhLzg5YSBoZWFkZXIuXCIpO3ZhciByPXRbZSsrXXx0W2UrK108PDgsbj10W2UrK118dFtlKytdPDw4LGk9dFtlKytdLGE9aT4+NyxvPTE8PDErKDcmaSk7dFtlKytdLHRbZSsrXTt2YXIgcz1udWxsLHU9bnVsbDthJiYocz1lLHU9byxlKz0zKm8pO3ZhciBjPSEwLGw9W10saD0wLGY9bnVsbCxkPTAscD1udWxsO2Zvcih0aGlzLndpZHRoPXIsdGhpcy5oZWlnaHQ9bjtjJiZlPHQubGVuZ3RoOylzd2l0Y2godFtlKytdKXtjYXNlIDMzOnN3aXRjaCh0W2UrK10pe2Nhc2UgMjU1OmlmKDExIT09dFtlXXx8Nzg9PXRbZSsxXSYmNjk9PXRbZSsyXSYmODQ9PXRbZSszXSYmODM9PXRbZSs0XSYmNjc9PXRbZSs1XSYmNjU9PXRbZSs2XSYmODA9PXRbZSs3XSYmNjk9PXRbZSs4XSYmNTA9PXRbZSs5XSYmNDY9PXRbZSsxMF0mJjQ4PT10W2UrMTFdJiYzPT10W2UrMTJdJiYxPT10W2UrMTNdJiYwPT10W2UrMTZdKWUrPTE0LHA9dFtlKytdfHRbZSsrXTw8OCxlKys7ZWxzZSBmb3IoZSs9MTI7Oyl7aWYoISgoUD10W2UrK10pPj0wKSl0aHJvdyBFcnJvcihcIkludmFsaWQgYmxvY2sgc2l6ZVwiKTtpZigwPT09UClicmVhaztlKz1QfWJyZWFrO2Nhc2UgMjQ5OmlmKDQhPT10W2UrK118fDAhPT10W2UrNF0pdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBncmFwaGljcyBleHRlbnNpb24gYmxvY2suXCIpO3ZhciBnPXRbZSsrXTtoPXRbZSsrXXx0W2UrK108PDgsZj10W2UrK10sMSZnfHwoZj1udWxsKSxkPWc+PjImNyxlKys7YnJlYWs7Y2FzZSAyNTQ6Zm9yKDs7KXtpZighKChQPXRbZSsrXSk+PTApKXRocm93IEVycm9yKFwiSW52YWxpZCBibG9jayBzaXplXCIpO2lmKDA9PT1QKWJyZWFrO2UrPVB9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGdyYXBoaWMgY29udHJvbCBsYWJlbDogMHhcIit0W2UtMV0udG9TdHJpbmcoMTYpKX1icmVhaztjYXNlIDQ0OnZhciBtPXRbZSsrXXx0W2UrK108PDgsdj10W2UrK118dFtlKytdPDw4LGI9dFtlKytdfHRbZSsrXTw8OCx5PXRbZSsrXXx0W2UrK108PDgsdz10W2UrK10sTj13Pj42JjEsTD0xPDwxKyg3JncpLHg9cyxBPXUsUz0hMTt3Pj43JiYoUz0hMCx4PWUsQT1MLGUrPTMqTCk7dmFyIF89ZTtmb3IoZSsrOzspe3ZhciBQO2lmKCEoKFA9dFtlKytdKT49MCkpdGhyb3cgRXJyb3IoXCJJbnZhbGlkIGJsb2NrIHNpemVcIik7aWYoMD09PVApYnJlYWs7ZSs9UH1sLnB1c2goe3g6bSx5OnYsd2lkdGg6YixoZWlnaHQ6eSxoYXNfbG9jYWxfcGFsZXR0ZTpTLHBhbGV0dGVfb2Zmc2V0OngscGFsZXR0ZV9zaXplOkEsZGF0YV9vZmZzZXQ6XyxkYXRhX2xlbmd0aDplLV8sdHJhbnNwYXJlbnRfaW5kZXg6ZixpbnRlcmxhY2VkOiEhTixkZWxheTpoLGRpc3Bvc2FsOmR9KTticmVhaztjYXNlIDU5OmM9ITE7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGdpZiBibG9jazogMHhcIit0W2UtMV0udG9TdHJpbmcoMTYpKX10aGlzLm51bUZyYW1lcz1mdW5jdGlvbigpe3JldHVybiBsLmxlbmd0aH0sdGhpcy5sb29wQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gcH0sdGhpcy5mcmFtZUluZm89ZnVuY3Rpb24odCl7aWYodDwwfHx0Pj1sLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJGcmFtZSBpbmRleCBvdXQgb2YgcmFuZ2UuXCIpO3JldHVybiBsW3RdfSx0aGlzLmRlY29kZUFuZEJsaXRGcmFtZUJHUkE9ZnVuY3Rpb24oZSxuKXt2YXIgaT10aGlzLmZyYW1lSW5mbyhlKSxhPWkud2lkdGgqaS5oZWlnaHQ7aWYoYT41MzY4NzA5MTIpdGhyb3cgbmV3IEVycm9yKFwiSW1hZ2UgZGltZW5zaW9ucyBleGNlZWQgNTEyTUIsIHdoaWNoIGlzIHRvbyBsYXJnZS5cIik7dmFyIG89bmV3IFVpbnQ4QXJyYXkoYSk7YWUodCxpLmRhdGFfb2Zmc2V0LG8sYSk7dmFyIHM9aS5wYWxldHRlX29mZnNldCx1PWkudHJhbnNwYXJlbnRfaW5kZXg7bnVsbD09PXUmJih1PTI1Nik7dmFyIGM9aS53aWR0aCxsPXItYyxoPWMsZj00KihpLnkqcitpLngpLGQ9NCooKGkueStpLmhlaWdodCkqcitpLngpLHA9ZixnPTQqbDshMD09PWkuaW50ZXJsYWNlZCYmKGcrPTQqcio3KTtmb3IodmFyIG09OCx2PTAsYj1vLmxlbmd0aDt2PGI7Kyt2KXt2YXIgeT1vW3ZdO2lmKDA9PT1oJiYoaD1jLChwKz1nKT49ZCYmKGc9NCpsKzQqcioobS0xKSxwPWYrKGMrbCkqKG08PDEpLG0+Pj0xKSkseT09PXUpcCs9NDtlbHNle3ZhciB3PXRbcyszKnldLE49dFtzKzMqeSsxXSxMPXRbcyszKnkrMl07bltwKytdPUwsbltwKytdPU4sbltwKytdPXcsbltwKytdPTI1NX0tLWh9fSx0aGlzLmRlY29kZUFuZEJsaXRGcmFtZVJHQkE9ZnVuY3Rpb24oZSxuKXt2YXIgaT10aGlzLmZyYW1lSW5mbyhlKSxhPWkud2lkdGgqaS5oZWlnaHQ7aWYoYT41MzY4NzA5MTIpdGhyb3cgbmV3IEVycm9yKFwiSW1hZ2UgZGltZW5zaW9ucyBleGNlZWQgNTEyTUIsIHdoaWNoIGlzIHRvbyBsYXJnZS5cIik7dmFyIG89bmV3IFVpbnQ4QXJyYXkoYSk7YWUodCxpLmRhdGFfb2Zmc2V0LG8sYSk7dmFyIHM9aS5wYWxldHRlX29mZnNldCx1PWkudHJhbnNwYXJlbnRfaW5kZXg7bnVsbD09PXUmJih1PTI1Nik7dmFyIGM9aS53aWR0aCxsPXItYyxoPWMsZj00KihpLnkqcitpLngpLGQ9NCooKGkueStpLmhlaWdodCkqcitpLngpLHA9ZixnPTQqbDshMD09PWkuaW50ZXJsYWNlZCYmKGcrPTQqcio3KTtmb3IodmFyIG09OCx2PTAsYj1vLmxlbmd0aDt2PGI7Kyt2KXt2YXIgeT1vW3ZdO2lmKDA9PT1oJiYoaD1jLChwKz1nKT49ZCYmKGc9NCpsKzQqcioobS0xKSxwPWYrKGMrbCkqKG08PDEpLG0+Pj0xKSkseT09PXUpcCs9NDtlbHNle3ZhciB3PXRbcyszKnldLE49dFtzKzMqeSsxXSxMPXRbcyszKnkrMl07bltwKytdPXcsbltwKytdPU4sbltwKytdPUwsbltwKytdPTI1NX0tLWh9fX1mdW5jdGlvbiBhZSh0LGUscixuKXtmb3IodmFyIGk9dFtlKytdLGE9MTw8aSxzPWErMSx1PXMrMSxjPWkrMSxsPSgxPDxjKS0xLGg9MCxmPTAsZD0wLHA9dFtlKytdLGc9bmV3IEludDMyQXJyYXkoNDA5NiksbT1udWxsOzspe2Zvcig7aDwxNiYmMCE9PXA7KWZ8PXRbZSsrXTw8aCxoKz04LDE9PT1wP3A9dFtlKytdOi0tcDtpZihoPGMpYnJlYWs7dmFyIHY9ZiZsO2lmKGY+Pj1jLGgtPWMsdiE9PWEpe2lmKHY9PT1zKWJyZWFrO2Zvcih2YXIgYj12PHU/djptLHk9MCx3PWI7dz5hOyl3PWdbd10+PjgsKyt5O3ZhciBOPXc7aWYoZCt5KyhiIT09dj8xOjApPm4pcmV0dXJuIHZvaWQgby5sb2coXCJXYXJuaW5nLCBnaWYgc3RyZWFtIGxvbmdlciB0aGFuIGV4cGVjdGVkLlwiKTtyW2QrK109Tjt2YXIgTD1kKz15O2ZvcihiIT09diYmKHJbZCsrXT1OKSx3PWI7eS0tOyl3PWdbd10sclstLUxdPTI1NSZ3LHc+Pj04O251bGwhPT1tJiZ1PDQwOTYmJihnW3UrK109bTw8OHxOLHU+PWwrMSYmYzwxMiYmKCsrYyxsPWw8PDF8MSkpLG09dn1lbHNlIHU9cysxLGw9KDE8PChjPWkrMSkpLTEsbT1udWxsfXJldHVybiBkIT09biYmby5sb2coXCJXYXJuaW5nLCBnaWYgc3RyZWFtIHNob3J0ZXIgdGhhbiBleHBlY3RlZC5cIikscn1cbi8qKlxuICogQGxpY2Vuc2VcbiAgQ29weXJpZ2h0IChjKSAyMDA4LCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZFxuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBcbiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuICBtZXQ6XG5cbiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIFxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gIFxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBcbiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICBcbiAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkIG5vciB0aGUgbmFtZXMgb2YgaXRzIFxuICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIFxuICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG5cbiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTXG4gIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sXG4gIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVJcbiAgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBcbiAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsXG4gIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTyxcbiAgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SXG4gIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0ZcbiAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkdcbiAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG4gIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9mdW5jdGlvbiBvZSh0KXt2YXIgZSxyLG4saSxhLG89TWF0aC5mbG9vcixzPW5ldyBBcnJheSg2NCksdT1uZXcgQXJyYXkoNjQpLGM9bmV3IEFycmF5KDY0KSxsPW5ldyBBcnJheSg2NCksaD1uZXcgQXJyYXkoNjU1MzUpLGY9bmV3IEFycmF5KDY1NTM1KSxkPW5ldyBBcnJheSg2NCkscD1uZXcgQXJyYXkoNjQpLGc9W10sbT0wLHY9NyxiPW5ldyBBcnJheSg2NCkseT1uZXcgQXJyYXkoNjQpLHc9bmV3IEFycmF5KDY0KSxOPW5ldyBBcnJheSgyNTYpLEw9bmV3IEFycmF5KDIwNDgpLHg9WzAsMSw1LDYsMTQsMTUsMjcsMjgsMiw0LDcsMTMsMTYsMjYsMjksNDIsMyw4LDEyLDE3LDI1LDMwLDQxLDQzLDksMTEsMTgsMjQsMzEsNDAsNDQsNTMsMTAsMTksMjMsMzIsMzksNDUsNTIsNTQsMjAsMjIsMzMsMzgsNDYsNTEsNTUsNjAsMjEsMzQsMzcsNDcsNTAsNTYsNTksNjEsMzUsMzYsNDgsNDksNTcsNTgsNjIsNjNdLEE9WzAsMCwxLDUsMSwxLDEsMSwxLDEsMCwwLDAsMCwwLDAsMF0sUz1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMV0sXz1bMCwwLDIsMSwzLDMsMiw0LDMsNSw1LDQsNCwwLDAsMSwxMjVdLFA9WzEsMiwzLDAsNCwxNyw1LDE4LDMzLDQ5LDY1LDYsMTksODEsOTcsNywzNCwxMTMsMjAsNTAsMTI5LDE0NSwxNjEsOCwzNSw2NiwxNzcsMTkzLDIxLDgyLDIwOSwyNDAsMzYsNTEsOTgsMTE0LDEzMCw5LDEwLDIyLDIzLDI0LDI1LDI2LDM3LDM4LDM5LDQwLDQxLDQyLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MF0saz1bMCwwLDMsMSwxLDEsMSwxLDEsMSwxLDEsMCwwLDAsMCwwXSxGPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExXSxJPVswLDAsMiwxLDIsNCw0LDMsNCw3LDUsNCw0LDAsMSwyLDExOV0sQz1bMCwxLDIsMywxNyw0LDUsMzMsNDksNiwxOCw2NSw4MSw3LDk3LDExMywxOSwzNCw1MCwxMjksOCwyMCw2NiwxNDUsMTYxLDE3NywxOTMsOSwzNSw1MSw4MiwyNDAsMjEsOTgsMTE0LDIwOSwxMCwyMiwzNiw1MiwyMjUsMzcsMjQxLDIzLDI0LDI1LDI2LDM4LDM5LDQwLDQxLDQyLDUzLDU0LDU1LDU2LDU3LDU4LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwXTtmdW5jdGlvbiBqKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9bmV3IEFycmF5LGE9MTthPD0xNjthKyspe2Zvcih2YXIgbz0xO288PXRbYV07bysrKWlbZVtuXV09W10saVtlW25dXVswXT1yLGlbZVtuXV1bMV09YSxuKysscisrO3IqPTJ9cmV0dXJuIGl9ZnVuY3Rpb24gTyh0KXtmb3IodmFyIGU9dFswXSxyPXRbMV0tMTtyPj0wOyllJjE8PHImJihtfD0xPDx2KSxyLS0sLS12PDAmJigyNTU9PW0/KEIoMjU1KSxCKDApKTpCKG0pLHY9NyxtPTApfWZ1bmN0aW9uIEIodCl7Zy5wdXNoKHQpfWZ1bmN0aW9uIE0odCl7Qih0Pj44JjI1NSksQigyNTUmdCl9ZnVuY3Rpb24gcSh0LGUscixuLGkpe2Zvcih2YXIgYSxvPWlbMF0scz1pWzI0MF0sdT1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyx1LGMsbCxoLGY9MDtmb3IobD0wO2w8ODsrK2wpe3I9dFtmXSxuPXRbZisxXSxpPXRbZisyXSxhPXRbZiszXSxvPXRbZis0XSxzPXRbZis1XSx1PXRbZis2XTt2YXIgcD1yKyhjPXRbZis3XSksZz1yLWMsbT1uK3Usdj1uLXUsYj1pK3MseT1pLXMsdz1hK28sTj1hLW8sTD1wK3cseD1wLXcsQT1tK2IsUz1tLWI7dFtmXT1MK0EsdFtmKzRdPUwtQTt2YXIgXz0uNzA3MTA2NzgxKihTK3gpO3RbZisyXT14K18sdFtmKzZdPXgtXzt2YXIgUD0uMzgyNjgzNDMzKigoTD1OK3kpLShTPXYrZykpLGs9LjU0MTE5NjEqTCtQLEY9MS4zMDY1NjI5NjUqUytQLEk9LjcwNzEwNjc4MSooQT15K3YpLEM9ZytJLGo9Zy1JO3RbZis1XT1qK2ssdFtmKzNdPWotayx0W2YrMV09QytGLHRbZis3XT1DLUYsZis9OH1mb3IoZj0wLGw9MDtsPDg7KytsKXtyPXRbZl0sbj10W2YrOF0saT10W2YrMTZdLGE9dFtmKzI0XSxvPXRbZiszMl0scz10W2YrNDBdLHU9dFtmKzQ4XTt2YXIgTz1yKyhjPXRbZis1Nl0pLEI9ci1jLE09bit1LHE9bi11LEU9aStzLFI9aS1zLEQ9YStvLFQ9YS1vLHo9TytELFU9Ty1ELEg9TStFLFc9TS1FO3RbZl09eitILHRbZiszMl09ei1IO3ZhciBWPS43MDcxMDY3ODEqKFcrVSk7dFtmKzE2XT1VK1YsdFtmKzQ4XT1VLVY7dmFyIEc9LjM4MjY4MzQzMyooKHo9VCtSKS0oVz1xK0IpKSxZPS41NDExOTYxKnorRyxKPTEuMzA2NTYyOTY1KlcrRyxYPS43MDcxMDY3ODEqKEg9UitxKSxLPUIrWCxaPUItWDt0W2YrNDBdPVorWSx0W2YrMjRdPVotWSx0W2YrOF09SytKLHRbZis1Nl09Sy1KLGYrK31mb3IobD0wO2w8NjQ7KytsKWg9dFtsXSplW2xdLGRbbF09aD4wP2grLjV8MDpoLS41fDA7cmV0dXJuIGR9KHQsZSksYz0wO2M8NjQ7KytjKXBbeFtjXV09dVtjXTt2YXIgbD1wWzBdLXI7cj1wWzBdLDA9PWw/TyhuWzBdKTooTyhuW2ZbYT0zMjc2NytsXV0pLE8oaFthXSkpO2Zvcih2YXIgZz02MztnPjAmJjA9PXBbZ107KWctLTtpZigwPT1nKXJldHVybiBPKG8pLHI7Zm9yKHZhciBtLHY9MTt2PD1nOyl7Zm9yKHZhciBiPXY7MD09cFt2XSYmdjw9ZzspKyt2O3ZhciB5PXYtYjtpZih5Pj0xNil7bT15Pj40O2Zvcih2YXIgdz0xO3c8PW07Kyt3KU8ocyk7eSY9MTV9YT0zMjc2NytwW3ZdLE8oaVsoeTw8NCkrZlthXV0pLE8oaFthXSksdisrfXJldHVybiA2MyE9ZyYmTyhvKSxyfWZ1bmN0aW9uIEUodCl7dD1NYXRoLm1pbihNYXRoLm1heCh0LDEpLDEwMCksYSE9dCYmKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bMTYsMTEsMTAsMTYsMjQsNDAsNTEsNjEsMTIsMTIsMTQsMTksMjYsNTgsNjAsNTUsMTQsMTMsMTYsMjQsNDAsNTcsNjksNTYsMTQsMTcsMjIsMjksNTEsODcsODAsNjIsMTgsMjIsMzcsNTYsNjgsMTA5LDEwMyw3NywyNCwzNSw1NSw2NCw4MSwxMDQsMTEzLDkyLDQ5LDY0LDc4LDg3LDEwMywxMjEsMTIwLDEwMSw3Miw5Miw5NSw5OCwxMTIsMTAwLDEwMyw5OV0scj0wO3I8NjQ7cisrKXt2YXIgbj1vKChlW3JdKnQrNTApLzEwMCk7bj1NYXRoLm1pbihNYXRoLm1heChuLDEpLDI1NSksc1t4W3JdXT1ufWZvcih2YXIgaT1bMTcsMTgsMjQsNDcsOTksOTksOTksOTksMTgsMjEsMjYsNjYsOTksOTksOTksOTksMjQsMjYsNTYsOTksOTksOTksOTksOTksNDcsNjYsOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTksOTldLGE9MDthPDY0O2ErKyl7dmFyIGg9bygoaVthXSp0KzUwKS8xMDApO2g9TWF0aC5taW4oTWF0aC5tYXgoaCwxKSwyNTUpLHVbeFthXV09aH1mb3IodmFyIGY9WzEsMS4zODcwMzk4NDUsMS4zMDY1NjI5NjUsMS4xNzU4NzU2MDIsMSwuNzg1Njk0OTU4LC41NDExOTYxLC4yNzU4OTkzNzldLGQ9MCxwPTA7cDw4O3ArKylmb3IodmFyIGc9MDtnPDg7ZysrKWNbZF09MS8oc1t4W2RdXSpmW3BdKmZbZ10qOCksbFtkXT0xLyh1W3hbZF1dKmZbcF0qZltnXSo4KSxkKyt9KHQ8NTA/TWF0aC5mbG9vcig1ZTMvdCk6TWF0aC5mbG9vcigyMDAtMip0KSksYT10KX10aGlzLmVuY29kZT1mdW5jdGlvbih0LGEpe2EmJkUoYSksZz1uZXcgQXJyYXksbT0wLHY9NyxNKDY1NDk2KSxNKDY1NTA0KSxNKDE2KSxCKDc0KSxCKDcwKSxCKDczKSxCKDcwKSxCKDApLEIoMSksQigxKSxCKDApLE0oMSksTSgxKSxCKDApLEIoMCksZnVuY3Rpb24oKXtNKDY1NDk5KSxNKDEzMiksQigwKTtmb3IodmFyIHQ9MDt0PDY0O3QrKylCKHNbdF0pO0IoMSk7Zm9yKHZhciBlPTA7ZTw2NDtlKyspQih1W2VdKX0oKSxmdW5jdGlvbih0LGUpe00oNjU0NzIpLE0oMTcpLEIoOCksTShlKSxNKHQpLEIoMyksQigxKSxCKDE3KSxCKDApLEIoMiksQigxNyksQigxKSxCKDMpLEIoMTcpLEIoMSl9KHQud2lkdGgsdC5oZWlnaHQpLGZ1bmN0aW9uKCl7TSg2NTQ3NiksTSg0MTgpLEIoMCk7Zm9yKHZhciB0PTA7dDwxNjt0KyspQihBW3QrMV0pO2Zvcih2YXIgZT0wO2U8PTExO2UrKylCKFNbZV0pO0IoMTYpO2Zvcih2YXIgcj0wO3I8MTY7cisrKUIoX1tyKzFdKTtmb3IodmFyIG49MDtuPD0xNjE7bisrKUIoUFtuXSk7QigxKTtmb3IodmFyIGk9MDtpPDE2O2krKylCKGtbaSsxXSk7Zm9yKHZhciBhPTA7YTw9MTE7YSsrKUIoRlthXSk7QigxNyk7Zm9yKHZhciBvPTA7bzwxNjtvKyspQihJW28rMV0pO2Zvcih2YXIgcz0wO3M8PTE2MTtzKyspQihDW3NdKX0oKSxNKDY1NDk4KSxNKDEyKSxCKDMpLEIoMSksQigwKSxCKDIpLEIoMTcpLEIoMyksQigxNyksQigwKSxCKDYzKSxCKDApO3ZhciBvPTAsaD0wLGY9MDttPTAsdj03LHRoaXMuZW5jb2RlLmRpc3BsYXlOYW1lPVwiX2VuY29kZV9cIjtmb3IodmFyIGQscCxOLHgsaixSLEQsVCx6LFU9dC5kYXRhLEg9dC53aWR0aCxXPXQuaGVpZ2h0LFY9NCpILEc9MDtHPFc7KXtmb3IoZD0wO2Q8Vjspe2ZvcihqPVYqRytkLEQ9LTEsVD0wLHo9MDt6PDY0O3orKylSPWorKFQ9ej4+MykqVisoRD00Kig3JnopKSxHK1Q+PVcmJihSLT1WKihHKzErVC1XKSksZCtEPj1WJiYoUi09ZCtELVYrNCkscD1VW1IrK10sTj1VW1IrK10seD1VW1IrK10sYlt6XT0oTFtwXStMW04rMjU2fDBdK0xbeCs1MTJ8MF0+PjE2KS0xMjgseVt6XT0oTFtwKzc2OHwwXStMW04rMTAyNHwwXStMW3grMTI4MHwwXT4+MTYpLTEyOCx3W3pdPShMW3ArMTI4MHwwXStMW04rMTUzNnwwXStMW3grMTc5MnwwXT4+MTYpLTEyODtvPXEoYixjLG8sZSxuKSxoPXEoeSxsLGgscixpKSxmPXEodyxsLGYscixpKSxkKz0zMn1HKz04fWlmKHY+PTApe3ZhciBZPVtdO1lbMV09disxLFlbMF09KDE8PHYrMSktMSxPKFkpfXJldHVybiBNKDY1NDk3KSxuZXcgVWludDhBcnJheShnKX0sdD10fHw1MCxmdW5jdGlvbigpe2Zvcih2YXIgdD1TdHJpbmcuZnJvbUNoYXJDb2RlLGU9MDtlPDI1NjtlKyspTltlXT10KGUpfSgpLGU9aihBLFMpLHI9aihrLEYpLG49aihfLFApLGk9aihJLEMpLGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTEsZT0yLHI9MTtyPD0xNTtyKyspe2Zvcih2YXIgbj10O248ZTtuKyspZlszMjc2NytuXT1yLGhbMzI3Njcrbl09W10saFszMjc2NytuXVsxXT1yLGhbMzI3Njcrbl1bMF09bjtmb3IodmFyIGk9LShlLTEpO2k8PS10O2krKylmWzMyNzY3K2ldPXIsaFszMjc2NytpXT1bXSxoWzMyNzY3K2ldWzFdPXIsaFszMjc2NytpXVswXT1lLTEraTt0PDw9MSxlPDw9MX19KCksZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDI1Njt0KyspTFt0XT0xOTU5NSp0LExbdCsyNTZ8MF09Mzg0NzAqdCxMW3QrNTEyfDBdPTc0NzEqdCszMjc2OCxMW3QrNzY4fDBdPS0xMTA1OSp0LExbdCsxMDI0fDBdPS0yMTcwOSp0LExbdCsxMjgwfDBdPTMyNzY4KnQrODQyMTM3NSxMW3QrMTUzNnwwXT0tMjc0MzkqdCxMW3QrMTc5MnwwXT0tNTMyOSp0fSgpLEUodCl9XG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTcgQXJhcyBBYmJhc2lcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2VcbiAqL2Z1bmN0aW9uIHNlKHQsZSl7aWYodGhpcy5wb3M9MCx0aGlzLmJ1ZmZlcj10LHRoaXMuZGF0YXY9bmV3IERhdGFWaWV3KHQuYnVmZmVyKSx0aGlzLmlzX3dpdGhfYWxwaGE9ISFlLHRoaXMuYm90dG9tX3VwPSEwLHRoaXMuZmxhZz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuYnVmZmVyWzBdKStTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuYnVmZmVyWzFdKSx0aGlzLnBvcys9MiwtMT09PVtcIkJNXCIsXCJCQVwiLFwiQ0lcIixcIkNQXCIsXCJJQ1wiLFwiUFRcIl0uaW5kZXhPZih0aGlzLmZsYWcpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgQk1QIEZpbGVcIik7dGhpcy5wYXJzZUhlYWRlcigpLHRoaXMucGFyc2VCR1IoKX1mdW5jdGlvbiB1ZSh0KXtmdW5jdGlvbiBlKHQpe2lmKCF0KXRocm93IEVycm9yKFwiYXNzZXJ0IDpQXCIpfWZ1bmN0aW9uIHIodCxlLHIpe2Zvcih2YXIgbj0wOzQ+bjtuKyspaWYodFtlK25dIT1yLmNoYXJDb2RlQXQobikpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gbih0LGUscixuLGkpe2Zvcih2YXIgYT0wO2E8aTthKyspdFtlK2FdPXJbbithXX1mdW5jdGlvbiBpKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8bjtpKyspdFtlK2ldPXJ9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbmV3IEludDMyQXJyYXkodCl9ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0O24rKylyLnB1c2gobmV3IGUpO3JldHVybiByfWZ1bmN0aW9uIHModCxlKXt2YXIgcj1bXTtyZXR1cm4gZnVuY3Rpb24gdChyLG4saSl7Zm9yKHZhciBhPWlbbl0sbz0wO288YSYmKHIucHVzaChpLmxlbmd0aD5uKzE/W106bmV3IGUpLCEoaS5sZW5ndGg8bisxKSk7bysrKXQocltvXSxuKzEsaSl9KHIsMCx0KSxyfXZhciB1PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztmdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPTE8PGUtMT4+PjA7dCZyOylyPj4+PTE7cmV0dXJuIHI/KHQmci0xKStyOnR9ZnVuY3Rpb24gYyh0LHIsbixpLGEpe2UoIShpJW4pKTtkb3t0W3IrKGktPW4pXT1hfXdoaWxlKDA8aSl9ZnVuY3Rpb24gbCh0LHIsbixpLG8pe2lmKGUoMjMyOD49byksNTEyPj1vKXZhciBzPWEoNTEyKTtlbHNlIGlmKG51bGw9PShzPWEobykpKXJldHVybiAwO3JldHVybiBmdW5jdGlvbih0LHIsbixpLG8scyl7dmFyIGwsZixkPXIscD0xPDxuLGc9YSgxNiksbT1hKDE2KTtmb3IoZSgwIT1vKSxlKG51bGwhPWkpLGUobnVsbCE9dCksZSgwPG4pLGY9MDtmPG87KytmKXtpZigxNTxpW2ZdKXJldHVybiAwOysrZ1tpW2ZdXX1pZihnWzBdPT1vKXJldHVybiAwO2ZvcihtWzFdPTAsbD0xOzE1Pmw7KytsKXtpZihnW2xdPjE8PGwpcmV0dXJuIDA7bVtsKzFdPW1bbF0rZ1tsXX1mb3IoZj0wO2Y8bzsrK2YpbD1pW2ZdLDA8aVtmXSYmKHNbbVtsXSsrXT1mKTtpZigxPT1tWzE1XSlyZXR1cm4oaT1uZXcgaCkuZz0wLGkudmFsdWU9c1swXSxjKHQsZCwxLHAsaSkscDt2YXIgdixiPS0xLHk9cC0xLHc9MCxOPTEsTD0xLHg9MTw8bjtmb3IoZj0wLGw9MSxvPTI7bDw9bjsrK2wsbzw8PTEpe2lmKE4rPUw8PD0xLDA+KEwtPWdbbF0pKXJldHVybiAwO2Zvcig7MDxnW2xdOy0tZ1tsXSkoaT1uZXcgaCkuZz1sLGkudmFsdWU9c1tmKytdLGModCxkK3csbyx4LGkpLHc9dSh3LGwpfWZvcihsPW4rMSxvPTI7MTU+PWw7KytsLG88PD0xKXtpZihOKz1MPDw9MSwwPihMLT1nW2xdKSlyZXR1cm4gMDtmb3IoOzA8Z1tsXTstLWdbbF0pe2lmKGk9bmV3IGgsKHcmeSkhPWIpe2ZvcihkKz14LHY9MTw8KGI9bCktbjsxNT5iJiYhKDA+PSh2LT1nW2JdKSk7KSsrYix2PDw9MTtwKz14PTE8PCh2PWItbiksdFtyKyhiPXcmeSldLmc9dituLHRbcitiXS52YWx1ZT1kLXItYn1pLmc9bC1uLGkudmFsdWU9c1tmKytdLGModCxkKyh3Pj5uKSxvLHgsaSksdz11KHcsbCl9fXJldHVybiBOIT0yKm1bMTVdLTE/MDpwfSh0LHIsbixpLG8scyl9ZnVuY3Rpb24gaCgpe3RoaXMudmFsdWU9dGhpcy5nPTB9ZnVuY3Rpb24gZigpe3RoaXMudmFsdWU9dGhpcy5nPTB9ZnVuY3Rpb24gZCgpe3RoaXMuRz1vKDUsaCksdGhpcy5IPWEoNSksdGhpcy5qYz10aGlzLlFiPXRoaXMucWI9dGhpcy5uZD0wLHRoaXMucGQ9byhFcixmKX1mdW5jdGlvbiBwKHQscixuLGkpe2UobnVsbCE9dCksZShudWxsIT1yKSxlKDIxNDc0ODM2NDg+aSksdC5DYT0yNTQsdC5JPTAsdC5iPS04LHQuS2E9MCx0Lm9hPXIsdC5wYT1uLHQuSmQ9cix0LlljPW4raSx0LlpjPTQ8PWk/bitpLTQrMTpuLF8odCl9ZnVuY3Rpb24gZyh0LGUpe2Zvcih2YXIgcj0wOzA8ZS0tOylyfD1rKHQsMTI4KTw8ZTtyZXR1cm4gcn1mdW5jdGlvbiBtKHQsZSl7dmFyIHI9Zyh0LGUpO3JldHVybiBQKHQpPy1yOnJ9ZnVuY3Rpb24gdih0LHIsbixpKXt2YXIgYSxvPTA7Zm9yKGUobnVsbCE9dCksZShudWxsIT1yKSxlKDQyOTQ5NjcyODg+aSksdC5TYj1pLHQuUmE9MCx0LnU9MCx0Lmg9MCw0PGkmJihpPTQpLGE9MDthPGk7KythKW8rPXJbbithXTw8OCphO3QuUmE9byx0LmJiPWksdC5vYT1yLHQucGE9bn1mdW5jdGlvbiBiKHQpe2Zvcig7ODw9dC51JiZ0LmJiPHQuU2I7KXQuUmE+Pj49OCx0LlJhKz10Lm9hW3QucGErdC5iYl08PFRyLTg+Pj4wLCsrdC5iYix0LnUtPTg7eCh0KSYmKHQuaD0xLHQudT0wKX1mdW5jdGlvbiB5KHQscil7aWYoZSgwPD1yKSwhdC5oJiZyPD1Ecil7dmFyIG49TCh0KSZScltyXTtyZXR1cm4gdC51Kz1yLGIodCksbn1yZXR1cm4gdC5oPTEsdC51PTB9ZnVuY3Rpb24gdygpe3RoaXMuYj10aGlzLkNhPXRoaXMuST0wLHRoaXMub2E9W10sdGhpcy5wYT0wLHRoaXMuSmQ9W10sdGhpcy5ZYz0wLHRoaXMuWmM9W10sdGhpcy5LYT0wfWZ1bmN0aW9uIE4oKXt0aGlzLlJhPTAsdGhpcy5vYT1bXSx0aGlzLmg9dGhpcy51PXRoaXMuYmI9dGhpcy5TYj10aGlzLnBhPTB9ZnVuY3Rpb24gTCh0KXtyZXR1cm4gdC5SYT4+Pih0LnUmVHItMSk+Pj4wfWZ1bmN0aW9uIHgodCl7cmV0dXJuIGUodC5iYjw9dC5TYiksdC5ofHx0LmJiPT10LlNiJiZ0LnU+VHJ9ZnVuY3Rpb24gQSh0LGUpe3QudT1lLHQuaD14KHQpfWZ1bmN0aW9uIFModCl7dC51Pj16ciYmKGUodC51Pj16ciksYih0KSl9ZnVuY3Rpb24gXyh0KXtlKG51bGwhPXQmJm51bGwhPXQub2EpLHQucGE8dC5aYz8odC5JPSh0Lm9hW3QucGErK118dC5JPDw4KT4+PjAsdC5iKz04KTooZShudWxsIT10JiZudWxsIT10Lm9hKSx0LnBhPHQuWWM/KHQuYis9OCx0Lkk9dC5vYVt0LnBhKytdfHQuSTw8OCk6dC5LYT90LmI9MDoodC5JPDw9OCx0LmIrPTgsdC5LYT0xKSl9ZnVuY3Rpb24gUCh0KXtyZXR1cm4gZyh0LDEpfWZ1bmN0aW9uIGsodCxlKXt2YXIgcj10LkNhOzA+dC5iJiZfKHQpO3ZhciBuPXQuYixpPXIqZT4+PjgsYT0odC5JPj4+bj5pKSswO2ZvcihhPyhyLT1pLHQuSS09aSsxPDxuPj4+MCk6cj1pKzEsbj1yLGk9MDsyNTY8PW47KWkrPTgsbj4+PTg7cmV0dXJuIG49N15pK1VyW25dLHQuYi09bix0LkNhPShyPDxuKS0xLGF9ZnVuY3Rpb24gRih0LGUscil7dFtlKzBdPXI+PjI0JjI1NSx0W2UrMV09cj4+MTYmMjU1LHRbZSsyXT1yPj44JjI1NSx0W2UrM109MjU1JnJ9ZnVuY3Rpb24gSSh0LGUpe3JldHVybiB0W2UrMF18dFtlKzFdPDw4fWZ1bmN0aW9uIEModCxlKXtyZXR1cm4gSSh0LGUpfHRbZSsyXTw8MTZ9ZnVuY3Rpb24gaih0LGUpe3JldHVybiBJKHQsZSl8SSh0LGUrMik8PDE2fWZ1bmN0aW9uIE8odCxyKXt2YXIgbj0xPDxyO3JldHVybiBlKG51bGwhPXQpLGUoMDxyKSx0Llg9YShuKSxudWxsPT10Llg/MDoodC5NYj0zMi1yLHQuWGE9ciwxKX1mdW5jdGlvbiBCKHQscil7ZShudWxsIT10KSxlKG51bGwhPXIpLGUodC5YYT09ci5YYSksbihyLlgsMCx0LlgsMCwxPDxyLlhhKX1mdW5jdGlvbiBNKCl7dGhpcy5YPVtdLHRoaXMuWGE9dGhpcy5NYj0wfWZ1bmN0aW9uIHEodCxyLG4saSl7ZShudWxsIT1uKSxlKG51bGwhPWkpO3ZhciBhPW5bMF0sbz1pWzBdO3JldHVybiAwPT1hJiYoYT0odCpvK3IvMikvciksMD09byYmKG89KHIqYSt0LzIpL3QpLDA+PWF8fDA+PW8/MDooblswXT1hLGlbMF09bywxKX1mdW5jdGlvbiBFKHQsZSl7cmV0dXJuIHQrKDE8PGUpLTE+Pj5lfWZ1bmN0aW9uIFIodCxlKXtyZXR1cm4oKDQyNzgyNTUzNjAmdCkrKDQyNzgyNTUzNjAmZSk+Pj4wJjQyNzgyNTUzNjApKygoMTY3MTE5MzUmdCkrKDE2NzExOTM1JmUpPj4+MCYxNjcxMTkzNSk+Pj4wfWZ1bmN0aW9uIEQoZSxyKXt0W3JdPWZ1bmN0aW9uKHIsbixpLGEsbyxzLHUpe3ZhciBjO2ZvcihjPTA7YzxvOysrYyl7dmFyIGw9dFtlXShzW3UrYy0xXSxpLGErYyk7c1t1K2NdPVIocltuK2NdLGwpfX19ZnVuY3Rpb24gVCgpe3RoaXMudWQ9dGhpcy5oZD10aGlzLmpkPTB9ZnVuY3Rpb24geih0LGUpe3JldHVybigoNDI3ODEyNDI4NiYodF5lKSk+Pj4xKSsodCZlKT4+PjB9ZnVuY3Rpb24gVSh0KXtyZXR1cm4gMDw9dCYmMjU2PnQ/dDowPnQ/MDoyNTU8dD8yNTU6dm9pZCAwfWZ1bmN0aW9uIEgodCxlKXtyZXR1cm4gVSh0Kyh0LWUrLjU+PjEpKX1mdW5jdGlvbiBXKHQsZSxyKXtyZXR1cm4gTWF0aC5hYnMoZS1yKS1NYXRoLmFicyh0LXIpfWZ1bmN0aW9uIFYodCxlLHIsbixpLGEsbyl7Zm9yKG49YVtvLTFdLHI9MDtyPGk7KytyKWFbbytyXT1uPVIodFtlK3JdLG4pfWZ1bmN0aW9uIEcodCxlLHIsbixpKXt2YXIgYTtmb3IoYT0wO2E8cjsrK2Epe3ZhciBvPXRbZSthXSxzPW8+PjgmMjU1LHU9MTY3MTE5MzUmKHU9KHU9MTY3MTE5MzUmbykrKChzPDwxNikrcykpO25baSthXT0oNDI3ODI1NTM2MCZvKSt1Pj4+MH19ZnVuY3Rpb24gWSh0LGUpe2UuamQ9MjU1JnQsZS5oZD10Pj44JjI1NSxlLnVkPXQ+PjE2JjI1NX1mdW5jdGlvbiBKKHQsZSxyLG4saSxhKXt2YXIgbztmb3Iobz0wO288bjsrK28pe3ZhciBzPWVbcitvXSx1PXM+Pj44LGM9cyxsPTI1NSYobD0obD1zPj4+MTYpKygodC5qZDw8MjQ+PjI0KSoodTw8MjQ+PjI0KT4+PjUpKTtjPTI1NSYoYz0oYys9KHQuaGQ8PDI0Pj4yNCkqKHU8PDI0Pj4yNCk+Pj41KSsoKHQudWQ8PDI0Pj4yNCkqKGw8PDI0Pj4yNCk+Pj41KSksaVthK29dPSg0Mjc4MjU1MzYwJnMpKyhsPDwxNikrY319ZnVuY3Rpb24gWChlLHIsbixpLGEpe3Rbcl09ZnVuY3Rpb24odCxlLHIsbixvLHMsdSxjLGwpe2ZvcihuPXU7bjxjOysrbilmb3IodT0wO3U8bDsrK3Upb1tzKytdPWEocltpKHRbZSsrXSldKX0sdFtlXT1mdW5jdGlvbihlLHIsbyxzLHUsYyxsKXt2YXIgaD04Pj5lLmIsZj1lLkVhLGQ9ZS5LWzBdLHA9ZS53O2lmKDg+aClmb3IoZT0oMTw8ZS5iKS0xLHA9KDE8PGgpLTE7cjxvOysrcil7dmFyIGcsbT0wO2ZvcihnPTA7ZzxmOysrZylnJmV8fChtPWkoc1t1KytdKSksY1tsKytdPWEoZFttJnBdKSxtPj49aH1lbHNlIHRbXCJWUDhMTWFwQ29sb3JcIituXShzLHUsZCxwLGMsbCxyLG8sZil9fWZ1bmN0aW9uIEsodCxlLHIsbixpKXtmb3Iocj1lK3I7ZTxyOyl7dmFyIGE9dFtlKytdO25baSsrXT1hPj4xNiYyNTUsbltpKytdPWE+PjgmMjU1LG5baSsrXT0yNTUmYX19ZnVuY3Rpb24gWih0LGUscixuLGkpe2ZvcihyPWUrcjtlPHI7KXt2YXIgYT10W2UrK107bltpKytdPWE+PjE2JjI1NSxuW2krK109YT4+OCYyNTUsbltpKytdPTI1NSZhLG5baSsrXT1hPj4yNCYyNTV9fWZ1bmN0aW9uICQodCxlLHIsbixpKXtmb3Iocj1lK3I7ZTxyOyl7dmFyIGE9KG89dFtlKytdKT4+MTYmMjQwfG8+PjEyJjE1LG89MjQwJm98bz4+MjgmMTU7bltpKytdPWEsbltpKytdPW99fWZ1bmN0aW9uIFEodCxlLHIsbixpKXtmb3Iocj1lK3I7ZTxyOyl7dmFyIGE9KG89dFtlKytdKT4+MTYmMjQ4fG8+PjEzJjcsbz1vPj41JjIyNHxvPj4zJjMxO25baSsrXT1hLG5baSsrXT1vfX1mdW5jdGlvbiB0dCh0LGUscixuLGkpe2ZvcihyPWUrcjtlPHI7KXt2YXIgYT10W2UrK107bltpKytdPTI1NSZhLG5baSsrXT1hPj44JjI1NSxuW2krK109YT4+MTYmMjU1fX1mdW5jdGlvbiBldCh0LGUscixpLGEsbyl7aWYoMD09bylmb3Iocj1lK3I7ZTxyOylGKGksKChvPXRbZSsrXSlbMF0+PjI0fG9bMV0+PjgmNjUyODB8b1syXTw8OCYxNjcxMTY4MHxvWzNdPDwyNCk+Pj4wKSxhKz0zMjtlbHNlIG4oaSxhLHQsZSxyKX1mdW5jdGlvbiBydChlLHIpe3Rbcl1bMF09dFtlK1wiMFwiXSx0W3JdWzFdPXRbZStcIjFcIl0sdFtyXVsyXT10W2UrXCIyXCJdLHRbcl1bM109dFtlK1wiM1wiXSx0W3JdWzRdPXRbZStcIjRcIl0sdFtyXVs1XT10W2UrXCI1XCJdLHRbcl1bNl09dFtlK1wiNlwiXSx0W3JdWzddPXRbZStcIjdcIl0sdFtyXVs4XT10W2UrXCI4XCJdLHRbcl1bOV09dFtlK1wiOVwiXSx0W3JdWzEwXT10W2UrXCIxMFwiXSx0W3JdWzExXT10W2UrXCIxMVwiXSx0W3JdWzEyXT10W2UrXCIxMlwiXSx0W3JdWzEzXT10W2UrXCIxM1wiXSx0W3JdWzE0XT10W2UrXCIwXCJdLHRbcl1bMTVdPXRbZStcIjBcIl19ZnVuY3Rpb24gbnQodCl7cmV0dXJuIHQ9PVVufHx0PT1Ibnx8dD09V258fHQ9PVZufWZ1bmN0aW9uIGl0KCl7dGhpcy5lYj1bXSx0aGlzLnNpemU9dGhpcy5BPXRoaXMuZmI9MH1mdW5jdGlvbiBhdCgpe3RoaXMueT1bXSx0aGlzLmY9W10sdGhpcy5lYT1bXSx0aGlzLkY9W10sdGhpcy5UYz10aGlzLkVkPXRoaXMuQ2Q9dGhpcy5GZD10aGlzLmxiPXRoaXMuRGI9dGhpcy5BYj10aGlzLmZhPXRoaXMuSj10aGlzLlc9dGhpcy5OPXRoaXMuTz0wfWZ1bmN0aW9uIG90KCl7dGhpcy5SZD10aGlzLmhlaWdodD10aGlzLndpZHRoPXRoaXMuUz0wLHRoaXMuZj17fSx0aGlzLmYuUkdCQT1uZXcgaXQsdGhpcy5mLmtiPW5ldyBhdCx0aGlzLnNkPW51bGx9ZnVuY3Rpb24gc3QoKXt0aGlzLndpZHRoPVswXSx0aGlzLmhlaWdodD1bMF0sdGhpcy5QZD1bMF0sdGhpcy5RZD1bMF0sdGhpcy5mb3JtYXQ9WzBdfWZ1bmN0aW9uIHV0KCl7dGhpcy5JZD10aGlzLmZkPXRoaXMuTWQ9dGhpcy5oYj10aGlzLmliPXRoaXMuZGE9dGhpcy5iZD10aGlzLmNkPXRoaXMuaj10aGlzLnY9dGhpcy5EYT10aGlzLlNkPXRoaXMub2I9MH1mdW5jdGlvbiBjdCh0KXtyZXR1cm4gYWxlcnQoXCJ0b2RvOldlYlBTYW1wbGVyUHJvY2Vzc1BsYW5lXCIpLHQuVH1mdW5jdGlvbiBsdCh0LGUpe3ZhciByPXQuVCxpPWUuYmEuZi5SR0JBLGE9aS5lYixvPWkuZmIrdC5rYSppLkEscz1taVtlLmJhLlNdLHU9dC55LGM9dC5PLGw9dC5mLGg9dC5OLGY9dC5lYSxkPXQuVyxwPWUuY2MsZz1lLmRjLG09ZS5NYyx2PWUuTmMsYj10LmthLHk9dC5rYSt0LlQsdz10LlUsTj13KzE+PjE7Zm9yKDA9PWI/cyh1LGMsbnVsbCxudWxsLGwsaCxmLGQsbCxoLGYsZCxhLG8sbnVsbCxudWxsLHcpOihzKGUuZWMsZS5mYyx1LGMscCxnLG0sdixsLGgsZixkLGEsby1pLkEsYSxvLHcpLCsrcik7YisyPHk7Yis9MilwPWwsZz1oLG09Zix2PWQsaCs9dC5SYyxkKz10LlJjLG8rPTIqaS5BLHModSwoYys9Mip0LmZhKS10LmZhLHUsYyxwLGcsbSx2LGwsaCxmLGQsYSxvLWkuQSxhLG8sdyk7cmV0dXJuIGMrPXQuZmEsdC5qK3k8dC5vPyhuKGUuZWMsZS5mYyx1LGMsdyksbihlLmNjLGUuZGMsbCxoLE4pLG4oZS5NYyxlLk5jLGYsZCxOKSxyLS0pOjEmeXx8cyh1LGMsbnVsbCxudWxsLGwsaCxmLGQsbCxoLGYsZCxhLG8raS5BLG51bGwsbnVsbCx3KSxyfWZ1bmN0aW9uIGh0KHQscixuKXt2YXIgaT10LkYsYT1bdC5KXTtpZihudWxsIT1pKXt2YXIgbz10LlUscz1yLmJhLlMsdT1zPT1Ebnx8cz09V247cj1yLmJhLmYuUkdCQTt2YXIgYz1bMF0sbD10LmthO2NbMF09dC5ULHQuS2ImJigwPT1sPy0tY1swXTooLS1sLGFbMF0tPXQud2lkdGgpLHQuait0LmthK3QuVD09dC5vJiYoY1swXT10Lm8tdC5qLWwpKTt2YXIgaD1yLmViO2w9ci5mYitsKnIuQSx0PUFuKGksYVswXSx0LndpZHRoLG8sYyxoLGwrKHU/MDozKSxyLkEpLGUobj09YyksdCYmbnQocykmJkxuKGgsbCx1LG8sYyxyLkEpfXJldHVybiAwfWZ1bmN0aW9uIGZ0KHQpe3ZhciBlPXQubWEscj1lLmJhLlMsbj0xMT5yLGk9cj09cW58fHI9PVJufHxyPT1Ebnx8cj09VG58fDEyPT1yfHxudChyKTtpZihlLm1lbW9yeT1udWxsLGUuSWI9bnVsbCxlLkpiPW51bGwsZS5OZD1udWxsLCFCcihlLk9hLHQsaT8xMToxMikpcmV0dXJuIDA7aWYoaSYmbnQocikmJnZyKCksdC5kYSlhbGVydChcInRvZG86dXNlX3NjYWxpbmdcIik7ZWxzZXtpZihuKXtpZihlLkliPWN0LHQuS2Ipe2lmKHI9dC5VKzE+PjEsZS5tZW1vcnk9YSh0LlUrMipyKSxudWxsPT1lLm1lbW9yeSlyZXR1cm4gMDtlLmVjPWUubWVtb3J5LGUuZmM9MCxlLmNjPWUuZWMsZS5kYz1lLmZjK3QuVSxlLk1jPWUuY2MsZS5OYz1lLmRjK3IsZS5JYj1sdCx2cigpfX1lbHNlIGFsZXJ0KFwidG9kbzpFbWl0WVVWXCIpO2kmJihlLkpiPWh0LG4mJmdyKCkpfWlmKG4mJiFJaSl7Zm9yKHQ9MDsyNTY+dDsrK3QpQ2lbdF09ODk4NTgqKHQtMTI4KStTaT4+QWksQmlbdF09LTIyMDE0Kih0LTEyOCkrU2ksT2lbdF09LTQ1NzczKih0LTEyOCksamlbdF09MTEzNjE4Kih0LTEyOCkrU2k+PkFpO2Zvcih0PV9pO3Q8UGk7Kyt0KWU9NzYyODMqKHQtMTYpK1NpPj5BaSxNaVt0LV9pXT1WdChlLDI1NSkscWlbdC1faV09VnQoZSs4Pj40LDE1KTtJaT0xfXJldHVybiAxfWZ1bmN0aW9uIGR0KHQpe3ZhciByPXQubWEsbj10LlUsaT10LlQ7cmV0dXJuIGUoISgxJnQua2EpKSwwPj1ufHwwPj1pPzA6KG49ci5JYih0LHIpLG51bGwhPXIuSmImJnIuSmIodCxyLG4pLHIuRGMrPW4sMSl9ZnVuY3Rpb24gcHQodCl7dC5tYS5tZW1vcnk9bnVsbH1mdW5jdGlvbiBndCh0LGUscixuKXtyZXR1cm4gNDchPXkodCw4KT8wOihlWzBdPXkodCwxNCkrMSxyWzBdPXkodCwxNCkrMSxuWzBdPXkodCwxKSwwIT15KHQsMyk/MDohdC5oKX1mdW5jdGlvbiBtdCh0LGUpe2lmKDQ+dClyZXR1cm4gdCsxO3ZhciByPXQtMj4+MTtyZXR1cm4oMisoMSZ0KTw8cikreShlLHIpKzF9ZnVuY3Rpb24gdnQodCxlKXtyZXR1cm4gMTIwPGU/ZS0xMjA6MTw9KHI9KChyPVpuW2UtMV0pPj40KSp0Kyg4LSgxNSZyKSkpP3I6MTt2YXIgcn1mdW5jdGlvbiBidCh0LGUscil7dmFyIG49TChyKSxpPXRbZSs9MjU1Jm5dLmctODtyZXR1cm4gMDxpJiYoQShyLHIudSs4KSxuPUwociksZSs9dFtlXS52YWx1ZSxlKz1uJigxPDxpKS0xKSxBKHIsci51K3RbZV0uZyksdFtlXS52YWx1ZX1mdW5jdGlvbiB5dCh0LHIsbil7cmV0dXJuIG4uZys9dC5nLG4udmFsdWUrPXQudmFsdWU8PHI+Pj4wLGUoOD49bi5nKSx0Lmd9ZnVuY3Rpb24gd3QodCxyLG4pe3ZhciBpPXQueGM7cmV0dXJuIGUoKHI9MD09aT8wOnQudmNbdC5tZCoobj4+aSkrKHI+PmkpXSk8dC5XYiksdC5ZYVtyXX1mdW5jdGlvbiBOdCh0LHIsaSxhKXt2YXIgbz10LmFiLHM9dC5jKnIsdT10LkM7cj11K3I7dmFyIGM9aSxsPWE7Zm9yKGE9dC5UYSxpPXQuVWE7MDxvLS07KXt2YXIgaD10LmdjW29dLGY9dSxkPXIscD1jLGc9bCxtPShsPWEsYz1pLGguRWEpO3N3aXRjaChlKGY8ZCksZShkPD1oLm5jKSxoLmhjKXtjYXNlIDI6VnIocCxnLChkLWYpKm0sbCxjKTticmVhaztjYXNlIDA6dmFyIHY9ZixiPWQseT1sLHc9YyxOPShfPWgpLkVhOzA9PXYmJihIcihwLGcsbnVsbCxudWxsLDEseSx3KSxWKHAsZysxLDAsMCxOLTEseSx3KzEpLGcrPU4sdys9TiwrK3YpO2Zvcih2YXIgTD0xPDxfLmIseD1MLTEsQT1FKE4sXy5iKSxTPV8uSyxfPV8udysodj4+Xy5iKSpBO3Y8Yjspe3ZhciBQPVMsaz1fLEY9MTtmb3IoV3IocCxnLHksdy1OLDEseSx3KTtGPE47KXt2YXIgST0oRiZ+eCkrTDtJPk4mJihJPU4pLCgwLEtyW1BbaysrXT4+OCYxNV0pKHAsZysgK0YseSx3K0YtTixJLUYseSx3K0YpLEY9SX1nKz1OLHcrPU4sKyt2Jnh8fChfKz1BKX1kIT1oLm5jJiZuKGwsYy1tLGwsYysoZC1mLTEpKm0sbSk7YnJlYWs7Y2FzZSAxOmZvcihtPXAsYj1nLE49KHA9aC5FYSktKHc9cCZ+KHk9KGc9MTw8aC5iKS0xKSksdj1FKHAsaC5iKSxMPWguSyxoPWgudysoZj4+aC5iKSp2O2Y8ZDspe2Zvcih4PUwsQT1oLFM9bmV3IFQsXz1iK3csUD1iK3A7YjxfOylZKHhbQSsrXSxTKSxacihTLG0sYixnLGwsYyksYis9ZyxjKz1nO2I8UCYmKFkoeFtBKytdLFMpLFpyKFMsbSxiLE4sbCxjKSxiKz1OLGMrPU4pLCsrZiZ5fHwoaCs9dil9YnJlYWs7Y2FzZSAzOmlmKHA9PWwmJmc9PWMmJjA8aC5iKXtmb3IoYj1sLHA9bT1jKyhkLWYpKm0tKHc9KGQtZikqRShoLkVhLGguYikpLGc9bCx5PWMsdj1bXSx3PShOPXcpLTE7MDw9dzstLXcpdlt3XT1nW3krd107Zm9yKHc9Ti0xOzA8PXc7LS13KWJbcCt3XT12W3ddO0dyKGgsZixkLGwsbSxsLGMpfWVsc2UgR3IoaCxmLGQscCxnLGwsYyl9Yz1hLGw9aX1sIT1pJiZuKGEsaSxjLGwscyl9ZnVuY3Rpb24gTHQodCxyKXt2YXIgbj10LlYsaT10LkJhK3QuYyp0LkMsYT1yLXQuQztpZihlKHI8PXQubC5vKSxlKDE2Pj1hKSwwPGEpe3ZhciBvPXQubCxzPXQuVGEsdT10LlVhLGM9by53aWR0aDtpZihOdCh0LGEsbixpKSxhPXU9W3VdLGUoKG49dC5DKTwoaT1yKSksZShvLnY8by52YSksaT5vLm8mJihpPW8ubyksbjxvLmope3ZhciBsPW8uai1uO249by5qLGFbMF0rPWwqY31pZihuPj1pP249MDooYVswXSs9NCpvLnYsby5rYT1uLW8uaixvLlU9by52YS1vLnYsby5UPWktbixuPTEpLG4pe2lmKHU9dVswXSwxMT4obj10LmNhKS5TKXt2YXIgaD1uLmYuUkdCQSxmPShpPW4uUyxhPW8uVSxvPW8uVCxsPWguZWIsaC5BKSxkPW87Zm9yKGg9aC5mYit0Lk1hKmguQTswPGQtLTspe3ZhciBwPXMsZz11LG09YSx2PWwsYj1oO3N3aXRjaChpKXtjYXNlIE1uOiRyKHAsZyxtLHYsYik7YnJlYWs7Y2FzZSBxbjpRcihwLGcsbSx2LGIpO2JyZWFrO2Nhc2UgVW46UXIocCxnLG0sdixiKSxMbih2LGIsMCxtLDEsMCk7YnJlYWs7Y2FzZSBFbjpybihwLGcsbSx2LGIpO2JyZWFrO2Nhc2UgUm46ZXQocCxnLG0sdixiLDEpO2JyZWFrO2Nhc2UgSG46ZXQocCxnLG0sdixiLDEpLExuKHYsYiwwLG0sMSwwKTticmVhaztjYXNlIERuOmV0KHAsZyxtLHYsYiwwKTticmVhaztjYXNlIFduOmV0KHAsZyxtLHYsYiwwKSxMbih2LGIsMSxtLDEsMCk7YnJlYWs7Y2FzZSBUbjp0bihwLGcsbSx2LGIpO2JyZWFrO2Nhc2UgVm46dG4ocCxnLG0sdixiKSx4bih2LGIsbSwxLDApO2JyZWFrO2Nhc2Ugem46ZW4ocCxnLG0sdixiKTticmVhaztkZWZhdWx0OmUoMCl9dSs9YyxoKz1mfXQuTWErPW99ZWxzZSBhbGVydChcInRvZG86RW1pdFJlc2NhbGVkUm93c1lVVkFcIik7ZSh0Lk1hPD1uLmhlaWdodCl9fXQuQz1yLGUodC5DPD10LmkpfWZ1bmN0aW9uIHh0KHQpe3ZhciBlO2lmKDA8dC51YSlyZXR1cm4gMDtmb3IoZT0wO2U8dC5XYjsrK2Upe3ZhciByPXQuWWFbZV0uRyxuPXQuWWFbZV0uSDtpZigwPHJbMV1bblsxXSswXS5nfHwwPHJbMl1bblsyXSswXS5nfHwwPHJbM11bblszXSswXS5nKXJldHVybiAwfXJldHVybiAxfWZ1bmN0aW9uIEF0KHQscixuLGksYSxvKXtpZigwIT10Llope3ZhciBzPXQucWQsdT10LnJkO2ZvcihlKG51bGwhPWdpW3QuWl0pO3I8bjsrK3IpZ2lbdC5aXShzLHUsaSxhLGksYSxvKSxzPWksdT1hLGErPW87dC5xZD1zLHQucmQ9dX19ZnVuY3Rpb24gU3QodCxyKXt2YXIgbj10LmwubWEsaT0wPT1uLlp8fDE9PW4uWj90Lmwuajp0LkM7aWYoaT10LkM8aT9pOnQuQyxlKHI8PXQubC5vKSxyPmkpe3ZhciBhPXQubC53aWR0aCxvPW4uY2Escz1uLnRiK2EqaSx1PXQuVixjPXQuQmErdC5jKmksbD10LmdjO2UoMT09dC5hYiksZSgzPT1sWzBdLmhjKSxKcihsWzBdLGkscix1LGMsbyxzKSxBdChuLGkscixvLHMsYSl9dC5DPXQuTWE9cn1mdW5jdGlvbiBfdCh0LHIsbixpLGEsbyxzKXt2YXIgdT10LiQvaSxjPXQuJCVpLGw9dC5tLGg9dC5zLGY9bit0LiQsZD1mO2E9bitpKmE7dmFyIHA9bitpKm8sZz0yODAraC51YSxtPXQuUGI/dToxNjc3NzIxNix2PTA8aC51YT9oLldhOm51bGwsYj1oLndjLHk9ZjxwP3d0KGgsYyx1KTpudWxsO2UodC5DPG8pLGUocDw9YSk7dmFyIHc9ITE7dDpmb3IoOzspe2Zvcig7d3x8ZjxwOyl7dmFyIE49MDtpZih1Pj1tKXt2YXIgXz1mLW47ZSgobT10KS5QYiksbS53ZD1tLm0sbS54ZD1fLDA8bS5zLnVhJiZCKG0ucy5XYSxtLnMudmIpLG09dStRbn1pZihjJmJ8fCh5PXd0KGgsYyx1KSksZShudWxsIT15KSx5LlFiJiYocltmXT15LnFiLHc9ITApLCF3KWlmKFMobCkseS5qYyl7Tj1sLF89cjt2YXIgUD1mLGs9eS5wZFtMKE4pJkVyLTFdO2UoeS5qYyksMjU2PmsuZz8oQShOLE4udStrLmcpLF9bUF09ay52YWx1ZSxOPTApOihBKE4sTi51K2suZy0yNTYpLGUoMjU2PD1rLnZhbHVlKSxOPWsudmFsdWUpLDA9PU4mJih3PSEwKX1lbHNlIE49YnQoeS5HWzBdLHkuSFswXSxsKTtpZihsLmgpYnJlYWs7aWYod3x8MjU2Pk4pe2lmKCF3KWlmKHkubmQpcltmXT0oeS5xYnxOPDw4KT4+PjA7ZWxzZXtpZihTKGwpLHc9YnQoeS5HWzFdLHkuSFsxXSxsKSxTKGwpLF89YnQoeS5HWzJdLHkuSFsyXSxsKSxQPWJ0KHkuR1szXSx5LkhbM10sbCksbC5oKWJyZWFrO3JbZl09KFA8PDI0fHc8PDE2fE48PDh8Xyk+Pj4wfWlmKHc9ITEsKytmLCsrYz49aSYmKGM9MCwrK3UsbnVsbCE9cyYmdTw9byYmISh1JTE2KSYmcyh0LHUpLG51bGwhPXYpKWZvcig7ZDxmOylOPXJbZCsrXSx2LlhbKDUwNjgzMjgyOSpOJjQyOTQ5NjcyOTUpPj4+di5NYl09Tn1lbHNlIGlmKDI4MD5OKXtpZihOPW10KE4tMjU2LGwpLF89YnQoeS5HWzRdLHkuSFs0XSxsKSxTKGwpLF89dnQoaSxfPW10KF8sbCkpLGwuaClicmVhaztpZihmLW48X3x8YS1mPE4pYnJlYWsgdDtmb3IoUD0wO1A8TjsrK1ApcltmK1BdPXJbZitQLV9dO2ZvcihmKz1OLGMrPU47Yz49aTspYy09aSwrK3UsbnVsbCE9cyYmdTw9byYmISh1JTE2KSYmcyh0LHUpO2lmKGUoZjw9YSksYyZiJiYoeT13dChoLGMsdSkpLG51bGwhPXYpZm9yKDtkPGY7KU49cltkKytdLHYuWFsoNTA2ODMyODI5Kk4mNDI5NDk2NzI5NSk+Pj52Lk1iXT1OfWVsc2V7aWYoIShOPGcpKWJyZWFrIHQ7Zm9yKHc9Ti0yODAsZShudWxsIT12KTtkPGY7KU49cltkKytdLHYuWFsoNTA2ODMyODI5Kk4mNDI5NDk2NzI5NSk+Pj52Lk1iXT1OO049ZixlKCEodz4+PihfPXYpLlhhKSkscltOXT1fLlhbd10sdz0hMH13fHxlKGwuaD09eChsKSl9aWYodC5QYiYmbC5oJiZmPGEpZSh0Lm0uaCksdC5hPTUsdC5tPXQud2QsdC4kPXQueGQsMDx0LnMudWEmJkIodC5zLnZiLHQucy5XYSk7ZWxzZXtpZihsLmgpYnJlYWsgdDtudWxsIT1zJiZzKHQsdT5vP286dSksdC5hPTAsdC4kPWYtbn1yZXR1cm4gMX1yZXR1cm4gdC5hPTMsMH1mdW5jdGlvbiBQdCh0KXtlKG51bGwhPXQpLHQudmM9bnVsbCx0LnljPW51bGwsdC5ZYT1udWxsO3ZhciByPXQuV2E7bnVsbCE9ciYmKHIuWD1udWxsKSx0LnZiPW51bGwsZShudWxsIT10KX1mdW5jdGlvbiBrdCgpe3ZhciBlPW5ldyBhcjtyZXR1cm4gbnVsbD09ZT9udWxsOihlLmE9MCxlLnhiPXBpLHJ0KFwiUHJlZGljdG9yXCIsXCJWUDhMUHJlZGljdG9yc1wiKSxydChcIlByZWRpY3RvclwiLFwiVlA4TFByZWRpY3RvcnNfQ1wiKSxydChcIlByZWRpY3RvckFkZFwiLFwiVlA4TFByZWRpY3RvcnNBZGRcIikscnQoXCJQcmVkaWN0b3JBZGRcIixcIlZQOExQcmVkaWN0b3JzQWRkX0NcIiksVnI9Ryxacj1KLCRyPUssUXI9Wix0bj0kLGVuPVEscm49dHQsdC5WUDhMTWFwQ29sb3IzMmI9WXIsdC5WUDhMTWFwQ29sb3I4Yj1YcixlKX1mdW5jdGlvbiBGdCh0LHIsbixzLHUpe3ZhciBjPTEsZj1bdF0scD1bcl0sZz1zLm0sbT1zLnMsdj1udWxsLGI9MDt0OmZvcig7Oyl7aWYobilmb3IoO2MmJnkoZywxKTspe3ZhciB3PWYsTj1wLHg9cyxfPTEsUD14Lm0saz14LmdjW3guYWJdLEY9eShQLDIpO2lmKHguT2MmMTw8RiljPTA7ZWxzZXtzd2l0Y2goeC5PY3w9MTw8RixrLmhjPUYsay5FYT13WzBdLGsubmM9TlswXSxrLks9W251bGxdLCsreC5hYixlKDQ+PXguYWIpLEYpe2Nhc2UgMDpjYXNlIDE6ay5iPXkoUCwzKSsyLF89RnQoRShrLkVhLGsuYiksRShrLm5jLGsuYiksMCx4LGsuSyksay5LPWsuS1swXTticmVhaztjYXNlIDM6dmFyIEksQz15KFAsOCkrMSxqPTE2PEM/MDo0PEM/MToyPEM/MjozO2lmKHdbMF09RShrLkVhLGopLGsuYj1qLEk9Xz1GdChDLDEsMCx4LGsuSykpe3ZhciBCLE09QyxxPWssRD0xPDwoOD4+cS5iKSxUPWEoRCk7aWYobnVsbD09VClJPTA7ZWxzZXt2YXIgej1xLktbMF0sVT1xLnc7Zm9yKFRbMF09cS5LWzBdWzBdLEI9MTtCPDEqTTsrK0IpVFtCXT1SKHpbVStCXSxUW0ItMV0pO2Zvcig7Qjw0KkQ7KytCKVRbQl09MDtxLktbMF09bnVsbCxxLktbMF09VCxJPTF9fV89STticmVhaztjYXNlIDI6YnJlYWs7ZGVmYXVsdDplKDApfWM9X319aWYoZj1mWzBdLHA9cFswXSxjJiZ5KGcsMSkmJiEoYz0xPD0oYj15KGcsNCkpJiYxMT49Yikpe3MuYT0zO2JyZWFrIHR9dmFyIEg7aWYoSD1jKWU6e3ZhciBXLFYsRyxZPXMsSj1mLFg9cCxLPWIsWj1uLCQ9WS5tLFE9WS5zLHR0PVtudWxsXSxldD0xLHJ0PTAsbnQ9JG5bS107cjpmb3IoOzspe2lmKFomJnkoJCwxKSl7dmFyIGl0PXkoJCwzKSsyLGF0PUUoSixpdCksb3Q9RShYLGl0KSxzdD1hdCpvdDtpZighRnQoYXQsb3QsMCxZLHR0KSlicmVhayByO2Zvcih0dD10dFswXSxRLnhjPWl0LFc9MDtXPHN0OysrVyl7dmFyIHV0PXR0W1ddPj44JjY1NTM1O3R0W1ddPXV0LHV0Pj1ldCYmKGV0PXV0KzEpfX1pZigkLmgpYnJlYWsgcjtmb3IoVj0wOzU+VjsrK1Ype3ZhciBjdD1KbltWXTshViYmMDxLJiYoY3QrPTE8PEspLHJ0PGN0JiYocnQ9Y3QpfXZhciBsdD1vKGV0Km50LGgpLGh0PWV0LGZ0PW8oaHQsZCk7aWYobnVsbD09ZnQpdmFyIGR0PW51bGw7ZWxzZSBlKDY1NTM2Pj1odCksZHQ9ZnQ7dmFyIHB0PWEocnQpO2lmKG51bGw9PWR0fHxudWxsPT1wdHx8bnVsbD09bHQpe1kuYT0xO2JyZWFrIHJ9dmFyIGd0PWx0O2ZvcihXPUc9MDtXPGV0OysrVyl7dmFyIG10PWR0W1ddLHZ0PW10LkcsYnQ9bXQuSCx3dD0wLE50PTEsTHQ9MDtmb3IoVj0wOzU+VjsrK1Ype2N0PUpuW1ZdLHZ0W1ZdPWd0LGJ0W1ZdPUcsIVYmJjA8SyYmKGN0Kz0xPDxLKTtuOnt2YXIgeHQsQXQ9Y3QsU3Q9WSxrdD1wdCxJdD1ndCxDdD1HLGp0PTAsT3Q9U3QubSxCdD15KE90LDEpO2lmKGkoa3QsMCwwLEF0KSxCdCl7dmFyIE10PXkoT3QsMSkrMSxxdD15KE90LDEpLEV0PXkoT3QsMD09cXQ/MTo4KTtrdFtFdF09MSwyPT1NdCYmKGt0W0V0PXkoT3QsOCldPTEpO3ZhciBSdD0xfWVsc2V7dmFyIER0PWEoMTkpLFR0PXkoT3QsNCkrNDtpZigxOTxUdCl7U3QuYT0zO3ZhciB6dD0wO2JyZWFrIG59Zm9yKHh0PTA7eHQ8VHQ7Kyt4dClEdFtLblt4dF1dPXkoT3QsMyk7dmFyIFV0PXZvaWQgMCxIdD12b2lkIDAsV3Q9U3QsVnQ9RHQsR3Q9QXQsWXQ9a3QsSnQ9MCxYdD1XdC5tLEt0PTgsWnQ9bygxMjgsaCk7aTpmb3IoO2woWnQsMCw3LFZ0LDE5KTspe2lmKHkoWHQsMSkpe3ZhciAkdD0yKzIqeShYdCwzKTtpZigoVXQ9Mit5KFh0LCR0KSk+R3QpYnJlYWsgaX1lbHNlIFV0PUd0O2ZvcihIdD0wO0h0PEd0JiZVdC0tOyl7UyhYdCk7dmFyIFF0PVp0WzArKDEyNyZMKFh0KSldO0EoWHQsWHQudStRdC5nKTt2YXIgdGU9UXQudmFsdWU7aWYoMTY+dGUpWXRbSHQrK109dGUsMCE9dGUmJihLdD10ZSk7ZWxzZXt2YXIgZWU9MTY9PXRlLHJlPXRlLTE2LG5lPVluW3JlXSxpZT15KFh0LEduW3JlXSkrbmU7aWYoSHQraWU+R3QpYnJlYWsgaTtmb3IodmFyIGFlPWVlP0t0OjA7MDxpZS0tOylZdFtIdCsrXT1hZX19SnQ9MTticmVhayBpfUp0fHwoV3QuYT0zKSxSdD1KdH0oUnQ9UnQmJiFPdC5oKSYmKGp0PWwoSXQsQ3QsOCxrdCxBdCkpLFJ0JiYwIT1qdD96dD1qdDooU3QuYT0zLHp0PTApfWlmKDA9PXp0KWJyZWFrIHI7aWYoTnQmJjE9PVhuW1ZdJiYoTnQ9MD09Z3RbR10uZyksd3QrPWd0W0ddLmcsRys9enQsMz49Vil7dmFyIG9lLHNlPXB0WzBdO2ZvcihvZT0xO29lPGN0Oysrb2UpcHRbb2VdPnNlJiYoc2U9cHRbb2VdKTtMdCs9c2V9fWlmKG10Lm5kPU50LG10LlFiPTAsTnQmJihtdC5xYj0odnRbM11bYnRbM10rMF0udmFsdWU8PDI0fHZ0WzFdW2J0WzFdKzBdLnZhbHVlPDwxNnx2dFsyXVtidFsyXSswXS52YWx1ZSk+Pj4wLDA9PXd0JiYyNTY+dnRbMF1bYnRbMF0rMF0udmFsdWUmJihtdC5RYj0xLG10LnFiKz12dFswXVtidFswXSswXS52YWx1ZTw8OCkpLG10LmpjPSFtdC5RYiYmNj5MdCxtdC5qYyl7dmFyIHVlLGNlPW10O2Zvcih1ZT0wO3VlPEVyOysrdWUpe3ZhciBsZT11ZSxoZT1jZS5wZFtsZV0sZmU9Y2UuR1swXVtjZS5IWzBdK2xlXTsyNTY8PWZlLnZhbHVlPyhoZS5nPWZlLmcrMjU2LGhlLnZhbHVlPWZlLnZhbHVlKTooaGUuZz0wLGhlLnZhbHVlPTAsbGU+Pj15dChmZSw4LGhlKSxsZT4+PXl0KGNlLkdbMV1bY2UuSFsxXStsZV0sMTYsaGUpLGxlPj49eXQoY2UuR1syXVtjZS5IWzJdK2xlXSwwLGhlKSx5dChjZS5HWzNdW2NlLkhbM10rbGVdLDI0LGhlKSl9fX1RLnZjPXR0LFEuV2I9ZXQsUS5ZYT1kdCxRLnljPWx0LEg9MTticmVhayBlfUg9MH1pZighKGM9SCkpe3MuYT0zO2JyZWFrIHR9aWYoMDxiKXtpZihtLnVhPTE8PGIsIU8obS5XYSxiKSl7cy5hPTEsYz0wO2JyZWFrIHR9fWVsc2UgbS51YT0wO3ZhciBkZT1zLHBlPWYsZ2U9cCxtZT1kZS5zLHZlPW1lLnhjO2lmKGRlLmM9cGUsZGUuaT1nZSxtZS5tZD1FKHBlLHZlKSxtZS53Yz0wPT12ZT8tMTooMTw8dmUpLTEsbil7cy54Yj1kaTticmVhayB0fWlmKG51bGw9PSh2PWEoZipwKSkpe3MuYT0xLGM9MDticmVhayB0fWM9KGM9X3Qocyx2LDAsZixwLHAsbnVsbCkpJiYhZy5oO2JyZWFrIHR9cmV0dXJuIGM/KG51bGwhPXU/dVswXT12OihlKG51bGw9PXYpLGUobikpLHMuJD0wLG58fFB0KG0pKTpQdChtKSxjfWZ1bmN0aW9uIEl0KHQscil7dmFyIG49dC5jKnQuaSxpPW4rcisxNipyO3JldHVybiBlKHQuYzw9ciksdC5WPWEoaSksbnVsbD09dC5WPyh0LlRhPW51bGwsdC5VYT0wLHQuYT0xLDApOih0LlRhPXQuVix0LlVhPXQuQmErbityLDEpfWZ1bmN0aW9uIEN0KHQscil7dmFyIG49dC5DLGk9ci1uLGE9dC5WLG89dC5CYSt0LmMqbjtmb3IoZShyPD10Lmwubyk7MDxpOyl7dmFyIHM9MTY8aT8xNjppLHU9dC5sLm1hLGM9dC5sLndpZHRoLGw9YypzLGg9dS5jYSxmPXUudGIrYypuLGQ9dC5UYSxwPXQuVWE7TnQodCxzLGEsbyksU24oZCxwLGgsZixsKSxBdCh1LG4sbitzLGgsZixjKSxpLT1zLGErPXMqdC5jLG4rPXN9ZShuPT1yKSx0LkM9dC5NYT1yfWZ1bmN0aW9uIGp0KCl7dGhpcy51Yj10aGlzLnlkPXRoaXMudGQ9dGhpcy5SYj0wfWZ1bmN0aW9uIE90KCl7dGhpcy5LZD10aGlzLkxkPXRoaXMuVWQ9dGhpcy5UZD10aGlzLmk9dGhpcy5jPTB9ZnVuY3Rpb24gQnQoKXt0aGlzLkZiPXRoaXMuQmI9dGhpcy5DYj0wLHRoaXMuWmI9YSg0KSx0aGlzLkxiPWEoNCl9ZnVuY3Rpb24gTXQoKXt0aGlzLlliPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4pe2Zvcih2YXIgaT1uW3JdLGE9MDthPGkmJihlLnB1c2gobi5sZW5ndGg+cisxP1tdOjApLCEobi5sZW5ndGg8cisxKSk7YSsrKXQoZVthXSxyKzEsbil9KHQsMCxbMywxMV0pLHR9KCl9ZnVuY3Rpb24gcXQoKXt0aGlzLmpiPWEoMyksdGhpcy5XYz1zKFs0LDhdLE10KSx0aGlzLlhjPXMoWzQsMTddLE10KX1mdW5jdGlvbiBFdCgpe3RoaXMuUGM9dGhpcy53Yj10aGlzLlRiPXRoaXMuemQ9MCx0aGlzLnZkPW5ldyBhKDQpLHRoaXMub2Q9bmV3IGEoNCl9ZnVuY3Rpb24gUnQoKXt0aGlzLmxkPXRoaXMuTGE9dGhpcy5kZD10aGlzLnRjPTB9ZnVuY3Rpb24gRHQoKXt0aGlzLk5hPXRoaXMubGE9MH1mdW5jdGlvbiBUdCgpe3RoaXMuU2M9WzAsMF0sdGhpcy5FYj1bMCwwXSx0aGlzLlFjPVswLDBdLHRoaXMuaWE9dGhpcy5sYz0wfWZ1bmN0aW9uIHp0KCl7dGhpcy5hZD1hKDM4NCksdGhpcy5aYT0wLHRoaXMuT2I9YSgxNiksdGhpcy4kYj10aGlzLkFkPXRoaXMuaWE9dGhpcy5HYz10aGlzLkhjPXRoaXMuRGQ9MH1mdW5jdGlvbiBVdCgpe3RoaXMudWM9dGhpcy5NPXRoaXMuTmI9MCx0aGlzLndhPUFycmF5KG5ldyBSdCksdGhpcy5ZPTAsdGhpcy55YT1BcnJheShuZXcgenQpLHRoaXMuYWE9MCx0aGlzLmw9bmV3IEd0fWZ1bmN0aW9uIEh0KCl7dGhpcy55PWEoMTYpLHRoaXMuZj1hKDgpLHRoaXMuZWE9YSg4KX1mdW5jdGlvbiBXdCgpe3RoaXMuY2I9dGhpcy5hPTAsdGhpcy5zYz1cIlwiLHRoaXMubT1uZXcgdyx0aGlzLk9kPW5ldyBqdCx0aGlzLktjPW5ldyBPdCx0aGlzLmVkPW5ldyBFdCx0aGlzLlFhPW5ldyBCdCx0aGlzLkljPXRoaXMuJGM9dGhpcy5BYT0wLHRoaXMuRD1uZXcgVXQsdGhpcy5YYj10aGlzLlZhPXRoaXMuSGI9dGhpcy56Yj10aGlzLnliPXRoaXMuVWI9dGhpcy56YT0wLHRoaXMuSmM9byg4LHcpLHRoaXMuaWE9MCx0aGlzLnBiPW8oNCxUdCksdGhpcy5QYT1uZXcgcXQsdGhpcy5CZD10aGlzLmtjPTAsdGhpcy5BYz1bXSx0aGlzLkJjPTAsdGhpcy56Yz1bMCwwLDAsMF0sdGhpcy5HZD1BcnJheShuZXcgSHQpLHRoaXMuSGQ9MCx0aGlzLnJiPUFycmF5KG5ldyBEdCksdGhpcy5zYj0wLHRoaXMud2E9QXJyYXkobmV3IFJ0KSx0aGlzLlk9MCx0aGlzLm9jPVtdLHRoaXMucGM9MCx0aGlzLnNhPVtdLHRoaXMudGE9MCx0aGlzLnFhPVtdLHRoaXMucmE9MCx0aGlzLkhhPVtdLHRoaXMuQj10aGlzLlI9dGhpcy5JYT0wLHRoaXMuRWM9W10sdGhpcy5NPXRoaXMuamE9dGhpcy5WYj10aGlzLkZjPTAsdGhpcy55YT1BcnJheShuZXcgenQpLHRoaXMuTD10aGlzLmFhPTAsdGhpcy5nZD1zKFs0LDJdLFJ0KSx0aGlzLmdhPW51bGwsdGhpcy5GYT1bXSx0aGlzLkNjPXRoaXMucWM9dGhpcy5QPTAsdGhpcy5HYj1bXSx0aGlzLlVjPTAsdGhpcy5tYj1bXSx0aGlzLm5iPTAsdGhpcy5yYz1bXSx0aGlzLkdhPXRoaXMuVmM9MH1mdW5jdGlvbiBWdCh0LGUpe3JldHVybiAwPnQ/MDp0PmU/ZTp0fWZ1bmN0aW9uIEd0KCl7dGhpcy5UPXRoaXMuVT10aGlzLmthPXRoaXMuaGVpZ2h0PXRoaXMud2lkdGg9MCx0aGlzLnk9W10sdGhpcy5mPVtdLHRoaXMuZWE9W10sdGhpcy5SYz10aGlzLmZhPXRoaXMuVz10aGlzLk49dGhpcy5PPTAsdGhpcy5tYT1cInZvaWRcIix0aGlzLnB1dD1cIlZQOElvUHV0SG9va1wiLHRoaXMuYWM9XCJWUDhJb1NldHVwSG9va1wiLHRoaXMuYmM9XCJWUDhJb1RlYXJkb3duSG9va1wiLHRoaXMuaGE9dGhpcy5LYj0wLHRoaXMuZGF0YT1bXSx0aGlzLmhiPXRoaXMuaWI9dGhpcy5kYT10aGlzLm89dGhpcy5qPXRoaXMudmE9dGhpcy52PXRoaXMuRGE9dGhpcy5vYj10aGlzLnc9MCx0aGlzLkY9W10sdGhpcy5KPTB9ZnVuY3Rpb24gWXQoKXt2YXIgdD1uZXcgV3Q7cmV0dXJuIG51bGwhPXQmJih0LmE9MCx0LnNjPVwiT0tcIix0LmNiPTAsdC5YYj0wLHJpfHwocmk9WnQpKSx0fWZ1bmN0aW9uIEp0KHQsZSxyKXtyZXR1cm4gMD09dC5hJiYodC5hPWUsdC5zYz1yLHQuY2I9MCksMH1mdW5jdGlvbiBYdCh0LGUscil7cmV0dXJuIDM8PXImJjE1Nz09dFtlKzBdJiYxPT10W2UrMV0mJjQyPT10W2UrMl19ZnVuY3Rpb24gS3QodCxyKXtpZihudWxsPT10KXJldHVybiAwO2lmKHQuYT0wLHQuc2M9XCJPS1wiLG51bGw9PXIpcmV0dXJuIEp0KHQsMixcIm51bGwgVlA4SW8gcGFzc2VkIHRvIFZQOEdldEhlYWRlcnMoKVwiKTt2YXIgbj1yLmRhdGEsYT1yLncsbz1yLmhhO2lmKDQ+bylyZXR1cm4gSnQodCw3LFwiVHJ1bmNhdGVkIGhlYWRlci5cIik7dmFyIHM9blthKzBdfG5bYSsxXTw8OHxuW2ErMl08PDE2LHU9dC5PZDtpZih1LlJiPSEoMSZzKSx1LnRkPXM+PjEmNyx1LnlkPXM+PjQmMSx1LnViPXM+PjUsMzx1LnRkKXJldHVybiBKdCh0LDMsXCJJbmNvcnJlY3Qga2V5ZnJhbWUgcGFyYW1ldGVycy5cIik7aWYoIXUueWQpcmV0dXJuIEp0KHQsNCxcIkZyYW1lIG5vdCBkaXNwbGF5YWJsZS5cIik7YSs9MyxvLT0zO3ZhciBjPXQuS2M7aWYodS5SYil7aWYoNz5vKXJldHVybiBKdCh0LDcsXCJjYW5ub3QgcGFyc2UgcGljdHVyZSBoZWFkZXJcIik7aWYoIVh0KG4sYSxvKSlyZXR1cm4gSnQodCwzLFwiQmFkIGNvZGUgd29yZFwiKTtjLmM9MTYzODMmKG5bYSs0XTw8OHxuW2ErM10pLGMuVGQ9blthKzRdPj42LGMuaT0xNjM4MyYoblthKzZdPDw4fG5bYSs1XSksYy5VZD1uW2ErNl0+PjYsYSs9NyxvLT03LHQuemE9Yy5jKzE1Pj40LHQuVWI9Yy5pKzE1Pj40LHIud2lkdGg9Yy5jLHIuaGVpZ2h0PWMuaSxyLkRhPTAsci5qPTAsci52PTAsci52YT1yLndpZHRoLHIubz1yLmhlaWdodCxyLmRhPTAsci5pYj1yLndpZHRoLHIuaGI9ci5oZWlnaHQsci5VPXIud2lkdGgsci5UPXIuaGVpZ2h0LGkoKHM9dC5QYSkuamIsMCwyNTUscy5qYi5sZW5ndGgpLGUobnVsbCE9KHM9dC5RYSkpLHMuQ2I9MCxzLkJiPTAscy5GYj0xLGkocy5aYiwwLDAscy5aYi5sZW5ndGgpLGkocy5MYiwwLDAscy5MYil9aWYodS51Yj5vKXJldHVybiBKdCh0LDcsXCJiYWQgcGFydGl0aW9uIGxlbmd0aFwiKTtwKHM9dC5tLG4sYSx1LnViKSxhKz11LnViLG8tPXUudWIsdS5SYiYmKGMuTGQ9UChzKSxjLktkPVAocykpLGM9dC5RYTt2YXIgbCxoPXQuUGE7aWYoZShudWxsIT1zKSxlKG51bGwhPWMpLGMuQ2I9UChzKSxjLkNiKXtpZihjLkJiPVAocyksUChzKSl7Zm9yKGMuRmI9UChzKSxsPTA7ND5sOysrbCljLlpiW2xdPVAocyk/bShzLDcpOjA7Zm9yKGw9MDs0Pmw7KytsKWMuTGJbbF09UChzKT9tKHMsNik6MH1pZihjLkJiKWZvcihsPTA7Mz5sOysrbCloLmpiW2xdPVAocyk/ZyhzLDgpOjI1NX1lbHNlIGMuQmI9MDtpZihzLkthKXJldHVybiBKdCh0LDMsXCJjYW5ub3QgcGFyc2Ugc2VnbWVudCBoZWFkZXJcIik7aWYoKGM9dC5lZCkuemQ9UChzKSxjLlRiPWcocyw2KSxjLndiPWcocywzKSxjLlBjPVAocyksYy5QYyYmUChzKSl7Zm9yKGg9MDs0Pmg7KytoKVAocykmJihjLnZkW2hdPW0ocyw2KSk7Zm9yKGg9MDs0Pmg7KytoKVAocykmJihjLm9kW2hdPW0ocyw2KSl9aWYodC5MPTA9PWMuVGI/MDpjLnpkPzE6MixzLkthKXJldHVybiBKdCh0LDMsXCJjYW5ub3QgcGFyc2UgZmlsdGVyIGhlYWRlclwiKTt2YXIgZj1vO2lmKG89bD1hLGE9bCtmLGM9Zix0LlhiPSgxPDxnKHQubSwyKSktMSxmPDMqKGg9dC5YYikpbj03O2Vsc2V7Zm9yKGwrPTMqaCxjLT0zKmgsZj0wO2Y8aDsrK2Ype3ZhciBkPW5bbyswXXxuW28rMV08PDh8bltvKzJdPDwxNjtkPmMmJihkPWMpLHAodC5KY1srZl0sbixsLGQpLGwrPWQsYy09ZCxvKz0zfXAodC5KY1sraF0sbixsLGMpLG49bDxhPzA6NX1pZigwIT1uKXJldHVybiBKdCh0LG4sXCJjYW5ub3QgcGFyc2UgcGFydGl0aW9uc1wiKTtmb3Iobj1nKGw9dC5tLDcpLG89UChsKT9tKGwsNCk6MCxhPVAobCk/bShsLDQpOjAsYz1QKGwpP20obCw0KTowLGg9UChsKT9tKGwsNCk6MCxsPVAobCk/bShsLDQpOjAsZj10LlFhLGQ9MDs0PmQ7KytkKXtpZihmLkNiKXt2YXIgdj1mLlpiW2RdO2YuRmJ8fCh2Kz1uKX1lbHNle2lmKDA8ZCl7dC5wYltkXT10LnBiWzBdO2NvbnRpbnVlfXY9bn12YXIgYj10LnBiW2RdO2IuU2NbMF09dGlbVnQoditvLDEyNyldLGIuU2NbMV09ZWlbVnQodiswLDEyNyldLGIuRWJbMF09Mip0aVtWdCh2K2EsMTI3KV0sYi5FYlsxXT0xMDE1ODEqZWlbVnQoditjLDEyNyldPj4xNiw4PmIuRWJbMV0mJihiLkViWzFdPTgpLGIuUWNbMF09dGlbVnQoditoLDExNyldLGIuUWNbMV09ZWlbVnQoditsLDEyNyldLGIubGM9ditsfWlmKCF1LlJiKXJldHVybiBKdCh0LDQsXCJOb3QgYSBrZXkgZnJhbWUuXCIpO2ZvcihQKHMpLHU9dC5QYSxuPTA7ND5uOysrbil7Zm9yKG89MDs4Pm87KytvKWZvcihhPTA7Mz5hOysrYSlmb3IoYz0wOzExPmM7KytjKWg9ayhzLHVpW25dW29dW2FdW2NdKT9nKHMsOCk6b2lbbl1bb11bYV1bY10sdS5XY1tuXVtvXS5ZYlthXVtjXT1oO2ZvcihvPTA7MTc+bzsrK28pdS5YY1tuXVtvXT11LldjW25dW2NpW29dXX1yZXR1cm4gdC5rYz1QKHMpLHQua2MmJih0LkJkPWcocyw4KSksdC5jYj0xfWZ1bmN0aW9uIFp0KHQsZSxyLG4saSxhLG8pe3ZhciBzPWVbaV0uWWJbcl07Zm9yKHI9MDsxNj5pOysraSl7aWYoIWsodCxzW3IrMF0pKXJldHVybiBpO2Zvcig7IWsodCxzW3IrMV0pOylpZihzPWVbKytpXS5ZYlswXSxyPTAsMTY9PWkpcmV0dXJuIDE2O3ZhciB1PWVbaSsxXS5ZYjtpZihrKHQsc1tyKzJdKSl7dmFyIGM9dCxsPTA7aWYoayhjLChmPXMpWyhoPXIpKzNdKSlpZihrKGMsZltoKzZdKSl7Zm9yKHM9MCxoPTIqKGw9ayhjLGZbaCs4XSkpKyhmPWsoYyxmW2grOStsXSkpLGw9MCxmPW5pW2hdO2Zbc107KytzKWwrPWwrayhjLGZbc10pO2wrPTMrKDg8PGgpfWVsc2UgayhjLGZbaCs3XSk/KGw9NysyKmsoYywxNjUpLGwrPWsoYywxNDUpKTpsPTUrayhjLDE1OSk7ZWxzZSBsPWsoYyxmW2grNF0pPzMrayhjLGZbaCs1XSk6MjtzPXVbMl19ZWxzZSBsPTEscz11WzFdO3U9bytpaVtpXSwwPihjPXQpLmImJl8oYyk7dmFyIGgsZj1jLmIsZD0oaD1jLkNhPj4xKS0oYy5JPj5mKT4+MzE7LS1jLmIsYy5DYSs9ZCxjLkNhfD0xLGMuSS09KGgrMSZkKTw8ZixhW3VdPSgobF5kKS1kKSpuWygwPGkpKzBdfXJldHVybiAxNn1mdW5jdGlvbiAkdCh0KXt2YXIgZT10LnJiW3Quc2ItMV07ZS5sYT0wLGUuTmE9MCxpKHQuemMsMCwwLHQuemMubGVuZ3RoKSx0LmphPTB9ZnVuY3Rpb24gUXQodCxlLHIsbixpKXtpPXRbZStyKzMyKm5dKyhpPj4zKSx0W2UrciszMipuXT0tMjU2Jmk/MD5pPzA6MjU1Oml9ZnVuY3Rpb24gdGUodCxlLHIsbixpLGEpe1F0KHQsZSwwLHIsbitpKSxRdCh0LGUsMSxyLG4rYSksUXQodCxlLDIscixuLWEpLFF0KHQsZSwzLHIsbi1pKX1mdW5jdGlvbiBlZSh0KXtyZXR1cm4oMjAwOTEqdD4+MTYpK3R9ZnVuY3Rpb24gcmUodCxlLHIsbil7dmFyIGksbz0wLHM9YSgxNik7Zm9yKGk9MDs0Pmk7KytpKXt2YXIgdT10W2UrMF0rdFtlKzhdLGM9dFtlKzBdLXRbZSs4XSxsPSgzNTQ2OCp0W2UrNF0+PjE2KS1lZSh0W2UrMTJdKSxoPWVlKHRbZSs0XSkrKDM1NDY4KnRbZSsxMl0+PjE2KTtzW28rMF09dStoLHNbbysxXT1jK2wsc1tvKzJdPWMtbCxzW28rM109dS1oLG8rPTQsZSsrfWZvcihpPW89MDs0Pmk7KytpKXU9KHQ9c1tvKzBdKzQpK3Nbbys4XSxjPXQtc1tvKzhdLGw9KDM1NDY4KnNbbys0XT4+MTYpLWVlKHNbbysxMl0pLFF0KHIsbiwwLDAsdSsoaD1lZShzW28rNF0pKygzNTQ2OCpzW28rMTJdPj4xNikpKSxRdChyLG4sMSwwLGMrbCksUXQocixuLDIsMCxjLWwpLFF0KHIsbiwzLDAsdS1oKSxvKyssbis9MzJ9ZnVuY3Rpb24gbmUodCxlLHIsbil7dmFyIGk9dFtlKzBdKzQsYT0zNTQ2OCp0W2UrNF0+PjE2LG89ZWUodFtlKzRdKSxzPTM1NDY4KnRbZSsxXT4+MTY7dGUocixuLDAsaStvLHQ9ZWUodFtlKzFdKSxzKSx0ZShyLG4sMSxpK2EsdCxzKSx0ZShyLG4sMixpLWEsdCxzKSx0ZShyLG4sMyxpLW8sdCxzKX1mdW5jdGlvbiBpZSh0LGUscixuLGkpe3JlKHQsZSxyLG4pLGkmJnJlKHQsZSsxNixyLG4rNCl9ZnVuY3Rpb24gYWUodCxlLHIsbil7YW4odCxlKzAscixuLDEpLGFuKHQsZSszMixyLG4rMTI4LDEpfWZ1bmN0aW9uIG9lKHQsZSxyLG4pe3ZhciBpO2Zvcih0PXRbZSswXSs0LGk9MDs0Pmk7KytpKWZvcihlPTA7ND5lOysrZSlRdChyLG4sZSxpLHQpfWZ1bmN0aW9uIHNlKHQsZSxyLG4pe3RbZSswXSYmdW4odCxlKzAscixuKSx0W2UrMTZdJiZ1bih0LGUrMTYscixuKzQpLHRbZSszMl0mJnVuKHQsZSszMixyLG4rMTI4KSx0W2UrNDhdJiZ1bih0LGUrNDgscixuKzEyOCs0KX1mdW5jdGlvbiB1ZSh0LGUscixuKXt2YXIgaSxvPWEoMTYpO2ZvcihpPTA7ND5pOysraSl7dmFyIHM9dFtlKzAraV0rdFtlKzEyK2ldLHU9dFtlKzQraV0rdFtlKzgraV0sYz10W2UrNCtpXS10W2UrOCtpXSxsPXRbZSswK2ldLXRbZSsxMitpXTtvWzAraV09cyt1LG9bOCtpXT1zLXUsb1s0K2ldPWwrYyxvWzEyK2ldPWwtY31mb3IoaT0wOzQ+aTsrK2kpcz0odD1vWzArNCppXSszKStvWzMrNCppXSx1PW9bMSs0KmldK29bMis0KmldLGM9b1sxKzQqaV0tb1syKzQqaV0sbD10LW9bMys0KmldLHJbbiswXT1zK3U+PjMscltuKzE2XT1sK2M+PjMscltuKzMyXT1zLXU+PjMscltuKzQ4XT1sLWM+PjMsbis9NjR9ZnVuY3Rpb24gY2UodCxlLHIpe3ZhciBuLGk9ZS0zMixhPU9uLG89MjU1LXRbaS0xXTtmb3Iobj0wO248cjsrK24pe3ZhciBzLHU9YSxjPW8rdFtlLTFdO2ZvcihzPTA7czxyOysrcyl0W2Urc109dVtjK3RbaStzXV07ZSs9MzJ9fWZ1bmN0aW9uIGxlKHQsZSl7Y2UodCxlLDQpfWZ1bmN0aW9uIGhlKHQsZSl7Y2UodCxlLDgpfWZ1bmN0aW9uIGZlKHQsZSl7Y2UodCxlLDE2KX1mdW5jdGlvbiBkZSh0LGUpe3ZhciByO2ZvcihyPTA7MTY+cjsrK3Ipbih0LGUrMzIqcix0LGUtMzIsMTYpfWZ1bmN0aW9uIHBlKHQsZSl7dmFyIHI7Zm9yKHI9MTY7MDxyOy0tcilpKHQsZSx0W2UtMV0sMTYpLGUrPTMyfWZ1bmN0aW9uIGdlKHQsZSxyKXt2YXIgbjtmb3Iobj0wOzE2Pm47KytuKWkoZSxyKzMyKm4sdCwxNil9ZnVuY3Rpb24gbWUodCxlKXt2YXIgcixuPTE2O2ZvcihyPTA7MTY+cjsrK3Ipbis9dFtlLTErMzIqcl0rdFtlK3ItMzJdO2dlKG4+PjUsdCxlKX1mdW5jdGlvbiB2ZSh0LGUpe3ZhciByLG49ODtmb3Iocj0wOzE2PnI7KytyKW4rPXRbZS0xKzMyKnJdO2dlKG4+PjQsdCxlKX1mdW5jdGlvbiBiZSh0LGUpe3ZhciByLG49ODtmb3Iocj0wOzE2PnI7KytyKW4rPXRbZStyLTMyXTtnZShuPj40LHQsZSl9ZnVuY3Rpb24geWUodCxlKXtnZSgxMjgsdCxlKX1mdW5jdGlvbiB3ZSh0LGUscil7cmV0dXJuIHQrMiplK3IrMj4+Mn1mdW5jdGlvbiBOZSh0LGUpe3ZhciByLGk9ZS0zMjtmb3IoaT1uZXcgVWludDhBcnJheShbd2UodFtpLTFdLHRbaSswXSx0W2krMV0pLHdlKHRbaSswXSx0W2krMV0sdFtpKzJdKSx3ZSh0W2krMV0sdFtpKzJdLHRbaSszXSksd2UodFtpKzJdLHRbaSszXSx0W2krNF0pXSkscj0wOzQ+cjsrK3Ipbih0LGUrMzIqcixpLDAsaS5sZW5ndGgpfWZ1bmN0aW9uIExlKHQsZSl7dmFyIHI9dFtlLTFdLG49dFtlLTErMzJdLGk9dFtlLTErNjRdLGE9dFtlLTErOTZdO0YodCxlKzAsMTY4NDMwMDkqd2UodFtlLTEtMzJdLHIsbikpLEYodCxlKzMyLDE2ODQzMDA5KndlKHIsbixpKSksRih0LGUrNjQsMTY4NDMwMDkqd2UobixpLGEpKSxGKHQsZSs5NiwxNjg0MzAwOSp3ZShpLGEsYSkpfWZ1bmN0aW9uIHhlKHQsZSl7dmFyIHIsbj00O2ZvcihyPTA7ND5yOysrciluKz10W2Urci0zMl0rdFtlLTErMzIqcl07Zm9yKG4+Pj0zLHI9MDs0PnI7KytyKWkodCxlKzMyKnIsbiw0KX1mdW5jdGlvbiBBZSh0LGUpe3ZhciByPXRbZS0xKzBdLG49dFtlLTErMzJdLGk9dFtlLTErNjRdLGE9dFtlLTEtMzJdLG89dFtlKzAtMzJdLHM9dFtlKzEtMzJdLHU9dFtlKzItMzJdLGM9dFtlKzMtMzJdO3RbZSswKzk2XT13ZShuLGksdFtlLTErOTZdKSx0W2UrMSs5Nl09dFtlKzArNjRdPXdlKHIsbixpKSx0W2UrMis5Nl09dFtlKzErNjRdPXRbZSswKzMyXT13ZShhLHIsbiksdFtlKzMrOTZdPXRbZSsyKzY0XT10W2UrMSszMl09dFtlKzArMF09d2UobyxhLHIpLHRbZSszKzY0XT10W2UrMiszMl09dFtlKzErMF09d2UocyxvLGEpLHRbZSszKzMyXT10W2UrMiswXT13ZSh1LHMsbyksdFtlKzMrMF09d2UoYyx1LHMpfWZ1bmN0aW9uIFNlKHQsZSl7dmFyIHI9dFtlKzEtMzJdLG49dFtlKzItMzJdLGk9dFtlKzMtMzJdLGE9dFtlKzQtMzJdLG89dFtlKzUtMzJdLHM9dFtlKzYtMzJdLHU9dFtlKzctMzJdO3RbZSswKzBdPXdlKHRbZSswLTMyXSxyLG4pLHRbZSsxKzBdPXRbZSswKzMyXT13ZShyLG4saSksdFtlKzIrMF09dFtlKzErMzJdPXRbZSswKzY0XT13ZShuLGksYSksdFtlKzMrMF09dFtlKzIrMzJdPXRbZSsxKzY0XT10W2UrMCs5Nl09d2UoaSxhLG8pLHRbZSszKzMyXT10W2UrMis2NF09dFtlKzErOTZdPXdlKGEsbyxzKSx0W2UrMys2NF09dFtlKzIrOTZdPXdlKG8scyx1KSx0W2UrMys5Nl09d2Uocyx1LHUpfWZ1bmN0aW9uIF9lKHQsZSl7dmFyIHI9dFtlLTErMF0sbj10W2UtMSszMl0saT10W2UtMSs2NF0sYT10W2UtMS0zMl0sbz10W2UrMC0zMl0scz10W2UrMS0zMl0sdT10W2UrMi0zMl0sYz10W2UrMy0zMl07dFtlKzArMF09dFtlKzErNjRdPWErbysxPj4xLHRbZSsxKzBdPXRbZSsyKzY0XT1vK3MrMT4+MSx0W2UrMiswXT10W2UrMys2NF09cyt1KzE+PjEsdFtlKzMrMF09dStjKzE+PjEsdFtlKzArOTZdPXdlKGksbixyKSx0W2UrMCs2NF09d2UobixyLGEpLHRbZSswKzMyXT10W2UrMSs5Nl09d2UocixhLG8pLHRbZSsxKzMyXT10W2UrMis5Nl09d2UoYSxvLHMpLHRbZSsyKzMyXT10W2UrMys5Nl09d2UobyxzLHUpLHRbZSszKzMyXT13ZShzLHUsYyl9ZnVuY3Rpb24gUGUodCxlKXt2YXIgcj10W2UrMC0zMl0sbj10W2UrMS0zMl0saT10W2UrMi0zMl0sYT10W2UrMy0zMl0sbz10W2UrNC0zMl0scz10W2UrNS0zMl0sdT10W2UrNi0zMl0sYz10W2UrNy0zMl07dFtlKzArMF09cituKzE+PjEsdFtlKzErMF09dFtlKzArNjRdPW4raSsxPj4xLHRbZSsyKzBdPXRbZSsxKzY0XT1pK2ErMT4+MSx0W2UrMyswXT10W2UrMis2NF09YStvKzE+PjEsdFtlKzArMzJdPXdlKHIsbixpKSx0W2UrMSszMl09dFtlKzArOTZdPXdlKG4saSxhKSx0W2UrMiszMl09dFtlKzErOTZdPXdlKGksYSxvKSx0W2UrMyszMl09dFtlKzIrOTZdPXdlKGEsbyxzKSx0W2UrMys2NF09d2UobyxzLHUpLHRbZSszKzk2XT13ZShzLHUsYyl9ZnVuY3Rpb24ga2UodCxlKXt2YXIgcj10W2UtMSswXSxuPXRbZS0xKzMyXSxpPXRbZS0xKzY0XSxhPXRbZS0xKzk2XTt0W2UrMCswXT1yK24rMT4+MSx0W2UrMiswXT10W2UrMCszMl09bitpKzE+PjEsdFtlKzIrMzJdPXRbZSswKzY0XT1pK2ErMT4+MSx0W2UrMSswXT13ZShyLG4saSksdFtlKzMrMF09dFtlKzErMzJdPXdlKG4saSxhKSx0W2UrMyszMl09dFtlKzErNjRdPXdlKGksYSxhKSx0W2UrMys2NF09dFtlKzIrNjRdPXRbZSswKzk2XT10W2UrMSs5Nl09dFtlKzIrOTZdPXRbZSszKzk2XT1hfWZ1bmN0aW9uIEZlKHQsZSl7dmFyIHI9dFtlLTErMF0sbj10W2UtMSszMl0saT10W2UtMSs2NF0sYT10W2UtMSs5Nl0sbz10W2UtMS0zMl0scz10W2UrMC0zMl0sdT10W2UrMS0zMl0sYz10W2UrMi0zMl07dFtlKzArMF09dFtlKzIrMzJdPXIrbysxPj4xLHRbZSswKzMyXT10W2UrMis2NF09bityKzE+PjEsdFtlKzArNjRdPXRbZSsyKzk2XT1pK24rMT4+MSx0W2UrMCs5Nl09YStpKzE+PjEsdFtlKzMrMF09d2Uocyx1LGMpLHRbZSsyKzBdPXdlKG8scyx1KSx0W2UrMSswXT10W2UrMyszMl09d2UocixvLHMpLHRbZSsxKzMyXT10W2UrMys2NF09d2UobixyLG8pLHRbZSsxKzY0XT10W2UrMys5Nl09d2UoaSxuLHIpLHRbZSsxKzk2XT13ZShhLGksbil9ZnVuY3Rpb24gSWUodCxlKXt2YXIgcjtmb3Iocj0wOzg+cjsrK3Ipbih0LGUrMzIqcix0LGUtMzIsOCl9ZnVuY3Rpb24gQ2UodCxlKXt2YXIgcjtmb3Iocj0wOzg+cjsrK3IpaSh0LGUsdFtlLTFdLDgpLGUrPTMyfWZ1bmN0aW9uIGplKHQsZSxyKXt2YXIgbjtmb3Iobj0wOzg+bjsrK24paShlLHIrMzIqbix0LDgpfWZ1bmN0aW9uIE9lKHQsZSl7dmFyIHIsbj04O2ZvcihyPTA7OD5yOysrciluKz10W2Urci0zMl0rdFtlLTErMzIqcl07amUobj4+NCx0LGUpfWZ1bmN0aW9uIEJlKHQsZSl7dmFyIHIsbj00O2ZvcihyPTA7OD5yOysrciluKz10W2Urci0zMl07amUobj4+Myx0LGUpfWZ1bmN0aW9uIE1lKHQsZSl7dmFyIHIsbj00O2ZvcihyPTA7OD5yOysrciluKz10W2UtMSszMipyXTtqZShuPj4zLHQsZSl9ZnVuY3Rpb24gcWUodCxlKXtqZSgxMjgsdCxlKX1mdW5jdGlvbiBFZSh0LGUscil7dmFyIG49dFtlLXJdLGk9dFtlKzBdLGE9MyooaS1uKStDblsxMDIwK3RbZS0yKnJdLXRbZStyXV0sbz1qblsxMTIrKGErND4+MyldO3RbZS1yXT1PblsyNTUrbitqblsxMTIrKGErMz4+MyldXSx0W2UrMF09T25bMjU1K2ktb119ZnVuY3Rpb24gUmUodCxlLHIsbil7dmFyIGk9dFtlKzBdLGE9dFtlK3JdO3JldHVybiBCblsyNTUrdFtlLTIqcl0tdFtlLXJdXT5ufHxCblsyNTUrYS1pXT5ufWZ1bmN0aW9uIERlKHQsZSxyLG4pe3JldHVybiA0KkJuWzI1NSt0W2Utcl0tdFtlKzBdXStCblsyNTUrdFtlLTIqcl0tdFtlK3JdXTw9bn1mdW5jdGlvbiBUZSh0LGUscixuLGkpe3ZhciBhPXRbZS0zKnJdLG89dFtlLTIqcl0scz10W2Utcl0sdT10W2UrMF0sYz10W2Urcl0sbD10W2UrMipyXSxoPXRbZSszKnJdO3JldHVybiA0KkJuWzI1NStzLXVdK0JuWzI1NStvLWNdPm4/MDpCblsyNTUrdFtlLTQqcl0tYV08PWkmJkJuWzI1NSthLW9dPD1pJiZCblsyNTUrby1zXTw9aSYmQm5bMjU1K2gtbF08PWkmJkJuWzI1NStsLWNdPD1pJiZCblsyNTUrYy11XTw9aX1mdW5jdGlvbiB6ZSh0LGUscixuKXt2YXIgaT0yKm4rMTtmb3Iobj0wOzE2Pm47KytuKURlKHQsZStuLHIsaSkmJkVlKHQsZStuLHIpfWZ1bmN0aW9uIFVlKHQsZSxyLG4pe3ZhciBpPTIqbisxO2ZvcihuPTA7MTY+bjsrK24pRGUodCxlK24qciwxLGkpJiZFZSh0LGUrbipyLDEpfWZ1bmN0aW9uIEhlKHQsZSxyLG4pe3ZhciBpO2ZvcihpPTM7MDxpOy0taSl6ZSh0LGUrPTQqcixyLG4pfWZ1bmN0aW9uIFdlKHQsZSxyLG4pe3ZhciBpO2ZvcihpPTM7MDxpOy0taSlVZSh0LGUrPTQscixuKX1mdW5jdGlvbiBWZSh0LGUscixuLGksYSxvLHMpe2ZvcihhPTIqYSsxOzA8aS0tOyl7aWYoVGUodCxlLHIsYSxvKSlpZihSZSh0LGUscixzKSlFZSh0LGUscik7ZWxzZXt2YXIgdT10LGM9ZSxsPXIsaD11W2MtMipsXSxmPXVbYy1sXSxkPXVbYyswXSxwPXVbYytsXSxnPXVbYysyKmxdLG09MjcqKGI9Q25bMTAyMCszKihkLWYpK0NuWzEwMjAraC1wXV0pKzYzPj43LHY9MTgqYis2Mz4+NyxiPTkqYis2Mz4+Nzt1W2MtMypsXT1PblsyNTUrdVtjLTMqbF0rYl0sdVtjLTIqbF09T25bMjU1K2grdl0sdVtjLWxdPU9uWzI1NStmK21dLHVbYyswXT1PblsyNTUrZC1tXSx1W2MrbF09T25bMjU1K3Atdl0sdVtjKzIqbF09T25bMjU1K2ctYl19ZSs9bn19ZnVuY3Rpb24gR2UodCxlLHIsbixpLGEsbyxzKXtmb3IoYT0yKmErMTswPGktLTspe2lmKFRlKHQsZSxyLGEsbykpaWYoUmUodCxlLHIscykpRWUodCxlLHIpO2Vsc2V7dmFyIHU9dCxjPWUsbD1yLGg9dVtjLWxdLGY9dVtjKzBdLGQ9dVtjK2xdLHA9am5bMTEyKyg0KyhnPTMqKGYtaCkpPj4zKV0sZz1qblsxMTIrKGcrMz4+MyldLG09cCsxPj4xO3VbYy0yKmxdPU9uWzI1NSt1W2MtMipsXSttXSx1W2MtbF09T25bMjU1K2grZ10sdVtjKzBdPU9uWzI1NStmLXBdLHVbYytsXT1PblsyNTUrZC1tXX1lKz1ufX1mdW5jdGlvbiBZZSh0LGUscixuLGksYSl7VmUodCxlLHIsMSwxNixuLGksYSl9ZnVuY3Rpb24gSmUodCxlLHIsbixpLGEpe1ZlKHQsZSwxLHIsMTYsbixpLGEpfWZ1bmN0aW9uIFhlKHQsZSxyLG4saSxhKXt2YXIgbztmb3Iobz0zOzA8bzstLW8pR2UodCxlKz00KnIsciwxLDE2LG4saSxhKX1mdW5jdGlvbiBLZSh0LGUscixuLGksYSl7dmFyIG87Zm9yKG89MzswPG87LS1vKUdlKHQsZSs9NCwxLHIsMTYsbixpLGEpfWZ1bmN0aW9uIFplKHQsZSxyLG4saSxhLG8scyl7VmUodCxlLGksMSw4LGEsbyxzKSxWZShyLG4saSwxLDgsYSxvLHMpfWZ1bmN0aW9uICRlKHQsZSxyLG4saSxhLG8scyl7VmUodCxlLDEsaSw4LGEsbyxzKSxWZShyLG4sMSxpLDgsYSxvLHMpfWZ1bmN0aW9uIFFlKHQsZSxyLG4saSxhLG8scyl7R2UodCxlKzQqaSxpLDEsOCxhLG8scyksR2UocixuKzQqaSxpLDEsOCxhLG8scyl9ZnVuY3Rpb24gdHIodCxlLHIsbixpLGEsbyxzKXtHZSh0LGUrNCwxLGksOCxhLG8scyksR2UocixuKzQsMSxpLDgsYSxvLHMpfWZ1bmN0aW9uIGVyKCl7dGhpcy5iYT1uZXcgb3QsdGhpcy5lYz1bXSx0aGlzLmNjPVtdLHRoaXMuTWM9W10sdGhpcy5EYz10aGlzLk5jPXRoaXMuZGM9dGhpcy5mYz0wLHRoaXMuT2E9bmV3IHV0LHRoaXMubWVtb3J5PTAsdGhpcy5JYj1cIk91dHB1dEZ1bmNcIix0aGlzLkpiPVwiT3V0cHV0QWxwaGFGdW5jXCIsdGhpcy5OZD1cIk91dHB1dFJvd0Z1bmNcIn1mdW5jdGlvbiBycigpe3RoaXMuZGF0YT1bXSx0aGlzLm9mZnNldD10aGlzLmtkPXRoaXMuaGE9dGhpcy53PTAsdGhpcy5uYT1bXSx0aGlzLnhhPXRoaXMuZ2I9dGhpcy5KYT10aGlzLlNhPXRoaXMuUD0wfWZ1bmN0aW9uIG5yKCl7dGhpcy5uYz10aGlzLkVhPXRoaXMuYj10aGlzLmhjPTAsdGhpcy5LPVtdLHRoaXMudz0wfWZ1bmN0aW9uIGlyKCl7dGhpcy51YT0wLHRoaXMuV2E9bmV3IE0sdGhpcy52Yj1uZXcgTSx0aGlzLm1kPXRoaXMueGM9dGhpcy53Yz0wLHRoaXMudmM9W10sdGhpcy5XYj0wLHRoaXMuWWE9bmV3IGQsdGhpcy55Yz1uZXcgaH1mdW5jdGlvbiBhcigpe3RoaXMueGI9dGhpcy5hPTAsdGhpcy5sPW5ldyBHdCx0aGlzLmNhPW5ldyBvdCx0aGlzLlY9W10sdGhpcy5CYT0wLHRoaXMuVGE9W10sdGhpcy5VYT0wLHRoaXMubT1uZXcgTix0aGlzLlBiPTAsdGhpcy53ZD1uZXcgTix0aGlzLk1hPXRoaXMuJD10aGlzLkM9dGhpcy5pPXRoaXMuYz10aGlzLnhkPTAsdGhpcy5zPW5ldyBpcix0aGlzLmFiPTAsdGhpcy5nYz1vKDQsbnIpLHRoaXMuT2M9MH1mdW5jdGlvbiBvcigpe3RoaXMuTGM9dGhpcy5aPXRoaXMuJGE9dGhpcy5pPXRoaXMuYz0wLHRoaXMubD1uZXcgR3QsdGhpcy5pYz0wLHRoaXMuY2E9W10sdGhpcy50Yj0wLHRoaXMucWQ9bnVsbCx0aGlzLnJkPTB9ZnVuY3Rpb24gc3IodCxlLHIsbixpLGEsbyl7Zm9yKHQ9bnVsbD09dD8wOnRbZSswXSxlPTA7ZTxvOysrZSlpW2ErZV09dCtyW24rZV0mMjU1LHQ9aVthK2VdfWZ1bmN0aW9uIHVyKHQsZSxyLG4saSxhLG8pe3ZhciBzO2lmKG51bGw9PXQpc3IobnVsbCxudWxsLHIsbixpLGEsbyk7ZWxzZSBmb3Iocz0wO3M8bzsrK3MpaVthK3NdPXRbZStzXStyW24rc10mMjU1fWZ1bmN0aW9uIGNyKHQsZSxyLG4saSxhLG8pe2lmKG51bGw9PXQpc3IobnVsbCxudWxsLHIsbixpLGEsbyk7ZWxzZXt2YXIgcyx1PXRbZSswXSxjPXUsbD11O2ZvcihzPTA7czxvOysrcyljPWwrKHU9dFtlK3NdKS1jLGw9cltuK3NdKygtMjU2JmM/MD5jPzA6MjU1OmMpJjI1NSxjPXUsaVthK3NdPWx9fWZ1bmN0aW9uIGxyKHQscixpLG8pe3ZhciBzPXIud2lkdGgsdT1yLm87aWYoZShudWxsIT10JiZudWxsIT1yKSwwPml8fDA+PW98fGkrbz51KXJldHVybiBudWxsO2lmKCF0LkNjKXtpZihudWxsPT10LmdhKXt2YXIgYztpZih0LmdhPW5ldyBvciwoYz1udWxsPT10LmdhKXx8KGM9ci53aWR0aCpyLm8sZSgwPT10LkdiLmxlbmd0aCksdC5HYj1hKGMpLHQuVWM9MCxudWxsPT10LkdiP2M9MDoodC5tYj10LkdiLHQubmI9dC5VYyx0LnJjPW51bGwsYz0xKSxjPSFjKSwhYyl7Yz10LmdhO3ZhciBsPXQuRmEsaD10LlAsZj10LnFjLGQ9dC5tYixwPXQubmIsZz1oKzEsbT1mLTEsYj1jLmw7aWYoZShudWxsIT1sJiZudWxsIT1kJiZudWxsIT1yKSxnaVswXT1udWxsLGdpWzFdPXNyLGdpWzJdPXVyLGdpWzNdPWNyLGMuY2E9ZCxjLnRiPXAsYy5jPXIud2lkdGgsYy5pPXIuaGVpZ2h0LGUoMDxjLmMmJjA8Yy5pKSwxPj1mKXI9MDtlbHNlIGlmKGMuJGE9MyZsW2grMF0sYy5aPWxbaCswXT4+MiYzLGMuTGM9bFtoKzBdPj40JjMsaD1sW2grMF0+PjYmMywwPmMuJGF8fDE8Yy4kYXx8NDw9Yy5afHwxPGMuTGN8fGgpcj0wO2Vsc2UgaWYoYi5wdXQ9ZHQsYi5hYz1mdCxiLmJjPXB0LGIubWE9YyxiLndpZHRoPXIud2lkdGgsYi5oZWlnaHQ9ci5oZWlnaHQsYi5EYT1yLkRhLGIudj1yLnYsYi52YT1yLnZhLGIuaj1yLmosYi5vPXIubyxjLiRhKXQ6e2UoMT09Yy4kYSkscj1rdCgpO2U6Zm9yKDs7KXtpZihudWxsPT1yKXtyPTA7YnJlYWsgdH1pZihlKG51bGwhPWMpLGMubWM9cixyLmM9Yy5jLHIuaT1jLmksci5sPWMubCxyLmwubWE9YyxyLmwud2lkdGg9Yy5jLHIubC5oZWlnaHQ9Yy5pLHIuYT0wLHYoci5tLGwsZyxtKSwhRnQoYy5jLGMuaSwxLHIsbnVsbCkpYnJlYWsgZTtpZigxPT1yLmFiJiYzPT1yLmdjWzBdLmhjJiZ4dChyLnMpPyhjLmljPTEsbD1yLmMqci5pLHIuVGE9bnVsbCxyLlVhPTAsci5WPWEobCksci5CYT0wLG51bGw9PXIuVj8oci5hPTEscj0wKTpyPTEpOihjLmljPTAscj1JdChyLGMuYykpLCFyKWJyZWFrIGU7cj0xO2JyZWFrIHR9Yy5tYz1udWxsLHI9MH1lbHNlIHI9bT49Yy5jKmMuaTtjPSFyfWlmKGMpcmV0dXJuIG51bGw7MSE9dC5nYS5MYz90LkdhPTA6bz11LWl9ZShudWxsIT10LmdhKSxlKGkrbzw9dSk7dDp7aWYocj0obD10LmdhKS5jLHU9bC5sLm8sMD09bC4kYSl7aWYoZz10LnJjLG09dC5WYyxiPXQuRmEsaD10LlArMStpKnIsZj10Lm1iLGQ9dC5uYitpKnIsZShoPD10LlArdC5xYyksMCE9bC5aKWZvcihlKG51bGwhPWdpW2wuWl0pLGM9MDtjPG87KytjKWdpW2wuWl0oZyxtLGIsaCxmLGQsciksZz1mLG09ZCxkKz1yLGgrPXI7ZWxzZSBmb3IoYz0wO2M8bzsrK2MpbihmLGQsYixoLHIpLGc9ZixtPWQsZCs9cixoKz1yO3QucmM9Zyx0LlZjPW19ZWxzZXtpZihlKG51bGwhPWwubWMpLHI9aStvLGUobnVsbCE9KGM9bC5tYykpLGUocjw9Yy5pKSxjLkM+PXIpcj0xO2Vsc2UgaWYobC5pY3x8Z3IoKSxsLmljKXtsPWMuVixnPWMuQmEsbT1jLmM7dmFyIHk9Yy5pLHc9KGI9MSxoPWMuJC9tLGY9Yy4kJW0sZD1jLm0scD1jLnMsYy4kKSxOPW0qeSxMPW0qcixBPXAud2MsXz13PEw/d3QocCxmLGgpOm51bGw7ZSh3PD1OKSxlKHI8PXkpLGUoeHQocCkpO2U6Zm9yKDs7KXtmb3IoOyFkLmgmJnc8TDspe2lmKGYmQXx8KF89d3QocCxmLGgpKSxlKG51bGwhPV8pLFMoZCksMjU2Pih5PWJ0KF8uR1swXSxfLkhbMF0sZCkpKWxbZyt3XT15LCsrdywrK2Y+PW0mJihmPTAsKytoPD1yJiYhKGglMTYpJiZTdChjLGgpKTtlbHNle2lmKCEoMjgwPnkpKXtiPTA7YnJlYWsgZX15PW10KHktMjU2LGQpO3ZhciBQLGs9YnQoXy5HWzRdLF8uSFs0XSxkKTtpZihTKGQpLCEodz49KGs9dnQobSxrPW10KGssZCkpKSYmTi13Pj15KSl7Yj0wO2JyZWFrIGV9Zm9yKFA9MDtQPHk7KytQKWxbZyt3K1BdPWxbZyt3K1Ata107Zm9yKHcrPXksZis9eTtmPj1tOylmLT1tLCsraDw9ciYmIShoJTE2KSYmU3QoYyxoKTt3PEwmJmYmQSYmKF89d3QocCxmLGgpKX1lKGQuaD09eChkKSl9U3QoYyxoPnI/cjpoKTticmVhayBlfSFifHxkLmgmJnc8Tj8oYj0wLGMuYT1kLmg/NTozKTpjLiQ9dyxyPWJ9ZWxzZSByPV90KGMsYy5WLGMuQmEsYy5jLGMuaSxyLEN0KTtpZighcil7bz0wO2JyZWFrIHR9fWkrbz49dSYmKHQuQ2M9MSksbz0xfWlmKCFvKXJldHVybiBudWxsO2lmKHQuQ2MmJihudWxsIT0obz10LmdhKSYmKG8ubWM9bnVsbCksdC5nYT1udWxsLDA8dC5HYSkpcmV0dXJuIGFsZXJ0KFwidG9kbzpXZWJQRGVxdWFudGl6ZUxldmVsc1wiKSxudWxsfXJldHVybiB0Lm5iK2kqc31mdW5jdGlvbiBocih0LGUscixuLGksYSl7Zm9yKDswPGktLTspe3ZhciBvLHM9dCx1PWUrKHI/MTowKSxjPXQsbD1lKyhyPzA6Myk7Zm9yKG89MDtvPG47KytvKXt2YXIgaD1jW2wrNCpvXTsyNTUhPWgmJihoKj0zMjg5NyxzW3UrNCpvKzBdPXNbdSs0Km8rMF0qaD4+MjMsc1t1KzQqbysxXT1zW3UrNCpvKzFdKmg+PjIzLHNbdSs0Km8rMl09c1t1KzQqbysyXSpoPj4yMyl9ZSs9YX19ZnVuY3Rpb24gZnIodCxlLHIsbixpKXtmb3IoOzA8bi0tOyl7dmFyIGE7Zm9yKGE9MDthPHI7KythKXt2YXIgbz10W2UrMiphKzBdLHM9MTUmKGM9dFtlKzIqYSsxXSksdT00MzY5KnMsYz0oMjQwJmN8Yz4+NCkqdT4+MTY7dFtlKzIqYSswXT0oMjQwJm98bz4+NCkqdT4+MTYmMjQwfCgxNSZvfG88PDQpKnU+PjE2Pj40JjE1LHRbZSsyKmErMV09MjQwJmN8c31lKz1pfX1mdW5jdGlvbiBkcih0LGUscixuLGksYSxvLHMpe3ZhciB1LGMsbD0yNTU7Zm9yKGM9MDtjPGk7KytjKXtmb3IodT0wO3U8bjsrK3Upe3ZhciBoPXRbZSt1XTthW28rNCp1XT1oLGwmPWh9ZSs9cixvKz1zfXJldHVybiAyNTUhPWx9ZnVuY3Rpb24gcHIodCxlLHIsbixpKXt2YXIgYTtmb3IoYT0wO2E8aTsrK2EpcltuK2FdPXRbZSthXT4+OH1mdW5jdGlvbiBncigpe0xuPWhyLHhuPWZyLEFuPWRyLFNuPXByfWZ1bmN0aW9uIG1yKHIsbixpKXt0W3JdPWZ1bmN0aW9uKHQscixhLG8scyx1LGMsbCxoLGYsZCxwLGcsbSx2LGIseSl7dmFyIHcsTj15LTE+PjEsTD1zW3UrMF18Y1tsKzBdPDwxNix4PWhbZiswXXxkW3ArMF08PDE2O2UobnVsbCE9dCk7dmFyIEE9MypMK3grMTMxMDc0Pj4yO2ZvcihuKHRbciswXSwyNTUmQSxBPj4xNixnLG0pLG51bGwhPWEmJihBPTMqeCtMKzEzMTA3ND4+MixuKGFbbyswXSwyNTUmQSxBPj4xNix2LGIpKSx3PTE7dzw9TjsrK3cpe3ZhciBTPXNbdSt3XXxjW2wrd108PDE2LF89aFtmK3ddfGRbcCt3XTw8MTYsUD1MK1MreCtfKzUyNDI5NixrPVArMiooUyt4KT4+MztBPWsrTD4+MSxMPShQPVArMiooTCtfKT4+MykrUz4+MSxuKHRbcisyKnctMV0sMjU1JkEsQT4+MTYsZyxtKygyKnctMSkqaSksbih0W3IrMip3LTBdLDI1NSZMLEw+PjE2LGcsbSsoMip3LTApKmkpLG51bGwhPWEmJihBPVAreD4+MSxMPWsrXz4+MSxuKGFbbysyKnctMV0sMjU1JkEsQT4+MTYsdixiKygyKnctMSkqaSksbihhW28rMip3KzBdLDI1NSZMLEw+PjE2LHYsYisoMip3KzApKmkpKSxMPVMseD1ffTEmeXx8KEE9MypMK3grMTMxMDc0Pj4yLG4odFtyK3ktMV0sMjU1JkEsQT4+MTYsZyxtKyh5LTEpKmkpLG51bGwhPWEmJihBPTMqeCtMKzEzMTA3ND4+MixuKGFbbyt5LTFdLDI1NSZBLEE+PjE2LHYsYisoeS0xKSppKSkpfX1mdW5jdGlvbiB2cigpe21pW01uXT12aSxtaVtxbl09eWksbWlbRW5dPWJpLG1pW1JuXT13aSxtaVtEbl09TmksbWlbVG5dPUxpLG1pW3puXT14aSxtaVtVbl09eWksbWlbSG5dPXdpLG1pW1duXT1OaSxtaVtWbl09TGl9ZnVuY3Rpb24gYnIodCl7cmV0dXJuIHQmfkZpPzA+dD8wOjI1NTp0Pj5raX1mdW5jdGlvbiB5cih0LGUpe3JldHVybiBicigoMTkwNzcqdD4+OCkrKDI2MTQ5KmU+PjgpLTE0MjM0KX1mdW5jdGlvbiB3cih0LGUscil7cmV0dXJuIGJyKCgxOTA3Nyp0Pj44KS0oNjQxOSplPj44KS0oMTMzMjAqcj4+OCkrODcwOCl9ZnVuY3Rpb24gTnIodCxlKXtyZXR1cm4gYnIoKDE5MDc3KnQ+PjgpKygzMzA1MCplPj44KS0xNzY4NSl9ZnVuY3Rpb24gTHIodCxlLHIsbixpKXtuW2krMF09eXIodCxyKSxuW2krMV09d3IodCxlLHIpLG5baSsyXT1Ocih0LGUpfWZ1bmN0aW9uIHhyKHQsZSxyLG4saSl7bltpKzBdPU5yKHQsZSksbltpKzFdPXdyKHQsZSxyKSxuW2krMl09eXIodCxyKX1mdW5jdGlvbiBBcih0LGUscixuLGkpe3ZhciBhPXdyKHQsZSxyKTtlPWE8PDMmMjI0fE5yKHQsZSk+PjMsbltpKzBdPTI0OCZ5cih0LHIpfGE+PjUsbltpKzFdPWV9ZnVuY3Rpb24gU3IodCxlLHIsbixpKXt2YXIgYT0yNDAmTnIodCxlKXwxNTtuW2krMF09MjQwJnlyKHQscil8d3IodCxlLHIpPj40LG5baSsxXT1hfWZ1bmN0aW9uIF9yKHQsZSxyLG4saSl7bltpKzBdPTI1NSxMcih0LGUscixuLGkrMSl9ZnVuY3Rpb24gUHIodCxlLHIsbixpKXt4cih0LGUscixuLGkpLG5baSszXT0yNTV9ZnVuY3Rpb24ga3IodCxlLHIsbixpKXtMcih0LGUscixuLGkpLG5baSszXT0yNTV9ZnVuY3Rpb24gRnIoZSxyLG4pe3RbZV09ZnVuY3Rpb24odCxlLGksYSxvLHMsdSxjLGwpe2Zvcih2YXIgaD1jKygtMiZsKSpuO2MhPWg7KXIodFtlKzBdLGlbYSswXSxvW3MrMF0sdSxjKSxyKHRbZSsxXSxpW2ErMF0sb1tzKzBdLHUsYytuKSxlKz0yLCsrYSwrK3MsYys9MipuOzEmbCYmcih0W2UrMF0saVthKzBdLG9bcyswXSx1LGMpfX1mdW5jdGlvbiBJcih0LGUscil7cmV0dXJuIDA9PXI/MD09dD8wPT1lPzY6NTowPT1lPzQ6MDpyfWZ1bmN0aW9uIENyKHQsZSxyLG4saSl7c3dpdGNoKHQ+Pj4zMCl7Y2FzZSAzOmFuKGUscixuLGksMCk7YnJlYWs7Y2FzZSAyOm9uKGUscixuLGkpO2JyZWFrO2Nhc2UgMTp1bihlLHIsbixpKX19ZnVuY3Rpb24ganIodCxlKXt2YXIgcixhLG89ZS5NLHM9ZS5OYix1PXQub2MsYz10LnBjKzQwLGw9dC5vYyxoPXQucGMrNTg0LGY9dC5vYyxkPXQucGMrNjAwO2ZvcihyPTA7MTY+cjsrK3IpdVtjKzMyKnItMV09MTI5O2ZvcihyPTA7OD5yOysrcilsW2grMzIqci0xXT0xMjksZltkKzMyKnItMV09MTI5O2ZvcigwPG8/dVtjLTEtMzJdPWxbaC0xLTMyXT1mW2QtMS0zMl09MTI5OihpKHUsYy0zMi0xLDEyNywyMSksaShsLGgtMzItMSwxMjcsOSksaShmLGQtMzItMSwxMjcsOSkpLGE9MDthPHQuemE7KythKXt2YXIgcD1lLnlhW2UuYWErYV07aWYoMDxhKXtmb3Iocj0tMTsxNj5yOysrciluKHUsYyszMipyLTQsdSxjKzMyKnIrMTIsNCk7Zm9yKHI9LTE7OD5yOysrciluKGwsaCszMipyLTQsbCxoKzMyKnIrNCw0KSxuKGYsZCszMipyLTQsZixkKzMyKnIrNCw0KX12YXIgZz10LkdkLG09dC5IZCthLHY9cC5hZCxiPXAuSGM7aWYoMDxvJiYobih1LGMtMzIsZ1ttXS55LDAsMTYpLG4obCxoLTMyLGdbbV0uZiwwLDgpLG4oZixkLTMyLGdbbV0uZWEsMCw4KSkscC5aYSl7dmFyIHk9dSx3PWMtMzIrMTY7Zm9yKDA8byYmKGE+PXQuemEtMT9pKHksdyxnW21dLnlbMTVdLDQpOm4oeSx3LGdbbSsxXS55LDAsNCkpLHI9MDs0PnI7cisrKXlbdysxMjgrcl09eVt3KzI1NityXT15W3crMzg0K3JdPXlbdyswK3JdO2ZvcihyPTA7MTY+cjsrK3IsYjw8PTIpeT11LHc9YytFaVtyXSxoaVtwLk9iW3JdXSh5LHcpLENyKGIsdiwxNiorcix5LHcpfWVsc2UgaWYoeT1JcihhLG8scC5PYlswXSksbGlbeV0odSxjKSwwIT1iKWZvcihyPTA7MTY+cjsrK3IsYjw8PTIpQ3IoYix2LDE2KityLHUsYytFaVtyXSk7Zm9yKHI9cC5HYyx5PUlyKGEsbyxwLkRkKSxmaVt5XShsLGgpLGZpW3ldKGYsZCksYj12LHk9bCx3PWgsMjU1JihwPTB8cikmJigxNzAmcD9zbihiLDI1Nix5LHcpOmNuKGIsMjU2LHksdykpLHA9ZixiPWQsMjU1JihyPj49OCkmJigxNzAmcj9zbih2LDMyMCxwLGIpOmNuKHYsMzIwLHAsYikpLG88dC5VYi0xJiYobihnW21dLnksMCx1LGMrNDgwLDE2KSxuKGdbbV0uZiwwLGwsaCsyMjQsOCksbihnW21dLmVhLDAsZixkKzIyNCw4KSkscj04KnMqdC5CLGc9dC5zYSxtPXQudGErMTYqYSsxNipzKnQuUix2PXQucWEscD10LnJhKzgqYStyLGI9dC5IYSx5PXQuSWErOCphK3Iscj0wOzE2PnI7KytyKW4oZyxtK3IqdC5SLHUsYyszMipyLDE2KTtmb3Iocj0wOzg+cjsrK3Ipbih2LHArcip0LkIsbCxoKzMyKnIsOCksbihiLHkrcip0LkIsZixkKzMyKnIsOCl9fWZ1bmN0aW9uIE9yKHQsbixpLGEsbyxzLHUsYyxsKXt2YXIgaD1bMF0sZj1bMF0sZD0wLHA9bnVsbCE9bD9sLmtkOjAsZz1udWxsIT1sP2w6bmV3IHJyO2lmKG51bGw9PXR8fDEyPmkpcmV0dXJuIDc7Zy5kYXRhPXQsZy53PW4sZy5oYT1pLG49W25dLGk9W2ldLGcuZ2I9W2cuZ2JdO3Q6e3ZhciBtPW4sYj1pLHk9Zy5nYjtpZihlKG51bGwhPXQpLGUobnVsbCE9YiksZShudWxsIT15KSx5WzBdPTAsMTI8PWJbMF0mJiFyKHQsbVswXSxcIlJJRkZcIikpe2lmKHIodCxtWzBdKzgsXCJXRUJQXCIpKXt5PTM7YnJlYWsgdH12YXIgdz1qKHQsbVswXSs0KTtpZigxMj53fHw0Mjk0OTY3Mjg2PHcpe3k9MzticmVhayB0fWlmKHAmJnc+YlswXS04KXt5PTc7YnJlYWsgdH15WzBdPXcsbVswXSs9MTIsYlswXS09MTJ9eT0wfWlmKDAhPXkpcmV0dXJuIHk7Zm9yKHc9MDxnLmdiWzBdLGk9aVswXTs7KXt0Ont2YXIgTD10O2I9bix5PWk7dmFyIHg9aCxBPWYsUz1tPVswXTtpZigoaz1kPVtkXSlbMF09MCw4PnlbMF0peT03O2Vsc2V7aWYoIXIoTCxiWzBdLFwiVlA4WFwiKSl7aWYoMTAhPWooTCxiWzBdKzQpKXt5PTM7YnJlYWsgdH1pZigxOD55WzBdKXt5PTc7YnJlYWsgdH12YXIgXz1qKEwsYlswXSs4KSxQPTErQyhMLGJbMF0rMTIpO2lmKDIxNDc0ODM2NDg8PVAqKEw9MStDKEwsYlswXSsxNSkpKXt5PTM7YnJlYWsgdH1udWxsIT1TJiYoU1swXT1fKSxudWxsIT14JiYoeFswXT1QKSxudWxsIT1BJiYoQVswXT1MKSxiWzBdKz0xOCx5WzBdLT0xOCxrWzBdPTF9eT0wfX1pZihkPWRbMF0sbT1tWzBdLDAhPXkpcmV0dXJuIHk7aWYoYj0hISgyJm0pLCF3JiZkKXJldHVybiAzO2lmKG51bGwhPXMmJihzWzBdPSEhKDE2Jm0pKSxudWxsIT11JiYodVswXT1iKSxudWxsIT1jJiYoY1swXT0wKSx1PWhbMF0sbT1mWzBdLGQmJmImJm51bGw9PWwpe3k9MDticmVha31pZig0Pmkpe3k9NzticmVha31pZih3JiZkfHwhdyYmIWQmJiFyKHQsblswXSxcIkFMUEhcIikpe2k9W2ldLGcubmE9W2cubmFdLGcuUD1bZy5QXSxnLlNhPVtnLlNhXTt0OntfPXQseT1uLHc9aTt2YXIgaz1nLmdiO3g9Zy5uYSxBPWcuUCxTPWcuU2EsUD0yMixlKG51bGwhPV8pLGUobnVsbCE9dyksTD15WzBdO3ZhciBGPXdbMF07Zm9yKGUobnVsbCE9eCksZShudWxsIT1TKSx4WzBdPW51bGwsQVswXT1udWxsLFNbMF09MDs7KXtpZih5WzBdPUwsd1swXT1GLDg+Ril7eT03O2JyZWFrIHR9dmFyIEk9aihfLEwrNCk7aWYoNDI5NDk2NzI4NjxJKXt5PTM7YnJlYWsgdH12YXIgTz04K0krMSYtMjtpZihQKz1PLDA8ayYmUD5rKXt5PTM7YnJlYWsgdH1pZighcihfLEwsXCJWUDggXCIpfHwhcihfLEwsXCJWUDhMXCIpKXt5PTA7YnJlYWsgdH1pZihGWzBdPE8pe3k9NzticmVhayB0fXIoXyxMLFwiQUxQSFwiKXx8KHhbMF09XyxBWzBdPUwrOCxTWzBdPUkpLEwrPU8sRi09T319aWYoaT1pWzBdLGcubmE9Zy5uYVswXSxnLlA9Zy5QWzBdLGcuU2E9Zy5TYVswXSwwIT15KWJyZWFrfWk9W2ldLGcuSmE9W2cuSmFdLGcueGE9W2cueGFdO3Q6aWYoaz10LHk9bix3PWkseD1nLmdiWzBdLEE9Zy5KYSxTPWcueGEsXz15WzBdLEw9IXIoayxfLFwiVlA4IFwiKSxQPSFyKGssXyxcIlZQOExcIiksZShudWxsIT1rKSxlKG51bGwhPXcpLGUobnVsbCE9QSksZShudWxsIT1TKSw4PndbMF0peT03O2Vsc2V7aWYoTHx8UCl7aWYoaz1qKGssXys0KSwxMjw9eCYmaz54LTEyKXt5PTM7YnJlYWsgdH1pZihwJiZrPndbMF0tOCl7eT03O2JyZWFrIHR9QVswXT1rLHlbMF0rPTgsd1swXS09OCxTWzBdPVB9ZWxzZSBTWzBdPTU8PXdbMF0mJjQ3PT1rW18rMF0mJiEoa1tfKzRdPj41KSxBWzBdPXdbMF07eT0wfWlmKGk9aVswXSxnLkphPWcuSmFbMF0sZy54YT1nLnhhWzBdLG49blswXSwwIT15KWJyZWFrO2lmKDQyOTQ5NjcyODY8Zy5KYSlyZXR1cm4gMztpZihudWxsPT1jfHxifHwoY1swXT1nLnhhPzI6MSksdT1bdV0sbT1bbV0sZy54YSl7aWYoNT5pKXt5PTc7YnJlYWt9Yz11LHA9bSxiPXMsbnVsbD09dHx8NT5pP3Q9MDo1PD1pJiY0Nz09dFtuKzBdJiYhKHRbbis0XT4+NSk/KHc9WzBdLGs9WzBdLHg9WzBdLHYoQT1uZXcgTix0LG4saSksZ3QoQSx3LGsseCk/KG51bGwhPWMmJihjWzBdPXdbMF0pLG51bGwhPXAmJihwWzBdPWtbMF0pLG51bGwhPWImJihiWzBdPXhbMF0pLHQ9MSk6dD0wKTp0PTB9ZWxzZXtpZigxMD5pKXt5PTc7YnJlYWt9Yz1tLG51bGw9PXR8fDEwPml8fCFYdCh0LG4rMyxpLTMpP3Q9MDoocD10W24rMF18dFtuKzFdPDw4fHRbbisyXTw8MTYsYj0xNjM4MyYodFtuKzddPDw4fHRbbis2XSksdD0xNjM4MyYodFtuKzldPDw4fHRbbis4XSksMSZwfHwzPChwPj4xJjcpfHwhKHA+PjQmMSl8fHA+PjU+PWcuSmF8fCFifHwhdD90PTA6KHUmJih1WzBdPWIpLGMmJihjWzBdPXQpLHQ9MSkpfWlmKCF0KXJldHVybiAzO2lmKHU9dVswXSxtPW1bMF0sZCYmKGhbMF0hPXV8fGZbMF0hPW0pKXJldHVybiAzO251bGwhPWwmJihsWzBdPWcsbC5vZmZzZXQ9bi1sLncsZSg0Mjk0OTY3Mjg2Pm4tbC53KSxlKGwub2Zmc2V0PT1sLmhhLWkpKTticmVha31yZXR1cm4gMD09eXx8Nz09eSYmZCYmbnVsbD09bD8obnVsbCE9cyYmKHNbMF18PW51bGwhPWcubmEmJjA8Zy5uYS5sZW5ndGgpLG51bGwhPWEmJihhWzBdPXUpLG51bGwhPW8mJihvWzBdPW0pLDApOnl9ZnVuY3Rpb24gQnIodCxlLHIpe3ZhciBuPWUud2lkdGgsaT1lLmhlaWdodCxhPTAsbz0wLHM9bix1PWk7aWYoZS5EYT1udWxsIT10JiYwPHQuRGEsZS5EYSYmKHM9dC5jZCx1PXQuYmQsYT10LnYsbz10LmosMTE+cnx8KGEmPS0yLG8mPS0yKSwwPmF8fDA+b3x8MD49c3x8MD49dXx8YStzPm58fG8rdT5pKSlyZXR1cm4gMDtpZihlLnY9YSxlLmo9byxlLnZhPWErcyxlLm89byt1LGUuVT1zLGUuVD11LGUuZGE9bnVsbCE9dCYmMDx0LmRhLGUuZGEpe2lmKCFxKHMsdSxyPVt0LmliXSxhPVt0LmhiXSkpcmV0dXJuIDA7ZS5pYj1yWzBdLGUuaGI9YVswXX1yZXR1cm4gZS5vYj1udWxsIT10JiZ0Lm9iLGUuS2I9bnVsbD09dHx8IXQuU2QsZS5kYSYmKGUub2I9ZS5pYjwzKm4vNCYmZS5oYjwzKmkvNCxlLktiPTApLDF9ZnVuY3Rpb24gTXIodCl7aWYobnVsbD09dClyZXR1cm4gMjtpZigxMT50LlMpe3ZhciBlPXQuZi5SR0JBO2UuZmIrPSh0LmhlaWdodC0xKSplLkEsZS5BPS1lLkF9ZWxzZSBlPXQuZi5rYix0PXQuaGVpZ2h0LGUuTys9KHQtMSkqZS5mYSxlLmZhPS1lLmZhLGUuTis9KHQtMT4+MSkqZS5BYixlLkFiPS1lLkFiLGUuVys9KHQtMT4+MSkqZS5EYixlLkRiPS1lLkRiLG51bGwhPWUuRiYmKGUuSis9KHQtMSkqZS5sYixlLmxiPS1lLmxiKTtyZXR1cm4gMH1mdW5jdGlvbiBxcih0LGUscixuKXtpZihudWxsPT1ufHwwPj10fHwwPj1lKXJldHVybiAyO2lmKG51bGwhPXIpe2lmKHIuRGEpe3ZhciBpPXIuY2Qsbz1yLmJkLHM9LTImci52LHU9LTImci5qO2lmKDA+c3x8MD51fHwwPj1pfHwwPj1vfHxzK2k+dHx8dStvPmUpcmV0dXJuIDI7dD1pLGU9b31pZihyLmRhKXtpZighcSh0LGUsaT1bci5pYl0sbz1bci5oYl0pKXJldHVybiAyO3Q9aVswXSxlPW9bMF19fW4ud2lkdGg9dCxuLmhlaWdodD1lO3Q6e3ZhciBjPW4ud2lkdGgsbD1uLmhlaWdodDtpZih0PW4uUywwPj1jfHwwPj1sfHwhKHQ+PU1uJiYxMz50KSl0PTI7ZWxzZXtpZigwPj1uLlJkJiZudWxsPT1uLnNkKXtzPW89aT1lPTA7dmFyIGg9KHU9Yyp6aVt0XSkqbDtpZigxMT50fHwobz0obCsxKS8yKihlPShjKzEpLzIpLDEyPT10JiYocz0oaT1jKSpsKSksbnVsbD09KGw9YShoKzIqbytzKSkpe3Q9MTticmVhayB0fW4uc2Q9bCwxMT50PygoYz1uLmYuUkdCQSkuZWI9bCxjLmZiPTAsYy5BPXUsYy5zaXplPWgpOigoYz1uLmYua2IpLnk9bCxjLk89MCxjLmZhPXUsYy5GZD1oLGMuZj1sLGMuTj0wK2gsYy5BYj1lLGMuQ2Q9byxjLmVhPWwsYy5XPTAraCtvLGMuRGI9ZSxjLkVkPW8sMTI9PXQmJihjLkY9bCxjLko9MCtoKzIqbyksYy5UYz1zLGMubGI9aSl9aWYoZT0xLGk9bi5TLG89bi53aWR0aCxzPW4uaGVpZ2h0LGk+PU1uJiYxMz5pKWlmKDExPmkpdD1uLmYuUkdCQSxlJj0odT1NYXRoLmFicyh0LkEpKSoocy0xKStvPD10LnNpemUsZSY9dT49byp6aVtpXSxlJj1udWxsIT10LmViO2Vsc2V7dD1uLmYua2IsdT0obysxKS8yLGg9KHMrMSkvMixjPU1hdGguYWJzKHQuZmEpLGw9TWF0aC5hYnModC5BYik7dmFyIGY9TWF0aC5hYnModC5EYiksZD1NYXRoLmFicyh0LmxiKSxwPWQqKHMtMSkrbztlJj1jKihzLTEpK288PXQuRmQsZSY9bCooaC0xKSt1PD10LkNkLGU9KGUmPWYqKGgtMSkrdTw9dC5FZCkmYz49byZsPj11JmY+PXUsZSY9bnVsbCE9dC55LGUmPW51bGwhPXQuZixlJj1udWxsIT10LmVhLDEyPT1pJiYoZSY9ZD49byxlJj1wPD10LlRjLGUmPW51bGwhPXQuRil9ZWxzZSBlPTA7dD1lPzA6Mn19cmV0dXJuIDAhPXR8fG51bGwhPXImJnIuZmQmJih0PU1yKG4pKSx0fXZhciBFcj02NCxScj1bMCwxLDMsNywxNSwzMSw2MywxMjcsMjU1LDUxMSwxMDIzLDIwNDcsNDA5NSw4MTkxLDE2MzgzLDMyNzY3LDY1NTM1LDEzMTA3MSwyNjIxNDMsNTI0Mjg3LDEwNDg1NzUsMjA5NzE1MSw0MTk0MzAzLDgzODg2MDcsMTY3NzcyMTVdLERyPTI0LFRyPTMyLHpyPTgsVXI9WzAsMCwxLDEsMiwyLDIsMiwzLDMsMywzLDMsMywzLDMsNCw0LDQsNCw0LDQsNCw0LDQsNCw0LDQsNCw0LDQsNCw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDcsNyw3LDddO0QoXCJQcmVkaWN0b3IwXCIsXCJQcmVkaWN0b3JBZGQwXCIpLHQuUHJlZGljdG9yMD1mdW5jdGlvbigpe3JldHVybiA0Mjc4MTkwMDgwfSx0LlByZWRpY3RvcjE9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHQuUHJlZGljdG9yMj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGVbciswXX0sdC5QcmVkaWN0b3IzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZVtyKzFdfSx0LlByZWRpY3RvcjQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlW3ItMV19LHQuUHJlZGljdG9yNT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHooeih0LGVbcisxXSksZVtyKzBdKX0sdC5QcmVkaWN0b3I2PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4geih0LGVbci0xXSl9LHQuUHJlZGljdG9yNz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHoodCxlW3IrMF0pfSx0LlByZWRpY3Rvcjg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB6KGVbci0xXSxlW3IrMF0pfSx0LlByZWRpY3Rvcjk9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB6KGVbciswXSxlW3IrMV0pfSx0LlByZWRpY3RvcjEwPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4geih6KHQsZVtyLTFdKSx6KGVbciswXSxlW3IrMV0pKX0sdC5QcmVkaWN0b3IxMT1mdW5jdGlvbih0LGUscil7dmFyIG49ZVtyKzBdO3JldHVybiAwPj1XKG4+PjI0JjI1NSx0Pj4yNCYyNTUsKGU9ZVtyLTFdKT4+MjQmMjU1KStXKG4+PjE2JjI1NSx0Pj4xNiYyNTUsZT4+MTYmMjU1KStXKG4+PjgmMjU1LHQ+PjgmMjU1LGU+PjgmMjU1KStXKDI1NSZuLDI1NSZ0LDI1NSZlKT9uOnR9LHQuUHJlZGljdG9yMTI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbciswXTtyZXR1cm4oVSgodD4+MjQmMjU1KSsobj4+MjQmMjU1KS0oKGU9ZVtyLTFdKT4+MjQmMjU1KSk8PDI0fFUoKHQ+PjE2JjI1NSkrKG4+PjE2JjI1NSktKGU+PjE2JjI1NSkpPDwxNnxVKCh0Pj44JjI1NSkrKG4+PjgmMjU1KS0oZT4+OCYyNTUpKTw8OHxVKCgyNTUmdCkrKDI1NSZuKS0oMjU1JmUpKSk+Pj4wfSx0LlByZWRpY3RvcjEzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lW3ItMV07cmV0dXJuKEgoKHQ9eih0LGVbciswXSkpPj4yNCYyNTUsbj4+MjQmMjU1KTw8MjR8SCh0Pj4xNiYyNTUsbj4+MTYmMjU1KTw8MTZ8SCh0Pj44JjI1NSxuPj44JjI1NSk8PDh8SCgyNTUmdCwyNTUmbikpPj4+MH07dmFyIEhyPXQuUHJlZGljdG9yQWRkMDt0LlByZWRpY3RvckFkZDE9VixEKFwiUHJlZGljdG9yMlwiLFwiUHJlZGljdG9yQWRkMlwiKSxEKFwiUHJlZGljdG9yM1wiLFwiUHJlZGljdG9yQWRkM1wiKSxEKFwiUHJlZGljdG9yNFwiLFwiUHJlZGljdG9yQWRkNFwiKSxEKFwiUHJlZGljdG9yNVwiLFwiUHJlZGljdG9yQWRkNVwiKSxEKFwiUHJlZGljdG9yNlwiLFwiUHJlZGljdG9yQWRkNlwiKSxEKFwiUHJlZGljdG9yN1wiLFwiUHJlZGljdG9yQWRkN1wiKSxEKFwiUHJlZGljdG9yOFwiLFwiUHJlZGljdG9yQWRkOFwiKSxEKFwiUHJlZGljdG9yOVwiLFwiUHJlZGljdG9yQWRkOVwiKSxEKFwiUHJlZGljdG9yMTBcIixcIlByZWRpY3RvckFkZDEwXCIpLEQoXCJQcmVkaWN0b3IxMVwiLFwiUHJlZGljdG9yQWRkMTFcIiksRChcIlByZWRpY3RvcjEyXCIsXCJQcmVkaWN0b3JBZGQxMlwiKSxEKFwiUHJlZGljdG9yMTNcIixcIlByZWRpY3RvckFkZDEzXCIpO3ZhciBXcj10LlByZWRpY3RvckFkZDI7WChcIkNvbG9ySW5kZXhJbnZlcnNlVHJhbnNmb3JtXCIsXCJNYXBBUkdCXCIsXCIzMmJcIixmdW5jdGlvbih0KXtyZXR1cm4gdD4+OCYyNTV9LGZ1bmN0aW9uKHQpe3JldHVybiB0fSksWChcIlZQOExDb2xvckluZGV4SW52ZXJzZVRyYW5zZm9ybUFscGhhXCIsXCJNYXBBbHBoYVwiLFwiOGJcIixmdW5jdGlvbih0KXtyZXR1cm4gdH0sZnVuY3Rpb24odCl7cmV0dXJuIHQ+PjgmMjU1fSk7dmFyIFZyLEdyPXQuQ29sb3JJbmRleEludmVyc2VUcmFuc2Zvcm0sWXI9dC5NYXBBUkdCLEpyPXQuVlA4TENvbG9ySW5kZXhJbnZlcnNlVHJhbnNmb3JtQWxwaGEsWHI9dC5NYXBBbHBoYSxLcj10LlZQOExQcmVkaWN0b3JzQWRkPVtdO0tyLmxlbmd0aD0xNiwodC5WUDhMUHJlZGljdG9ycz1bXSkubGVuZ3RoPTE2LCh0LlZQOExQcmVkaWN0b3JzQWRkX0M9W10pLmxlbmd0aD0xNiwodC5WUDhMUHJlZGljdG9yc19DPVtdKS5sZW5ndGg9MTY7dmFyIFpyLCRyLFFyLHRuLGVuLHJuLG5uLGFuLG9uLHNuLHVuLGNuLGxuLGhuLGZuLGRuLHBuLGduLG1uLHZuLGJuLHluLHduLE5uLExuLHhuLEFuLFNuLF9uPWEoNTExKSxQbj1hKDIwNDEpLGtuPWEoMjI1KSxGbj1hKDc2NyksSW49MCxDbj1Qbixqbj1rbixPbj1GbixCbj1fbixNbj0wLHFuPTEsRW49MixSbj0zLERuPTQsVG49NSx6bj02LFVuPTcsSG49OCxXbj05LFZuPTEwLEduPVsyLDMsN10sWW49WzMsMywxMV0sSm49WzI4MCwyNTYsMjU2LDI1Niw0MF0sWG49WzAsMSwxLDEsMF0sS249WzE3LDE4LDAsMSwyLDMsNCw1LDE2LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTVdLFpuPVsyNCw3LDIzLDI1LDQwLDYsMzksNDEsMjIsMjYsMzgsNDIsNTYsNSw1NSw1NywyMSwyNyw1NCw1OCwzNyw0Myw3Miw0LDcxLDczLDIwLDI4LDUzLDU5LDcwLDc0LDM2LDQ0LDg4LDY5LDc1LDUyLDYwLDMsODcsODksMTksMjksODYsOTAsMzUsNDUsNjgsNzYsODUsOTEsNTEsNjEsMTA0LDIsMTAzLDEwNSwxOCwzMCwxMDIsMTA2LDM0LDQ2LDg0LDkyLDY3LDc3LDEwMSwxMDcsNTAsNjIsMTIwLDEsMTE5LDEyMSw4Myw5MywxNywzMSwxMDAsMTA4LDY2LDc4LDExOCwxMjIsMzMsNDcsMTE3LDEyMyw0OSw2Myw5OSwxMDksODIsOTQsMCwxMTYsMTI0LDY1LDc5LDE2LDMyLDk4LDExMCw0OCwxMTUsMTI1LDgxLDk1LDY0LDExNCwxMjYsOTcsMTExLDgwLDExMywxMjcsOTYsMTEyXSwkbj1bMjk1NCwyOTU2LDI5NTgsMjk2MiwyOTcwLDI5ODYsMzAxOCwzMDgyLDMyMTIsMzQ2OCwzOTgwLDUwMDRdLFFuPTgsdGk9WzQsNSw2LDcsOCw5LDEwLDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE3LDE4LDE5LDIwLDIwLDIxLDIxLDIyLDIyLDIzLDIzLDI0LDI1LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkxLDkzLDk1LDk2LDk4LDEwMCwxMDEsMTAyLDEwNCwxMDYsMTA4LDExMCwxMTIsMTE0LDExNiwxMTgsMTIyLDEyNCwxMjYsMTI4LDEzMCwxMzIsMTM0LDEzNiwxMzgsMTQwLDE0MywxNDUsMTQ4LDE1MSwxNTQsMTU3XSxlaT1bNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNjAsNjIsNjQsNjYsNjgsNzAsNzIsNzQsNzYsNzgsODAsODIsODQsODYsODgsOTAsOTIsOTQsOTYsOTgsMTAwLDEwMiwxMDQsMTA2LDEwOCwxMTAsMTEyLDExNCwxMTYsMTE5LDEyMiwxMjUsMTI4LDEzMSwxMzQsMTM3LDE0MCwxNDMsMTQ2LDE0OSwxNTIsMTU1LDE1OCwxNjEsMTY0LDE2NywxNzAsMTczLDE3NywxODEsMTg1LDE4OSwxOTMsMTk3LDIwMSwyMDUsMjA5LDIxMywyMTcsMjIxLDIyNSwyMjksMjM0LDIzOSwyNDUsMjQ5LDI1NCwyNTksMjY0LDI2OSwyNzQsMjc5LDI4NF0scmk9bnVsbCxuaT1bWzE3MywxNDgsMTQwLDBdLFsxNzYsMTU1LDE0MCwxMzUsMF0sWzE4MCwxNTcsMTQxLDEzNCwxMzAsMF0sWzI1NCwyNTQsMjQzLDIzMCwxOTYsMTc3LDE1MywxNDAsMTMzLDEzMCwxMjksMF1dLGlpPVswLDEsNCw4LDUsMiwzLDYsOSwxMiwxMywxMCw3LDExLDE0LDE1XSxhaT1bLTAsMSwtMSwyLC0yLDMsNCw2LC0zLDUsLTQsLTUsLTYsNywtNyw4LC04LC05XSxvaT1bW1tbMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOF0sWzEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjhdLFsxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4XV0sW1syNTMsMTM2LDI1NCwyNTUsMjI4LDIxOSwxMjgsMTI4LDEyOCwxMjgsMTI4XSxbMTg5LDEyOSwyNDIsMjU1LDIyNywyMTMsMjU1LDIxOSwxMjgsMTI4LDEyOF0sWzEwNiwxMjYsMjI3LDI1MiwyMTQsMjA5LDI1NSwyNTUsMTI4LDEyOCwxMjhdXSxbWzEsOTgsMjQ4LDI1NSwyMzYsMjI2LDI1NSwyNTUsMTI4LDEyOCwxMjhdLFsxODEsMTMzLDIzOCwyNTQsMjIxLDIzNCwyNTUsMTU0LDEyOCwxMjgsMTI4XSxbNzgsMTM0LDIwMiwyNDcsMTk4LDE4MCwyNTUsMjE5LDEyOCwxMjgsMTI4XV0sW1sxLDE4NSwyNDksMjU1LDI0MywyNTUsMTI4LDEyOCwxMjgsMTI4LDEyOF0sWzE4NCwxNTAsMjQ3LDI1NSwyMzYsMjI0LDEyOCwxMjgsMTI4LDEyOCwxMjhdLFs3NywxMTAsMjE2LDI1NSwyMzYsMjMwLDEyOCwxMjgsMTI4LDEyOCwxMjhdXSxbWzEsMTAxLDI1MSwyNTUsMjQxLDI1NSwxMjgsMTI4LDEyOCwxMjgsMTI4XSxbMTcwLDEzOSwyNDEsMjUyLDIzNiwyMDksMjU1LDI1NSwxMjgsMTI4LDEyOF0sWzM3LDExNiwxOTYsMjQzLDIyOCwyNTUsMjU1LDI1NSwxMjgsMTI4LDEyOF1dLFtbMSwyMDQsMjU0LDI1NSwyNDUsMjU1LDEyOCwxMjgsMTI4LDEyOCwxMjhdLFsyMDcsMTYwLDI1MCwyNTUsMjM4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4XSxbMTAyLDEwMywyMzEsMjU1LDIxMSwxNzEsMTI4LDEyOCwxMjgsMTI4LDEyOF1dLFtbMSwxNTIsMjUyLDI1NSwyNDAsMjU1LDEyOCwxMjgsMTI4LDEyOCwxMjhdLFsxNzcsMTM1LDI0MywyNTUsMjM0LDIyNSwxMjgsMTI4LDEyOCwxMjgsMTI4XSxbODAsMTI5LDIxMSwyNTUsMTk0LDIyNCwxMjgsMTI4LDEyOCwxMjgsMTI4XV0sW1sxLDEsMjU1LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjhdLFsyNDYsMSwyNTUsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOF0sWzI1NSwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjhdXV0sW1tbMTk4LDM1LDIzNywyMjMsMTkzLDE4NywxNjIsMTYwLDE0NSwxNTUsNjJdLFsxMzEsNDUsMTk4LDIyMSwxNzIsMTc2LDIyMCwxNTcsMjUyLDIyMSwxXSxbNjgsNDcsMTQ2LDIwOCwxNDksMTY3LDIyMSwxNjIsMjU1LDIyMywxMjhdXSxbWzEsMTQ5LDI0MSwyNTUsMjIxLDIyNCwyNTUsMjU1LDEyOCwxMjgsMTI4XSxbMTg0LDE0MSwyMzQsMjUzLDIyMiwyMjAsMjU1LDE5OSwxMjgsMTI4LDEyOF0sWzgxLDk5LDE4MSwyNDIsMTc2LDE5MCwyNDksMjAyLDI1NSwyNTUsMTI4XV0sW1sxLDEyOSwyMzIsMjUzLDIxNCwxOTcsMjQyLDE5NiwyNTUsMjU1LDEyOF0sWzk5LDEyMSwyMTAsMjUwLDIwMSwxOTgsMjU1LDIwMiwxMjgsMTI4LDEyOF0sWzIzLDkxLDE2MywyNDIsMTcwLDE4NywyNDcsMjEwLDI1NSwyNTUsMTI4XV0sW1sxLDIwMCwyNDYsMjU1LDIzNCwyNTUsMTI4LDEyOCwxMjgsMTI4LDEyOF0sWzEwOSwxNzgsMjQxLDI1NSwyMzEsMjQ1LDI1NSwyNTUsMTI4LDEyOCwxMjhdLFs0NCwxMzAsMjAxLDI1MywyMDUsMTkyLDI1NSwyNTUsMTI4LDEyOCwxMjhdXSxbWzEsMTMyLDIzOSwyNTEsMjE5LDIwOSwyNTUsMTY1LDEyOCwxMjgsMTI4XSxbOTQsMTM2LDIyNSwyNTEsMjE4LDE5MCwyNTUsMjU1LDEyOCwxMjgsMTI4XSxbMjIsMTAwLDE3NCwyNDUsMTg2LDE2MSwyNTUsMTk5LDEyOCwxMjgsMTI4XV0sW1sxLDE4MiwyNDksMjU1LDIzMiwyMzUsMTI4LDEyOCwxMjgsMTI4LDEyOF0sWzEyNCwxNDMsMjQxLDI1NSwyMjcsMjM0LDEyOCwxMjgsMTI4LDEyOCwxMjhdLFszNSw3NywxODEsMjUxLDE5MywyMTEsMjU1LDIwNSwxMjgsMTI4LDEyOF1dLFtbMSwxNTcsMjQ3LDI1NSwyMzYsMjMxLDI1NSwyNTUsMTI4LDEyOCwxMjhdLFsxMjEsMTQxLDIzNSwyNTUsMjI1LDIyNywyNTUsMjU1LDEyOCwxMjgsMTI4XSxbNDUsOTksMTg4LDI1MSwxOTUsMjE3LDI1NSwyMjQsMTI4LDEyOCwxMjhdXSxbWzEsMSwyNTEsMjU1LDIxMywyNTUsMTI4LDEyOCwxMjgsMTI4LDEyOF0sWzIwMywxLDI0OCwyNTUsMjU1LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4XSxbMTM3LDEsMTc3LDI1NSwyMjQsMjU1LDEyOCwxMjgsMTI4LDEyOCwxMjhdXV0sW1tbMjUzLDksMjQ4LDI1MSwyMDcsMjA4LDI1NSwxOTIsMTI4LDEyOCwxMjhdLFsxNzUsMTMsMjI0LDI0MywxOTMsMTg1LDI0OSwxOTgsMjU1LDI1NSwxMjhdLFs3MywxNywxNzEsMjIxLDE2MSwxNzksMjM2LDE2NywyNTUsMjM0LDEyOF1dLFtbMSw5NSwyNDcsMjUzLDIxMiwxODMsMjU1LDI1NSwxMjgsMTI4LDEyOF0sWzIzOSw5MCwyNDQsMjUwLDIxMSwyMDksMjU1LDI1NSwxMjgsMTI4LDEyOF0sWzE1NSw3NywxOTUsMjQ4LDE4OCwxOTUsMjU1LDI1NSwxMjgsMTI4LDEyOF1dLFtbMSwyNCwyMzksMjUxLDIxOCwyMTksMjU1LDIwNSwxMjgsMTI4LDEyOF0sWzIwMSw1MSwyMTksMjU1LDE5NiwxODYsMTI4LDEyOCwxMjgsMTI4LDEyOF0sWzY5LDQ2LDE5MCwyMzksMjAxLDIxOCwyNTUsMjI4LDEyOCwxMjgsMTI4XV0sW1sxLDE5MSwyNTEsMjU1LDI1NSwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOF0sWzIyMywxNjUsMjQ5LDI1NSwyMTMsMjU1LDEyOCwxMjgsMTI4LDEyOCwxMjhdLFsxNDEsMTI0LDI0OCwyNTUsMjU1LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4XV0sW1sxLDE2LDI0OCwyNTUsMjU1LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4XSxbMTkwLDM2LDIzMCwyNTUsMjM2LDI1NSwxMjgsMTI4LDEyOCwxMjgsMTI4XSxbMTQ5LDEsMjU1LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjhdXSxbWzEsMjI2LDI1NSwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4XSxbMjQ3LDE5MiwyNTUsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOF0sWzI0MCwxMjgsMjU1LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjhdXSxbWzEsMTM0LDI1MiwyNTUsMjU1LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4XSxbMjEzLDYyLDI1MCwyNTUsMjU1LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4XSxbNTUsOTMsMjU1LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjhdXSxbWzEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjhdLFsxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4XSxbMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOF1dXSxbW1syMDIsMjQsMjEzLDIzNSwxODYsMTkxLDIyMCwxNjAsMjQwLDE3NSwyNTVdLFsxMjYsMzgsMTgyLDIzMiwxNjksMTg0LDIyOCwxNzQsMjU1LDE4NywxMjhdLFs2MSw0NiwxMzgsMjE5LDE1MSwxNzgsMjQwLDE3MCwyNTUsMjE2LDEyOF1dLFtbMSwxMTIsMjMwLDI1MCwxOTksMTkxLDI0NywxNTksMjU1LDI1NSwxMjhdLFsxNjYsMTA5LDIyOCwyNTIsMjExLDIxNSwyNTUsMTc0LDEyOCwxMjgsMTI4XSxbMzksNzcsMTYyLDIzMiwxNzIsMTgwLDI0NSwxNzgsMjU1LDI1NSwxMjhdXSxbWzEsNTIsMjIwLDI0NiwxOTgsMTk5LDI0OSwyMjAsMjU1LDI1NSwxMjhdLFsxMjQsNzQsMTkxLDI0MywxODMsMTkzLDI1MCwyMjEsMjU1LDI1NSwxMjhdLFsyNCw3MSwxMzAsMjE5LDE1NCwxNzAsMjQzLDE4MiwyNTUsMjU1LDEyOF1dLFtbMSwxODIsMjI1LDI0OSwyMTksMjQwLDI1NSwyMjQsMTI4LDEyOCwxMjhdLFsxNDksMTUwLDIyNiwyNTIsMjE2LDIwNSwyNTUsMTcxLDEyOCwxMjgsMTI4XSxbMjgsMTA4LDE3MCwyNDIsMTgzLDE5NCwyNTQsMjIzLDI1NSwyNTUsMTI4XV0sW1sxLDgxLDIzMCwyNTIsMjA0LDIwMywyNTUsMTkyLDEyOCwxMjgsMTI4XSxbMTIzLDEwMiwyMDksMjQ3LDE4OCwxOTYsMjU1LDIzMywxMjgsMTI4LDEyOF0sWzIwLDk1LDE1MywyNDMsMTY0LDE3MywyNTUsMjAzLDEyOCwxMjgsMTI4XV0sW1sxLDIyMiwyNDgsMjU1LDIxNiwyMTMsMTI4LDEyOCwxMjgsMTI4LDEyOF0sWzE2OCwxNzUsMjQ2LDI1MiwyMzUsMjA1LDI1NSwyNTUsMTI4LDEyOCwxMjhdLFs0NywxMTYsMjE1LDI1NSwyMTEsMjEyLDI1NSwyNTUsMTI4LDEyOCwxMjhdXSxbWzEsMTIxLDIzNiwyNTMsMjEyLDIxNCwyNTUsMjU1LDEyOCwxMjgsMTI4XSxbMTQxLDg0LDIxMywyNTIsMjAxLDIwMiwyNTUsMjE5LDEyOCwxMjgsMTI4XSxbNDIsODAsMTYwLDI0MCwxNjIsMTg1LDI1NSwyMDUsMTI4LDEyOCwxMjhdXSxbWzEsMSwyNTUsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOF0sWzI0NCwxLDI1NSwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4XSxbMjM4LDEsMjU1LDEyOCwxMjgsMTI4LDEyOCwxMjgsMTI4LDEyOCwxMjhdXV1dLHNpPVtbWzIzMSwxMjAsNDgsODksMTE1LDExMywxMjAsMTUyLDExMl0sWzE1MiwxNzksNjQsMTI2LDE3MCwxMTgsNDYsNzAsOTVdLFsxNzUsNjksMTQzLDgwLDg1LDgyLDcyLDE1NSwxMDNdLFs1Niw1OCwxMCwxNzEsMjE4LDE4OSwxNywxMywxNTJdLFsxMTQsMjYsMTcsMTYzLDQ0LDE5NSwyMSwxMCwxNzNdLFsxMjEsMjQsODAsMTk1LDI2LDYyLDQ0LDY0LDg1XSxbMTQ0LDcxLDEwLDM4LDE3MSwyMTMsMTQ0LDM0LDI2XSxbMTcwLDQ2LDU1LDE5LDEzNiwxNjAsMzMsMjA2LDcxXSxbNjMsMjAsOCwxMTQsMTE0LDIwOCwxMiw5LDIyNl0sWzgxLDQwLDExLDk2LDE4Miw4NCwyOSwxNiwzNl1dLFtbMTM0LDE4Myw4OSwxMzcsOTgsMTAxLDEwNiwxNjUsMTQ4XSxbNzIsMTg3LDEwMCwxMzAsMTU3LDExMSwzMiw3NSw4MF0sWzY2LDEwMiwxNjcsOTksNzQsNjIsNDAsMjM0LDEyOF0sWzQxLDUzLDksMTc4LDI0MSwxNDEsMjYsOCwxMDddLFs3NCw0MywyNiwxNDYsNzMsMTY2LDQ5LDIzLDE1N10sWzY1LDM4LDEwNSwxNjAsNTEsNTIsMzEsMTE1LDEyOF0sWzEwNCw3OSwxMiwyNywyMTcsMjU1LDg3LDE3LDddLFs4Nyw2OCw3MSw0NCwxMTQsNTEsMTUsMTg2LDIzXSxbNDcsNDEsMTQsMTEwLDE4MiwxODMsMjEsMTcsMTk0XSxbNjYsNDUsMjUsMTAyLDE5NywxODksMjMsMTgsMjJdXSxbWzg4LDg4LDE0NywxNTAsNDIsNDYsNDUsMTk2LDIwNV0sWzQzLDk3LDE4MywxMTcsODUsMzgsMzUsMTc5LDYxXSxbMzksNTMsMjAwLDg3LDI2LDIxLDQzLDIzMiwxNzFdLFs1NiwzNCw1MSwxMDQsMTE0LDEwMiwyOSw5Myw3N10sWzM5LDI4LDg1LDE3MSw1OCwxNjUsOTAsOTgsNjRdLFszNCwyMiwxMTYsMjA2LDIzLDM0LDQzLDE2Niw3M10sWzEwNyw1NCwzMiwyNiw1MSwxLDgxLDQzLDMxXSxbNjgsMjUsMTA2LDIyLDY0LDE3MSwzNiwyMjUsMTE0XSxbMzQsMTksMjEsMTAyLDEzMiwxODgsMTYsNzYsMTI0XSxbNjIsMTgsNzgsOTUsODUsNTcsNTAsNDgsNTFdXSxbWzE5MywxMDEsMzUsMTU5LDIxNSwxMTEsODksNDYsMTExXSxbNjAsMTQ4LDMxLDE3MiwyMTksMjI4LDIxLDE4LDExMV0sWzExMiwxMTMsNzcsODUsMTc5LDI1NSwzOCwxMjAsMTE0XSxbNDAsNDIsMSwxOTYsMjQ1LDIwOSwxMCwyNSwxMDldLFs4OCw0MywyOSwxNDAsMTY2LDIxMywzNyw0MywxNTRdLFs2MSw2MywzMCwxNTUsNjcsNDUsNjgsMSwyMDldLFsxMDAsODAsOCw0MywxNTQsMSw1MSwyNiw3MV0sWzE0Miw3OCw3OCwxNiwyNTUsMTI4LDM0LDE5NywxNzFdLFs0MSw0MCw1LDEwMiwyMTEsMTgzLDQsMSwyMjFdLFs1MSw1MCwxNywxNjgsMjA5LDE5MiwyMywyNSw4Ml1dLFtbMTM4LDMxLDM2LDE3MSwyNywxNjYsMzgsNDQsMjI5XSxbNjcsODcsNTgsMTY5LDgyLDExNSwyNiw1OSwxNzldLFs2Myw1OSw5MCwxODAsNTksMTY2LDkzLDczLDE1NF0sWzQwLDQwLDIxLDExNiwxNDMsMjA5LDM0LDM5LDE3NV0sWzQ3LDE1LDE2LDE4MywzNCwyMjMsNDksNDUsMTgzXSxbNDYsMTcsMzMsMTgzLDYsOTgsMTUsMzIsMTgzXSxbNTcsNDYsMjIsMjQsMTI4LDEsNTQsMTcsMzddLFs2NSwzMiw3MywxMTUsMjgsMTI4LDIzLDEyOCwyMDVdLFs0MCwzLDksMTE1LDUxLDE5MiwxOCw2LDIyM10sWzg3LDM3LDksMTE1LDU5LDc3LDY0LDIxLDQ3XV0sW1sxMDQsNTUsNDQsMjE4LDksNTQsNTMsMTMwLDIyNl0sWzY0LDkwLDcwLDIwNSw0MCw0MSwyMywyNiw1N10sWzU0LDU3LDExMiwxODQsNSw0MSwzOCwxNjYsMjEzXSxbMzAsMzQsMjYsMTMzLDE1MiwxMTYsMTAsMzIsMTM0XSxbMzksMTksNTMsMjIxLDI2LDExNCwzMiw3MywyNTVdLFszMSw5LDY1LDIzNCwyLDE1LDEsMTE4LDczXSxbNzUsMzIsMTIsNTEsMTkyLDI1NSwxNjAsNDMsNTFdLFs4OCwzMSwzNSw2NywxMDIsODUsNTUsMTg2LDg1XSxbNTYsMjEsMjMsMTExLDU5LDIwNSw0NSwzNywxOTJdLFs1NSwzOCw3MCwxMjQsNzMsMTAyLDEsMzQsOThdXSxbWzEyNSw5OCw0Miw4OCwxMDQsODUsMTE3LDE3NSw4Ml0sWzk1LDg0LDUzLDg5LDEyOCwxMDAsMTEzLDEwMSw0NV0sWzc1LDc5LDEyMyw0Nyw1MSwxMjgsODEsMTcxLDFdLFs1NywxNyw1LDcxLDEwMiw1Nyw1Myw0MSw0OV0sWzM4LDMzLDEzLDEyMSw1Nyw3MywyNiwxLDg1XSxbNDEsMTAsNjcsMTM4LDc3LDExMCw5MCw0NywxMTRdLFsxMTUsMjEsMiwxMCwxMDIsMjU1LDE2NiwyMyw2XSxbMTAxLDI5LDE2LDEwLDg1LDEyOCwxMDEsMTk2LDI2XSxbNTcsMTgsMTAsMTAyLDEwMiwyMTMsMzQsMjAsNDNdLFsxMTcsMjAsMTUsMzYsMTYzLDEyOCw2OCwxLDI2XV0sW1sxMDIsNjEsNzEsMzcsMzQsNTMsMzEsMjQzLDE5Ml0sWzY5LDYwLDcxLDM4LDczLDExOSwyOCwyMjIsMzddLFs2OCw0NSwxMjgsMzQsMSw0NywxMSwyNDUsMTcxXSxbNjIsMTcsMTksNzAsMTQ2LDg1LDU1LDYyLDcwXSxbMzcsNDMsMzcsMTU0LDEwMCwxNjMsODUsMTYwLDFdLFs2Myw5LDkyLDEzNiwyOCw2NCwzMiwyMDEsODVdLFs3NSwxNSw5LDksNjQsMjU1LDE4NCwxMTksMTZdLFs4Niw2LDI4LDUsNjQsMjU1LDI1LDI0OCwxXSxbNTYsOCwxNywxMzIsMTM3LDI1NSw1NSwxMTYsMTI4XSxbNTgsMTUsMjAsODIsMTM1LDU3LDI2LDEyMSw0MF1dLFtbMTY0LDUwLDMxLDEzNywxNTQsMTMzLDI1LDM1LDIxOF0sWzUxLDEwMyw0NCwxMzEsMTMxLDEyMywzMSw2LDE1OF0sWzg2LDQwLDY0LDEzNSwxNDgsMjI0LDQ1LDE4MywxMjhdLFsyMiwyNiwxNywxMzEsMjQwLDE1NCwxNCwxLDIwOV0sWzQ1LDE2LDIxLDkxLDY0LDIyMiw3LDEsMTk3XSxbNTYsMjEsMzksMTU1LDYwLDEzOCwyMywxMDIsMjEzXSxbODMsMTIsMTMsNTQsMTkyLDI1NSw2OCw0NywyOF0sWzg1LDI2LDg1LDg1LDEyOCwxMjgsMzIsMTQ2LDE3MV0sWzE4LDExLDcsNjMsMTQ0LDE3MSw0LDQsMjQ2XSxbMzUsMjcsMTAsMTQ2LDE3NCwxNzEsMTIsMjYsMTI4XV0sW1sxOTAsODAsMzUsOTksMTgwLDgwLDEyNiw1NCw0NV0sWzg1LDEyNiw0Nyw4NywxNzYsNTEsNDEsMjAsMzJdLFsxMDEsNzUsMTI4LDEzOSwxMTgsMTQ2LDExNiwxMjgsODVdLFs1Niw0MSwxNSwxNzYsMjM2LDg1LDM3LDksNjJdLFs3MSwzMCwxNywxMTksMTE4LDI1NSwxNywxOCwxMzhdLFsxMDEsMzgsNjAsMTM4LDU1LDcwLDQzLDI2LDE0Ml0sWzE0NiwzNiwxOSwzMCwxNzEsMjU1LDk3LDI3LDIwXSxbMTM4LDQ1LDYxLDYyLDIxOSwxLDgxLDE4OCw2NF0sWzMyLDQxLDIwLDExNywxNTEsMTQyLDIwLDIxLDE2M10sWzExMiwxOSwxMiw2MSwxOTUsMTI4LDQ4LDQsMjRdXV0sdWk9W1tbWzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV1dLFtbMTc2LDI0NiwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzIyMywyNDEsMjUyLDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNDksMjUzLDI1MywyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XV0sW1syNTUsMjQ0LDI1MiwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjM0LDI1NCwyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1MywyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdXSxbWzI1NSwyNDYsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyMzksMjUzLDI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjU0LDI1NSwyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV1dLFtbMjU1LDI0OCwyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1MSwyNTUsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XV0sW1syNTUsMjUzLDI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjUxLDI1NCwyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1NCwyNTUsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdXSxbWzI1NSwyNTQsMjUzLDI1NSwyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTAsMjU1LDI1NCwyNTUsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV1dLFtbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XV1dLFtbWzIxNywyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyMjUsMjUyLDI0MSwyNTMsMjU1LDI1NSwyNTQsMjU1LDI1NSwyNTUsMjU1XSxbMjM0LDI1MCwyNDEsMjUwLDI1MywyNTUsMjUzLDI1NCwyNTUsMjU1LDI1NV1dLFtbMjU1LDI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzIyMywyNTQsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyMzgsMjUzLDI1NCwyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XV0sW1syNTUsMjQ4LDI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjQ5LDI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdXSxbWzI1NSwyNTMsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNDcsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV1dLFtbMjU1LDI1MywyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1MiwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XV0sW1syNTUsMjU0LDI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjUzLDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdXSxbWzI1NSwyNTQsMjUzLDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTAsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV1dLFtbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XV1dLFtbWzE4NiwyNTEsMjUwLDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyMzQsMjUxLDI0NCwyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjUxLDI1MSwyNDMsMjUzLDI1NCwyNTUsMjU0LDI1NSwyNTUsMjU1LDI1NV1dLFtbMjU1LDI1MywyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzIzNiwyNTMsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTEsMjUzLDI1MywyNTQsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XV0sW1syNTUsMjU0LDI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjU0LDI1NCwyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdXSxbWzI1NSwyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTQsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV1dLFtbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XV0sW1syNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdXSxbWzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV1dLFtbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XV1dLFtbWzI0OCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTAsMjU0LDI1MiwyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjQ4LDI1NCwyNDksMjUzLDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV1dLFtbMjU1LDI1MywyNTMsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI0NiwyNTMsMjUzLDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTIsMjU0LDI1MSwyNTQsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XV0sW1syNTUsMjU0LDI1MiwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjQ4LDI1NCwyNTMsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1MywyNTUsMjU0LDI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdXSxbWzI1NSwyNTEsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNDUsMjUxLDI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjUzLDI1MywyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV1dLFtbMjU1LDI1MSwyNTMsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1MiwyNTMsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTUsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XV0sW1syNTUsMjUyLDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjQ5LDI1NSwyNTQsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1NSwyNTUsMjU0LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdXSxbWzI1NSwyNTUsMjUzLDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTAsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XSxbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV1dLFtbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0sWzI1NCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTVdLFsyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1XV1dXSxjaT1bMCwxLDIsMyw2LDQsNSw2LDYsNiw2LDYsNiw2LDYsNywwXSxsaT1bXSxoaT1bXSxmaT1bXSxkaT0xLHBpPTIsZ2k9W10sbWk9W107bXIoXCJVcHNhbXBsZVJnYkxpbmVQYWlyXCIsTHIsMyksbXIoXCJVcHNhbXBsZUJnckxpbmVQYWlyXCIseHIsMyksbXIoXCJVcHNhbXBsZVJnYmFMaW5lUGFpclwiLGtyLDQpLG1yKFwiVXBzYW1wbGVCZ3JhTGluZVBhaXJcIixQciw0KSxtcihcIlVwc2FtcGxlQXJnYkxpbmVQYWlyXCIsX3IsNCksbXIoXCJVcHNhbXBsZVJnYmE0NDQ0TGluZVBhaXJcIixTciwyKSxtcihcIlVwc2FtcGxlUmdiNTY1TGluZVBhaXJcIixBciwyKTt2YXIgdmk9dC5VcHNhbXBsZVJnYkxpbmVQYWlyLGJpPXQuVXBzYW1wbGVCZ3JMaW5lUGFpcix5aT10LlVwc2FtcGxlUmdiYUxpbmVQYWlyLHdpPXQuVXBzYW1wbGVCZ3JhTGluZVBhaXIsTmk9dC5VcHNhbXBsZUFyZ2JMaW5lUGFpcixMaT10LlVwc2FtcGxlUmdiYTQ0NDRMaW5lUGFpcix4aT10LlVwc2FtcGxlUmdiNTY1TGluZVBhaXIsQWk9MTYsU2k9MTw8QWktMSxfaT0tMjI3LFBpPTQ4MixraT02LEZpPSgyNTY8PGtpKS0xLElpPTAsQ2k9YSgyNTYpLGppPWEoMjU2KSxPaT1hKDI1NiksQmk9YSgyNTYpLE1pPWEoUGktX2kpLHFpPWEoUGktX2kpO0ZyKFwiWXV2VG9SZ2JSb3dcIixMciwzKSxGcihcIll1dlRvQmdyUm93XCIseHIsMyksRnIoXCJZdXZUb1JnYmFSb3dcIixrciw0KSxGcihcIll1dlRvQmdyYVJvd1wiLFByLDQpLEZyKFwiWXV2VG9BcmdiUm93XCIsX3IsNCksRnIoXCJZdXZUb1JnYmE0NDQ0Um93XCIsU3IsMiksRnIoXCJZdXZUb1JnYjU2NVJvd1wiLEFyLDIpO3ZhciBFaT1bMCw0LDgsMTIsMTI4LDEzMiwxMzYsMTQwLDI1NiwyNjAsMjY0LDI2OCwzODQsMzg4LDM5MiwzOTZdLFJpPVswLDIsOF0sRGk9WzgsNyw2LDQsNCwyLDIsMiwxLDEsMSwxXSxUaT0xO3RoaXMuV2ViUERlY29kZVJHQkE9ZnVuY3Rpb24odCxyLHMsdSxjKXt2YXIgbD1xbixoPW5ldyBlcixmPW5ldyBvdDtoLmJhPWYsZi5TPWwsZi53aWR0aD1bZi53aWR0aF0sZi5oZWlnaHQ9W2YuaGVpZ2h0XTt2YXIgZD1mLndpZHRoLHA9Zi5oZWlnaHQsZz1uZXcgc3Q7aWYobnVsbD09Z3x8bnVsbD09dCl2YXIgbT0yO2Vsc2UgZShudWxsIT1nKSxtPU9yKHQscixzLGcud2lkdGgsZy5oZWlnaHQsZy5QZCxnLlFkLGcuZm9ybWF0LG51bGwpO2lmKDAhPW0/ZD0wOihudWxsIT1kJiYoZFswXT1nLndpZHRoWzBdKSxudWxsIT1wJiYocFswXT1nLmhlaWdodFswXSksZD0xKSxkKXtmLndpZHRoPWYud2lkdGhbMF0sZi5oZWlnaHQ9Zi5oZWlnaHRbMF0sbnVsbCE9dSYmKHVbMF09Zi53aWR0aCksbnVsbCE9YyYmKGNbMF09Zi5oZWlnaHQpO3Q6e2lmKHU9bmV3IEd0LChjPW5ldyBycikuZGF0YT10LGMudz1yLGMuaGE9cyxjLmtkPTEscj1bMF0sZShudWxsIT1jKSwoMD09KHQ9T3IoYy5kYXRhLGMudyxjLmhhLG51bGwsbnVsbCxudWxsLHIsbnVsbCxjKSl8fDc9PXQpJiZyWzBdJiYodD00KSwwPT0ocj10KSl7aWYoZShudWxsIT1oKSx1LmRhdGE9Yy5kYXRhLHUudz1jLncrYy5vZmZzZXQsdS5oYT1jLmhhLWMub2Zmc2V0LHUucHV0PWR0LHUuYWM9ZnQsdS5iYz1wdCx1Lm1hPWgsYy54YSl7aWYobnVsbD09KHQ9a3QoKSkpe2g9MTticmVhayB0fWlmKGZ1bmN0aW9uKHQscil7dmFyIG49WzBdLGk9WzBdLGE9WzBdO2U6Zm9yKDs7KXtpZihudWxsPT10KXJldHVybiAwO2lmKG51bGw9PXIpcmV0dXJuIHQuYT0yLDA7aWYodC5sPXIsdC5hPTAsdih0Lm0sci5kYXRhLHIudyxyLmhhKSwhZ3QodC5tLG4saSxhKSl7dC5hPTM7YnJlYWsgZX1pZih0LnhiPXBpLHIud2lkdGg9blswXSxyLmhlaWdodD1pWzBdLCFGdChuWzBdLGlbMF0sMSx0LG51bGwpKWJyZWFrIGU7cmV0dXJuIDF9cmV0dXJuIGUoMCE9dC5hKSwwfSh0LHUpKXtpZih1PTA9PShyPXFyKHUud2lkdGgsdS5oZWlnaHQsaC5PYSxoLmJhKSkpe2U6e3U9dDtyOmZvcig7Oyl7aWYobnVsbD09dSl7dT0wO2JyZWFrIGV9aWYoZShudWxsIT11LnMueWMpLGUobnVsbCE9dS5zLllhKSxlKDA8dS5zLldiKSxlKG51bGwhPShzPXUubCkpLGUobnVsbCE9KGM9cy5tYSkpLDAhPXUueGIpe2lmKHUuY2E9Yy5iYSx1LnRiPWMudGIsZShudWxsIT11LmNhKSwhQnIoYy5PYSxzLFJuKSl7dS5hPTI7YnJlYWsgcn1pZighSXQodSxzLndpZHRoKSlicmVhayByO2lmKHMuZGEpYnJlYWsgcjtpZigocy5kYXx8bnQodS5jYS5TKSkmJmdyKCksMTE+dS5jYS5TfHwoYWxlcnQoXCJ0b2RvOldlYlBJbml0Q29udmVydEFSR0JUb1lVVlwiKSxudWxsIT11LmNhLmYua2IuRiYmZ3IoKSksdS5QYiYmMDx1LnMudWEmJm51bGw9PXUucy52Yi5YJiYhTyh1LnMudmIsdS5zLldhLlhhKSl7dS5hPTE7YnJlYWsgcn11LnhiPTB9aWYoIV90KHUsdS5WLHUuQmEsdS5jLHUuaSxzLm8sTHQpKWJyZWFrIHI7Yy5EYz11Lk1hLHU9MTticmVhayBlfWUoMCE9dS5hKSx1PTB9dT0hdX11JiYocj10LmEpfWVsc2Ugcj10LmF9ZWxzZXtpZihudWxsPT0odD1uZXcgWXQpKXtoPTE7YnJlYWsgdH1pZih0LkZhPWMubmEsdC5QPWMuUCx0LnFjPWMuU2EsS3QodCx1KSl7aWYoMD09KHI9cXIodS53aWR0aCx1LmhlaWdodCxoLk9hLGguYmEpKSl7aWYodC5BYT0wLHM9aC5PYSxlKG51bGwhPShjPXQpKSxudWxsIT1zKXtpZigwPChkPTA+KGQ9cy5NZCk/MDoxMDA8ZD8yNTU6MjU1KmQvMTAwKSl7Zm9yKHA9Zz0wOzQ+cDsrK3ApMTI+KG09Yy5wYltwXSkubGMmJihtLmlhPWQqRGlbMD5tLmxjPzA6bS5sY10+PjMpLGd8PW0uaWE7ZyYmKGFsZXJ0KFwidG9kbzpWUDhJbml0UmFuZG9tXCIpLGMuaWE9MSl9Yy5HYT1zLklkLDEwMDxjLkdhP2MuR2E9MTAwOjA+Yy5HYSYmKGMuR2E9MCl9KGZ1bmN0aW9uKHQscil7aWYobnVsbD09dClyZXR1cm4gMDtpZihudWxsPT1yKXJldHVybiBKdCh0LDIsXCJOVUxMIFZQOElvIHBhcmFtZXRlciBpbiBWUDhEZWNvZGUoKS5cIik7aWYoIXQuY2ImJiFLdCh0LHIpKXJldHVybiAwO2lmKGUodC5jYiksbnVsbD09ci5hY3x8ci5hYyhyKSl7ci5vYiYmKHQuTD0wKTt2YXIgcz1SaVt0LkxdO2lmKDI9PXQuTD8odC55Yj0wLHQuemI9MCk6KHQueWI9ci52LXM+PjQsdC56Yj1yLmotcz4+NCwwPnQueWImJih0LnliPTApLDA+dC56YiYmKHQuemI9MCkpLHQuVmE9ci5vKzE1K3M+PjQsdC5IYj1yLnZhKzE1K3M+PjQsdC5IYj50LnphJiYodC5IYj10LnphKSx0LlZhPnQuVWImJih0LlZhPXQuVWIpLDA8dC5MKXt2YXIgdT10LmVkO2ZvcihzPTA7ND5zOysrcyl7dmFyIGM7aWYodC5RYS5DYil7dmFyIGw9dC5RYS5MYltzXTt0LlFhLkZifHwobCs9dS5UYil9ZWxzZSBsPXUuVGI7Zm9yKGM9MDsxPj1jOysrYyl7dmFyIGg9dC5nZFtzXVtjXSxmPWw7aWYodS5QYyYmKGYrPXUudmRbMF0sYyYmKGYrPXUub2RbMF0pKSwwPChmPTA+Zj8wOjYzPGY/NjM6Zikpe3ZhciBkPWY7MDx1LndiJiYoZD00PHUud2I/ZD4+MjpkPj4xKT45LXUud2ImJihkPTktdS53YiksMT5kJiYoZD0xKSxoLmRkPWQsaC50Yz0yKmYrZCxoLmxkPTQwPD1mPzI6MTU8PWY/MTowfWVsc2UgaC50Yz0wO2guTGE9Y319fXM9MH1lbHNlIEp0KHQsNixcIkZyYW1lIHNldHVwIGZhaWxlZFwiKSxzPXQuYTtpZihzPTA9PXMpe2lmKHMpe3QuJGM9MCwwPHQuQWF8fCh0LkljPVRpKTtlOntzPXQuSWMsdT00KihkPXQuemEpO3ZhciBwPTMyKmQsZz1kKzEsbT0wPHQuTD9kKigwPHQuQWE/MjoxKTowLHY9KDI9PXQuQWE/MjoxKSpkO2lmKChoPXUrODMyKyhjPTMqKDE2KnMrUmlbdC5MXSkvMipwKSsobD1udWxsIT10LkZhJiYwPHQuRmEubGVuZ3RoP3QuS2MuYyp0LktjLmk6MCkpIT1oKXM9MDtlbHNle2lmKGg+dC5WYil7aWYodC5WYj0wLHQuRWM9YShoKSx0LkZjPTAsbnVsbD09dC5FYyl7cz1KdCh0LDEsXCJubyBtZW1vcnkgZHVyaW5nIGZyYW1lIGluaXRpYWxpemF0aW9uLlwiKTticmVhayBlfXQuVmI9aH1oPXQuRWMsZj10LkZjLHQuQWM9aCx0LkJjPWYsZis9dSx0LkdkPW8ocCxIdCksdC5IZD0wLHQucmI9byhnKzEsRHQpLHQuc2I9MSx0LndhPW0/byhtLFJ0KTpudWxsLHQuWT0wLHQuRC5OYj0wLHQuRC53YT10LndhLHQuRC5ZPXQuWSwwPHQuQWEmJih0LkQuWSs9ZCksZSghMCksdC5vYz1oLHQucGM9ZixmKz04MzIsdC55YT1vKHYsenQpLHQuYWE9MCx0LkQueWE9dC55YSx0LkQuYWE9dC5hYSwyPT10LkFhJiYodC5ELmFhKz1kKSx0LlI9MTYqZCx0LkI9OCpkLGQ9KHA9UmlbdC5MXSkqdC5SLHA9cC8yKnQuQix0LnNhPWgsdC50YT1mK2QsdC5xYT10LnNhLHQucmE9dC50YSsxNipzKnQuUitwLHQuSGE9dC5xYSx0LklhPXQucmErOCpzKnQuQitwLHQuJGM9MCxmKz1jLHQubWI9bD9oOm51bGwsdC5uYj1sP2Y6bnVsbCxlKGYrbDw9dC5GYyt0LlZiKSwkdCh0KSxpKHQuQWMsdC5CYywwLHUpLHM9MX19aWYocyl7aWYoci5rYT0wLHIueT10LnNhLHIuTz10LnRhLHIuZj10LnFhLHIuTj10LnJhLHIuZWE9dC5IYSxyLlZkPXQuSWEsci5mYT10LlIsci5SYz10LkIsci5GPW51bGwsci5KPTAsIUluKXtmb3Iocz0tMjU1OzI1NT49czsrK3MpX25bMjU1K3NdPTA+cz8tczpzO2ZvcihzPS0xMDIwOzEwMjA+PXM7KytzKVBuWzEwMjArc109LTEyOD5zPy0xMjg6MTI3PHM/MTI3OnM7Zm9yKHM9LTExMjsxMTI+PXM7KytzKWtuWzExMitzXT0tMTY+cz8tMTY6MTU8cz8xNTpzO2ZvcihzPS0yNTU7NTEwPj1zOysrcylGblsyNTUrc109MD5zPzA6MjU1PHM/MjU1OnM7SW49MX1ubj11ZSxhbj1pZSxzbj1hZSx1bj1vZSxjbj1zZSxvbj1uZSxsbj1ZZSxobj1KZSxmbj1aZSxkbj0kZSxwbj1YZSxnbj1LZSxtbj1RZSx2bj10cixibj16ZSx5bj1VZSx3bj1IZSxObj1XZSxoaVswXT14ZSxoaVsxXT1sZSxoaVsyXT1OZSxoaVszXT1MZSxoaVs0XT1BZSxoaVs1XT1fZSxoaVs2XT1TZSxoaVs3XT1QZSxoaVs4XT1GZSxoaVs5XT1rZSxsaVswXT1tZSxsaVsxXT1mZSxsaVsyXT1kZSxsaVszXT1wZSxsaVs0XT12ZSxsaVs1XT1iZSxsaVs2XT15ZSxmaVswXT1PZSxmaVsxXT1oZSxmaVsyXT1JZSxmaVszXT1DZSxmaVs0XT1NZSxmaVs1XT1CZSxmaVs2XT1xZSxzPTF9ZWxzZSBzPTB9cyYmKHM9ZnVuY3Rpb24odCxyKXtmb3IodC5NPTA7dC5NPHQuVmE7Kyt0Lk0pe3ZhciBvLHM9dC5KY1t0Lk0mdC5YYl0sdT10Lm0sYz10O2ZvcihvPTA7bzxjLnphOysrbyl7dmFyIGw9dSxoPWMsZj1oLkFjLGQ9aC5CYys0Km8scD1oLnpjLGc9aC55YVtoLmFhK29dO2lmKGguUWEuQmI/Zy4kYj1rKGwsaC5QYS5qYlswXSk/MitrKGwsaC5QYS5qYlsyXSk6ayhsLGguUGEuamJbMV0pOmcuJGI9MCxoLmtjJiYoZy5BZD1rKGwsaC5CZCkpLGcuWmE9IWsobCwxNDUpKzAsZy5aYSl7dmFyIG09Zy5PYix2PTA7Zm9yKGg9MDs0Pmg7KytoKXt2YXIgYix5PXBbMCtoXTtmb3IoYj0wOzQ+YjsrK2Ipe3k9c2lbZltkK2JdXVt5XTtmb3IodmFyIHc9YWlbayhsLHlbMF0pXTswPHc7KXc9YWlbMip3K2sobCx5W3ddKV07eT0tdyxmW2QrYl09eX1uKG0sdixmLGQsNCksdis9NCxwWzAraF09eX19ZWxzZSB5PWsobCwxNTYpP2sobCwxMjgpPzE6MzprKGwsMTYzKT8yOjAsZy5PYlswXT15LGkoZixkLHksNCksaShwLDAseSw0KTtnLkRkPWsobCwxNDIpP2sobCwxMTQpP2sobCwxODMpPzE6MzoyOjB9aWYoYy5tLkthKXJldHVybiBKdCh0LDcsXCJQcmVtYXR1cmUgZW5kLW9mLXBhcnRpdGlvbjAgZW5jb3VudGVyZWQuXCIpO2Zvcig7dC5qYTx0LnphOysrdC5qYSl7aWYoYz1zLGw9KHU9dCkucmJbdS5zYi0xXSxmPXUucmJbdS5zYit1LmphXSxvPXUueWFbdS5hYSt1LmphXSxkPXUua2M/by5BZDowKWwubGE9Zi5sYT0wLG8uWmF8fChsLk5hPWYuTmE9MCksby5IYz0wLG8uR2M9MCxvLmlhPTA7ZWxzZXt2YXIgTixMO2lmKGw9ZixmPWMsZD11LlBhLlhjLHA9dS55YVt1LmFhK3UuamFdLGc9dS5wYltwLiRiXSxoPXAuYWQsbT0wLHY9dS5yYlt1LnNiLTFdLHk9Yj0wLGkoaCxtLDAsMzg0KSxwLlphKXZhciB4PTAsQT1kWzNdO2Vsc2V7dz1hKDE2KTt2YXIgUz1sLk5hK3YuTmE7aWYoUz1yaShmLGRbMV0sUyxnLkViLDAsdywwKSxsLk5hPXYuTmE9KDA8UykrMCwxPFMpbm4odywwLGgsbSk7ZWxzZXt2YXIgXz13WzBdKzM+PjM7Zm9yKHc9MDsyNTY+dzt3Kz0xNiloW20rd109X314PTEsQT1kWzBdfXZhciBQPTE1JmwubGEsRj0xNSZ2LmxhO2Zvcih3PTA7ND53Oysrdyl7dmFyIEk9MSZGO2ZvcihfPUw9MDs0Pl87KytfKVA9UD4+MXwoST0oUz1yaShmLEEsUz1JKygxJlApLGcuU2MseCxoLG0pKT54KTw8NyxMPUw8PDJ8KDM8Uz8zOjE8Uz8yOjAhPWhbbSswXSksbSs9MTY7UD4+PTQsRj1GPj4xfEk8PDcsYj0oYjw8OHxMKT4+PjB9Zm9yKEE9UCx4PUY+PjQsTj0wOzQ+TjtOKz0yKXtmb3IoTD0wLFA9bC5sYT4+NCtOLEY9di5sYT4+NCtOLHc9MDsyPnc7Kyt3KXtmb3IoST0xJkYsXz0wOzI+XzsrK18pUz1JKygxJlApLFA9UD4+MXwoST0wPChTPXJpKGYsZFsyXSxTLGcuUWMsMCxoLG0pKSk8PDMsTD1MPDwyfCgzPFM/MzoxPFM/MjowIT1oW20rMF0pLG0rPTE2O1A+Pj0yLEY9Rj4+MXxJPDw1fXl8PUw8PDQqTixBfD1QPDw0PDxOLHh8PSgyNDAmRik8PE59bC5sYT1BLHYubGE9eCxwLkhjPWIscC5HYz15LHAuaWE9NDM2OTAmeT8wOmcuaWEsZD0hKGJ8eSl9aWYoMDx1LkwmJih1LndhW3UuWSt1LmphXT11LmdkW28uJGJdW28uWmFdLHUud2FbdS5ZK3UuamFdLkxhfD0hZCksYy5LYSlyZXR1cm4gSnQodCw3LFwiUHJlbWF0dXJlIGVuZC1vZi1maWxlIGVuY291bnRlcmVkLlwiKX1pZigkdCh0KSx1PXIsYz0xLG89KHM9dCkuRCxsPTA8cy5MJiZzLk0+PXMuemImJnMuTTw9cy5WYSwwPT1zLkFhKWU6e2lmKG8uTT1zLk0sby51Yz1sLGpyKHMsbyksYz0xLG89KEw9cy5EKS5OYixsPSh5PVJpW3MuTF0pKnMuUixmPXkvMipzLkIsdz0xNipvKnMuUixfPTgqbypzLkIsZD1zLnNhLHA9cy50YS1sK3csZz1zLnFhLGg9cy5yYS1mK18sbT1zLkhhLHY9cy5JYS1mK18sRj0wPT0oUD1MLk0pLGI9UD49cy5WYS0xLDI9PXMuQWEmJmpyKHMsTCksTC51Yylmb3IoST0oUz1zKS5ELk0sZShTLkQudWMpLEw9Uy55YjtMPFMuSGI7KytMKXt4PUwsQT1JO3ZhciBDPShqPSh6PVMpLkQpLk5iO049ei5SO3ZhciBqPWoud2Fbai5ZK3hdLE89ei5zYSxCPXoudGErMTYqQypOKzE2KngsTT1qLmRkLHE9ai50YztpZigwIT1xKWlmKGUoMzw9cSksMT09ei5MKTA8eCYmeW4oTyxCLE4scSs0KSxqLkxhJiZObihPLEIsTixxKSwwPEEmJmJuKE8sQixOLHErNCksai5MYSYmd24oTyxCLE4scSk7ZWxzZXt2YXIgRT16LkIsUj16LnFhLEQ9ei5yYSs4KkMqRSs4KngsVD16LkhhLHo9ei5JYSs4KkMqRSs4Kng7Qz1qLmxkLDA8eCYmKGhuKE8sQixOLHErNCxNLEMpLGRuKFIsRCxULHosRSxxKzQsTSxDKSksai5MYSYmKGduKE8sQixOLHEsTSxDKSx2bihSLEQsVCx6LEUscSxNLEMpKSwwPEEmJihsbihPLEIsTixxKzQsTSxDKSxmbihSLEQsVCx6LEUscSs0LE0sQykpLGouTGEmJihwbihPLEIsTixxLE0sQyksbW4oUixELFQseixFLHEsTSxDKSl9fWlmKHMuaWEmJmFsZXJ0KFwidG9kbzpEaXRoZXJSb3dcIiksbnVsbCE9dS5wdXQpe2lmKEw9MTYqUCxQPTE2KihQKzEpLEY/KHUueT1zLnNhLHUuTz1zLnRhK3csdS5mPXMucWEsdS5OPXMucmErXyx1LmVhPXMuSGEsdS5XPXMuSWErXyk6KEwtPXksdS55PWQsdS5PPXAsdS5mPWcsdS5OPWgsdS5lYT1tLHUuVz12KSxifHwoUC09eSksUD51Lm8mJihQPXUubyksdS5GPW51bGwsdS5KPW51bGwsbnVsbCE9cy5GYSYmMDxzLkZhLmxlbmd0aCYmTDxQJiYodS5KPWxyKHMsdSxMLFAtTCksdS5GPXMubWIsbnVsbD09dS5GJiYwPT11LkYubGVuZ3RoKSl7Yz1KdChzLDMsXCJDb3VsZCBub3QgZGVjb2RlIGFscGhhIGRhdGEuXCIpO2JyZWFrIGV9TDx1LmomJih5PXUuai1MLEw9dS5qLGUoISgxJnkpKSx1Lk8rPXMuUip5LHUuTis9cy5CKih5Pj4xKSx1LlcrPXMuQiooeT4+MSksbnVsbCE9dS5GJiYodS5KKz11LndpZHRoKnkpKSxMPFAmJih1Lk8rPXUudix1Lk4rPXUudj4+MSx1LlcrPXUudj4+MSxudWxsIT11LkYmJih1LkorPXUudiksdS5rYT1MLXUuaix1LlU9dS52YS11LnYsdS5UPVAtTCxjPXUucHV0KHUpKX1vKzEhPXMuSWN8fGJ8fChuKHMuc2Escy50YS1sLGQscCsxNipzLlIsbCksbihzLnFhLHMucmEtZixnLGgrOCpzLkIsZiksbihzLkhhLHMuSWEtZixtLHYrOCpzLkIsZikpfWlmKCFjKXJldHVybiBKdCh0LDYsXCJPdXRwdXQgYWJvcnRlZC5cIil9cmV0dXJuIDF9KHQscikpLG51bGwhPXIuYmMmJnIuYmMocikscyY9MX1yZXR1cm4gcz8odC5jYj0wLHMpOjB9KSh0LHUpfHwocj10LmEpfX1lbHNlIHI9dC5hfTA9PXImJm51bGwhPWguT2EmJmguT2EuZmQmJihyPU1yKGguYmEpKX1oPXJ9bD0wIT1oP251bGw6MTE+bD9mLmYuUkdCQS5lYjpmLmYua2IueX1lbHNlIGw9bnVsbDtyZXR1cm4gbH07dmFyIHppPVszLDQsMyw0LDQsMiwyLDQsNCw0LDIsMSwxXX07ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgcj1cIlwiLG49MDtuPDQ7bisrKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUodFtlKytdKTtyZXR1cm4gcn1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHRbZSswXXx0W2UrMV08PDh9ZnVuY3Rpb24gaCh0LGUpe3JldHVybih0W2UrMF18dFtlKzFdPDw4fHRbZSsyXTw8MTYpPj4+MH1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuKHRbZSswXXx0W2UrMV08PDh8dFtlKzJdPDwxNnx0W2UrM108PDI0KT4+PjB9bmV3IHU7dmFyIGQ9WzBdLHA9WzBdLGc9W10sbT1uZXcgdSx2PXQsYj1mdW5jdGlvbih0LGUpe3ZhciByPXt9LG49MCxpPSExLGE9MCxvPTA7aWYoci5mcmFtZXM9W10sIVxuLyoqIEBsaWNlbnNlXG4gICAqIENvcHlyaWdodCAoYykgMjAxNyBEb21pbmlrIEhvbWJlcmdlclxuICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gIGh0dHBzOi8vd2VicGpzLmFwcHNwb3QuY29tXG4gIFdlYlBSaWZmUGFyc2VyIGRvbWluaWtobGJnQGdtYWlsLmNvbVxuICAqL1xuZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPDQ7cisrKWlmKHRbZStyXSE9XCJSSUZGXCIuY2hhckNvZGVBdChyKSlyZXR1cm4hMDtyZXR1cm4hMX0odCxlKSl7Zm9yKGYodCxlKz00KSxlKz04O2U8dC5sZW5ndGg7KXt2YXIgcz1jKHQsZSksdT1mKHQsZSs9NCk7ZSs9NDt2YXIgZD11KygxJnUpO3N3aXRjaChzKXtjYXNlXCJWUDggXCI6Y2FzZVwiVlA4TFwiOnZvaWQgMD09PXIuZnJhbWVzW25dJiYoci5mcmFtZXNbbl09e30pLChtPXIuZnJhbWVzW25dKS5zcmNfb2ZmPWk/bzplLTgsbS5zcmNfc2l6ZT1hK3UrOCxuKyssaSYmKGk9ITEsYT0wLG89MCk7YnJlYWs7Y2FzZVwiVlA4WFwiOihtPXIuaGVhZGVyPXt9KS5mZWF0dXJlX2ZsYWdzPXRbZV07dmFyIHA9ZSs0O20uY2FudmFzX3dpZHRoPTEraCh0LHApLHArPTMsbS5jYW52YXNfaGVpZ2h0PTEraCh0LHApLHArPTM7YnJlYWs7Y2FzZVwiQUxQSFwiOmk9ITAsYT1kKzgsbz1lLTg7YnJlYWs7Y2FzZVwiQU5JTVwiOihtPXIuaGVhZGVyKS5iZ2NvbG9yPWYodCxlKSxwPWUrNCxtLmxvb3BfY291bnQ9bCh0LHApLHArPTI7YnJlYWs7Y2FzZVwiQU5NRlwiOnZhciBnLG07KG09ci5mcmFtZXNbbl09e30pLm9mZnNldF94PTIqaCh0LGUpLGUrPTMsbS5vZmZzZXRfeT0yKmgodCxlKSxlKz0zLG0ud2lkdGg9MStoKHQsZSksZSs9MyxtLmhlaWdodD0xK2godCxlKSxlKz0zLG0uZHVyYXRpb249aCh0LGUpLGUrPTMsZz10W2UrK10sbS5kaXNwb3NlPTEmZyxtLmJsZW5kPWc+PjEmMX1cIkFOTUZcIiE9cyYmKGUrPWQpfXJldHVybiByfX0odiwwKTtiLnJlc3BvbnNlPXYsYi5yZ2Jhb3V0cHV0PSEwLGIuZGF0YXVybD0hMTt2YXIgeT1iLmhlYWRlcj9iLmhlYWRlcjpudWxsLHc9Yi5mcmFtZXM/Yi5mcmFtZXM6bnVsbDtpZih5KXt5Lmxvb3BfY291bnRlcj15Lmxvb3BfY291bnQsZD1beS5jYW52YXNfaGVpZ2h0XSxwPVt5LmNhbnZhc193aWR0aF07Zm9yKHZhciBOPTA7Tjx3Lmxlbmd0aCYmMCE9d1tOXS5ibGVuZDtOKyspO312YXIgTD13WzBdLHg9bS5XZWJQRGVjb2RlUkdCQSh2LEwuc3JjX29mZixMLnNyY19zaXplLHAsZCk7TC5yZ2JhPXgsTC5pbWd3aWR0aD1wWzBdLEwuaW1naGVpZ2h0PWRbMF07Zm9yKHZhciBBPTA7QTxwWzBdKmRbMF0qNDtBKyspZ1tBXT14W0FdO3JldHVybiB0aGlzLndpZHRoPXAsdGhpcy5oZWlnaHQ9ZCx0aGlzLmRhdGE9Zyx0aGlzfVxuLyoqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBAbGljZW5zZVxuICoganNQREYgWE1QIG1ldGFkYXRhIHBsdWdpblxuICogQ29weXJpZ2h0IChjKSAyMDE2IEp1c3NpIFV0dW5lbiwgdS1qdXNzaUBzdW9taTI0LmZpXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG4gKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbiAqIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvXG4gKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG9cbiAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbiAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkVcbiAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT05cbiAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTlxuICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5mdW5jdGlvbiBjZSgpe3ZhciB0LGU9dGhpcy5pbnRlcm5hbC5fX21ldGFkYXRhX18ubWV0YWRhdGEscj11bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZSkpO3Q9dGhpcy5pbnRlcm5hbC5fX21ldGFkYXRhX18ucmF3WG1sP3I6Jzx4OnhtcG1ldGEgeG1sbnM6eD1cImFkb2JlOm5zOm1ldGEvXCI+PHJkZjpSREYgeG1sbnM6cmRmPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI1wiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PVwiXCIgeG1sbnM6anNwZGY9XCInK3RoaXMuaW50ZXJuYWwuX19tZXRhZGF0YV9fLm5hbWVzcGFjZVVyaSsnXCI+PGpzcGRmOm1ldGFkYXRhPicrci5yZXBsYWNlKC8mL2csXCImYW1wO1wiKS5yZXBsYWNlKC88L2csXCImbHQ7XCIpLnJlcGxhY2UoLz4vZyxcIiZndDtcIikucmVwbGFjZSgvXCIvZyxcIiZxdW90O1wiKS5yZXBsYWNlKC8nL2csXCImYXBvcztcIikrXCI8L2pzcGRmOm1ldGFkYXRhPjwvcmRmOkRlc2NyaXB0aW9uPjwvcmRmOlJERj48L3g6eG1wbWV0YT5cIix0aGlzLmludGVybmFsLl9fbWV0YWRhdGFfXy5tZXRhZGF0YU9iamVjdE51bWJlcj10aGlzLmludGVybmFsLm5ld09iamVjdCgpLHRoaXMuaW50ZXJuYWwud3JpdGUoXCI8PCAvVHlwZSAvTWV0YWRhdGEgL1N1YnR5cGUgL1hNTCAvTGVuZ3RoIFwiK3QubGVuZ3RoK1wiID4+XCIpLHRoaXMuaW50ZXJuYWwud3JpdGUoXCJzdHJlYW1cIiksdGhpcy5pbnRlcm5hbC53cml0ZSh0KSx0aGlzLmludGVybmFsLndyaXRlKFwiZW5kc3RyZWFtXCIpLHRoaXMuaW50ZXJuYWwud3JpdGUoXCJlbmRvYmpcIil9ZnVuY3Rpb24gbGUoKXt0aGlzLmludGVybmFsLl9fbWV0YWRhdGFfXy5tZXRhZGF0YU9iamVjdE51bWJlciYmdGhpcy5pbnRlcm5hbC53cml0ZShcIi9NZXRhZGF0YSBcIit0aGlzLmludGVybmFsLl9fbWV0YWRhdGFfXy5tZXRhZGF0YU9iamVjdE51bWJlcitcIiAwIFJcIil9IWZ1bmN0aW9uKGUpe3ZhciByLG4saSxhLHMsdSxjLGwsZixkPWZ1bmN0aW9uKHQpe3JldHVybiB0PXR8fHt9LHRoaXMuaXNTdHJva2VUcmFuc3BhcmVudD10LmlzU3Ryb2tlVHJhbnNwYXJlbnR8fCExLHRoaXMuc3Ryb2tlT3BhY2l0eT10LnN0cm9rZU9wYWNpdHl8fDEsdGhpcy5zdHJva2VTdHlsZT10LnN0cm9rZVN0eWxlfHxcIiMwMDAwMDBcIix0aGlzLmZpbGxTdHlsZT10LmZpbGxTdHlsZXx8XCIjMDAwMDAwXCIsdGhpcy5pc0ZpbGxUcmFuc3BhcmVudD10LmlzRmlsbFRyYW5zcGFyZW50fHwhMSx0aGlzLmZpbGxPcGFjaXR5PXQuZmlsbE9wYWNpdHl8fDEsdGhpcy5mb250PXQuZm9udHx8XCIxMHB4IHNhbnMtc2VyaWZcIix0aGlzLnRleHRCYXNlbGluZT10LnRleHRCYXNlbGluZXx8XCJhbHBoYWJldGljXCIsdGhpcy50ZXh0QWxpZ249dC50ZXh0QWxpZ258fFwibGVmdFwiLHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRofHwxLHRoaXMubGluZUpvaW49dC5saW5lSm9pbnx8XCJtaXRlclwiLHRoaXMubGluZUNhcD10LmxpbmVDYXB8fFwiYnV0dFwiLHRoaXMucGF0aD10LnBhdGh8fFtdLHRoaXMudHJhbnNmb3JtPXZvaWQgMCE9PXQudHJhbnNmb3JtP3QudHJhbnNmb3JtLmNsb25lKCk6bmV3IGwsdGhpcy5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb258fFwibm9ybWFsXCIsdGhpcy5nbG9iYWxBbHBoYT10Lmdsb2JhbEFscGhhfHwxLHRoaXMuY2xpcF9wYXRoPXQuY2xpcF9wYXRofHxbXSx0aGlzLmN1cnJlbnRQb2ludD10LmN1cnJlbnRQb2ludHx8bmV3IHUsdGhpcy5taXRlckxpbWl0PXQubWl0ZXJMaW1pdHx8MTAsdGhpcy5sYXN0UG9pbnQ9dC5sYXN0UG9pbnR8fG5ldyB1LHRoaXMubGluZURhc2hPZmZzZXQ9dC5saW5lRGFzaE9mZnNldHx8MCx0aGlzLmxpbmVEYXNoPXQubGluZURhc2h8fFtdLHRoaXMubWFyZ2luPXQubWFyZ2lufHxbMCwwLDAsMF0sdGhpcy5wcmV2UGFnZUxhc3RFbGVtT2Zmc2V0PXQucHJldlBhZ2VMYXN0RWxlbU9mZnNldHx8MCx0aGlzLmlnbm9yZUNsZWFyUmVjdD1cImJvb2xlYW5cIiE9dHlwZW9mIHQuaWdub3JlQ2xlYXJSZWN0fHx0Lmlnbm9yZUNsZWFyUmVjdCx0aGlzfTtlLmV2ZW50cy5wdXNoKFtcImluaXRpYWxpemVkXCIsZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQyZD1uZXcgcCh0aGlzKSxyPXRoaXMuaW50ZXJuYWwuZjIsbj10aGlzLmludGVybmFsLmdldENvb3JkaW5hdGVTdHJpbmcsaT10aGlzLmludGVybmFsLmdldFZlcnRpY2FsQ29vcmRpbmF0ZVN0cmluZyxhPXRoaXMuaW50ZXJuYWwuZ2V0SG9yaXpvbnRhbENvb3JkaW5hdGUscz10aGlzLmludGVybmFsLmdldFZlcnRpY2FsQ29vcmRpbmF0ZSx1PXRoaXMuaW50ZXJuYWwuUG9pbnQsYz10aGlzLmludGVybmFsLlJlY3RhbmdsZSxsPXRoaXMuaW50ZXJuYWwuTWF0cml4LGY9bmV3IGR9XSk7dmFyIHA9ZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJjYW52YXNcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJue3BhcmVudE5vZGU6ITEsc3R5bGU6ITF9fX0pO3ZhciBlPXQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJwZGZcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGV9fSk7dmFyIHI9ITE7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJwYWdlV3JhcFhFbmFibGVkXCIse2dldDpmdW5jdGlvbigpe3JldHVybiByfSxzZXQ6ZnVuY3Rpb24odCl7cj1Cb29sZWFuKHQpfX0pO3ZhciBuPSExO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicGFnZVdyYXBZRW5hYmxlZFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbn0sc2V0OmZ1bmN0aW9uKHQpe249Qm9vbGVhbih0KX19KTt2YXIgaT0wO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicG9zWFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sc2V0OmZ1bmN0aW9uKHQpe2lzTmFOKHQpfHwoaT10KX19KTt2YXIgYT0wO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicG9zWVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sc2V0OmZ1bmN0aW9uKHQpe2lzTmFOKHQpfHwoYT10KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIm1hcmdpblwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZi5tYXJnaW59LHNldDpmdW5jdGlvbih0KXt2YXIgZTtcIm51bWJlclwiPT10eXBlb2YgdD9lPVt0LHQsdCx0XTooKGU9bmV3IEFycmF5KDQpKVswXT10WzBdLGVbMV09dC5sZW5ndGg+PTI/dFsxXTplWzBdLGVbMl09dC5sZW5ndGg+PTM/dFsyXTplWzBdLGVbM109dC5sZW5ndGg+PTQ/dFszXTplWzFdKSxmLm1hcmdpbj1lfX0pO3ZhciBvPSExO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiYXV0b1BhZ2luZ1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gb30sc2V0OmZ1bmN0aW9uKHQpe289dH19KTt2YXIgcz0wO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwibGFzdEJyZWFrXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBzfSxzZXQ6ZnVuY3Rpb24odCl7cz10fX0pO3ZhciB1PVtdO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicGFnZUJyZWFrc1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdX0sc2V0OmZ1bmN0aW9uKHQpe3U9dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImN0eFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZn0sc2V0OmZ1bmN0aW9uKHQpe3QgaW5zdGFuY2VvZiBkJiYoZj10KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInBhdGhcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGYucGF0aH0sc2V0OmZ1bmN0aW9uKHQpe2YucGF0aD10fX0pO3ZhciBjPVtdO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiY3R4U3RhY2tcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGN9LHNldDpmdW5jdGlvbih0KXtjPXR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJmaWxsU3R5bGVcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3R4LmZpbGxTdHlsZX0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlO2U9Zyh0KSx0aGlzLmN0eC5maWxsU3R5bGU9ZS5zdHlsZSx0aGlzLmN0eC5pc0ZpbGxUcmFuc3BhcmVudD0wPT09ZS5hLHRoaXMuY3R4LmZpbGxPcGFjaXR5PWUuYSx0aGlzLnBkZi5zZXRGaWxsQ29sb3IoZS5yLGUuZyxlLmIse2E6ZS5hfSksdGhpcy5wZGYuc2V0VGV4dENvbG9yKGUucixlLmcsZS5iLHthOmUuYX0pfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwic3Ryb2tlU3R5bGVcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3R4LnN0cm9rZVN0eWxlfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9Zyh0KTt0aGlzLmN0eC5zdHJva2VTdHlsZT1lLnN0eWxlLHRoaXMuY3R4LmlzU3Ryb2tlVHJhbnNwYXJlbnQ9MD09PWUuYSx0aGlzLmN0eC5zdHJva2VPcGFjaXR5PWUuYSwwPT09ZS5hP3RoaXMucGRmLnNldERyYXdDb2xvcigyNTUsMjU1LDI1NSk6KGUuYSx0aGlzLnBkZi5zZXREcmF3Q29sb3IoZS5yLGUuZyxlLmIpKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImxpbmVDYXBcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3R4LmxpbmVDYXB9LHNldDpmdW5jdGlvbih0KXstMSE9PVtcImJ1dHRcIixcInJvdW5kXCIsXCJzcXVhcmVcIl0uaW5kZXhPZih0KSYmKHRoaXMuY3R4LmxpbmVDYXA9dCx0aGlzLnBkZi5zZXRMaW5lQ2FwKHQpKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImxpbmVXaWR0aFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdHgubGluZVdpZHRofSxzZXQ6ZnVuY3Rpb24odCl7aXNOYU4odCl8fCh0aGlzLmN0eC5saW5lV2lkdGg9dCx0aGlzLnBkZi5zZXRMaW5lV2lkdGgodCkpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwibGluZUpvaW5cIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3R4LmxpbmVKb2lufSxzZXQ6ZnVuY3Rpb24odCl7LTEhPT1bXCJiZXZlbFwiLFwicm91bmRcIixcIm1pdGVyXCJdLmluZGV4T2YodCkmJih0aGlzLmN0eC5saW5lSm9pbj10LHRoaXMucGRmLnNldExpbmVKb2luKHQpKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIm1pdGVyTGltaXRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3R4Lm1pdGVyTGltaXR9LHNldDpmdW5jdGlvbih0KXtpc05hTih0KXx8KHRoaXMuY3R4Lm1pdGVyTGltaXQ9dCx0aGlzLnBkZi5zZXRNaXRlckxpbWl0KHQpKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInRleHRCYXNlbGluZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdHgudGV4dEJhc2VsaW5lfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5jdHgudGV4dEJhc2VsaW5lPXR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJ0ZXh0QWxpZ25cIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3R4LnRleHRBbGlnbn0sc2V0OmZ1bmN0aW9uKHQpey0xIT09W1wicmlnaHRcIixcImVuZFwiLFwiY2VudGVyXCIsXCJsZWZ0XCIsXCJzdGFydFwiXS5pbmRleE9mKHQpJiYodGhpcy5jdHgudGV4dEFsaWduPXQpfX0pO3ZhciBsPW51bGwsaD1udWxsO3ZhciBwPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJmb250RmFjZXNcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHB9LHNldDpmdW5jdGlvbih0KXtsPW51bGwsaD1udWxsLHA9dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImZvbnRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3R4LmZvbnR9LHNldDpmdW5jdGlvbih0KXt2YXIgZTtpZih0aGlzLmN0eC5mb250PXQsbnVsbCE9PShlPS9eXFxzKig/PSg/Oig/OlstYS16XStcXHMqKXswLDJ9KGl0YWxpY3xvYmxpcXVlKSk/KSg/PSg/Oig/OlstYS16XStcXHMqKXswLDJ9KHNtYWxsLWNhcHMpKT8pKD89KD86KD86Wy1hLXpdK1xccyopezAsMn0oYm9sZCg/OmVyKT98bGlnaHRlcnxbMS05XTAwKSk/KSg/Oig/Om5vcm1hbHxcXDF8XFwyfFxcMylcXHMqKXswLDN9KCg/Onh4Py0pPyg/OnNtYWxsfGxhcmdlKXxtZWRpdW18c21hbGxlcnxsYXJnZXJ8Wy5cXGRdKyg/OlxcJXxpbnxbY2VtXW18ZXh8cFtjdHhdKSkoPzpcXHMqXFwvXFxzKihub3JtYWx8Wy5cXGRdKyg/OlxcJXxpbnxbY2VtXW18ZXh8cFtjdHhdKSkpP1xccyooWy1fLFxcXCJcXCdcXHNhLXowLTldKz8pXFxzKiQvaS5leGVjKHQpKSl7dmFyIHI9ZVsxXTtlWzJdO3ZhciBuPWVbM10saT1lWzRdO2VbNV07dmFyIGE9ZVs2XSxvPS9eKFsuXFxkXSspKCg/OiV8aW58W2NlbV1tfGV4fHBbY3R4XSkpJC9pLmV4ZWMoaSlbMl07aT1cInB4XCI9PT1vP01hdGguZmxvb3IocGFyc2VGbG9hdChpKSp0aGlzLnBkZi5pbnRlcm5hbC5zY2FsZUZhY3Rvcik6XCJlbVwiPT09bz9NYXRoLmZsb29yKHBhcnNlRmxvYXQoaSkqdGhpcy5wZGYuZ2V0Rm9udFNpemUoKSk6TWF0aC5mbG9vcihwYXJzZUZsb2F0KGkpKnRoaXMucGRmLmludGVybmFsLnNjYWxlRmFjdG9yKSx0aGlzLnBkZi5zZXRGb250U2l6ZShpKTt2YXIgcz1mdW5jdGlvbih0KXt2YXIgZSxyLG49W10saT10LnRyaW0oKTtpZihcIlwiPT09aSlyZXR1cm4gR3Q7aWYoaSBpbiBxdClyZXR1cm5bcXRbaV1dO2Zvcig7XCJcIiE9PWk7KXtzd2l0Y2gocj1udWxsLGU9KGk9UnQoaSkpLmNoYXJBdCgwKSl7Y2FzZSdcIic6Y2FzZVwiJ1wiOnI9RHQoaS5zdWJzdHJpbmcoMSksZSk7YnJlYWs7ZGVmYXVsdDpyPVR0KGkpfWlmKG51bGw9PT1yKXJldHVybiBHdDtpZihuLnB1c2goclswXSksXCJcIiE9PShpPVJ0KHJbMV0pKSYmXCIsXCIhPT1pLmNoYXJBdCgwKSlyZXR1cm4gR3Q7aT1pLnJlcGxhY2UoL14sLyxcIlwiKX1yZXR1cm4gbn0oYSk7aWYodGhpcy5mb250RmFjZXMpe3ZhciB1PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nZXRGb250TGlzdCgpLG49SlNPTi5zdHJpbmdpZnkocik7aWYobnVsbD09PWx8fGghPT1uKXt2YXIgaT1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihyKXt0W3JdLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49bnVsbDtzd2l0Y2godCl7Y2FzZVwiYm9sZFwiOm49e2ZhbWlseTpyLHdlaWdodDpcImJvbGRcIn07YnJlYWs7Y2FzZVwiaXRhbGljXCI6bj17ZmFtaWx5OnIsc3R5bGU6XCJpdGFsaWNcIn07YnJlYWs7Y2FzZVwiYm9sZGl0YWxpY1wiOm49e2ZhbWlseTpyLHdlaWdodDpcImJvbGRcIixzdHlsZTpcIml0YWxpY1wifTticmVhaztjYXNlXCJcIjpjYXNlXCJub3JtYWxcIjpuPXtmYW1pbHk6cn19bnVsbCE9PW4mJihuLnJlZj17bmFtZTpyLHN0eWxlOnR9LGUucHVzaChuKSl9KX0pLGV9KHIpO2w9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49T3QodFtyXSksaT1uLmZhbWlseSxhPW4uc3RyZXRjaCxvPW4uc3R5bGUscz1uLndlaWdodDtlW2ldPWVbaV18fHt9LGVbaV1bYV09ZVtpXVthXXx8e30sZVtpXVthXVtvXT1lW2ldW2FdW29dfHx7fSxlW2ldW2FdW29dW3NdPW59cmV0dXJuIGV9KGkuY29uY2F0KGUpKSxoPW59cmV0dXJuIGx9KHRoaXMucGRmLHRoaXMuZm9udEZhY2VzKSxjPXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybntmYW1pbHk6dCxzdHJldGNoOlwibm9ybWFsXCIsd2VpZ2h0Om4sc3R5bGU6cn19KSxmPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49KHI9cnx8e30pLmRlZmF1bHRGb250RmFtaWx5fHxcInRpbWVzXCIsaT1PYmplY3QuYXNzaWduKHt9LE10LHIuZ2VuZXJpY0ZvbnRGYW1pbGllc3x8e30pLGE9bnVsbCxvPW51bGwscz0wO3M8ZS5sZW5ndGg7KytzKWlmKGlbKGE9T3QoZVtzXSkpLmZhbWlseV0mJihhLmZhbWlseT1pW2EuZmFtaWx5XSksdC5oYXNPd25Qcm9wZXJ0eShhLmZhbWlseSkpe289dFthLmZhbWlseV07YnJlYWt9aWYoIShvPW98fHRbbl0pKXRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kIGEgZm9udC1mYW1pbHkgZm9yIHRoZSBydWxlICdcIitFdChhKStcIicgYW5kIGRlZmF1bHQgZmFtaWx5ICdcIituK1wiJy5cIik7aWYobz1mdW5jdGlvbih0LGUpe2lmKGVbdF0pcmV0dXJuIGVbdF07dmFyIHI9SXRbdF0sbj1yPD1JdC5ub3JtYWw/LTE6MSxpPUJ0KGUsRnQscixuKTtpZighaSl0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZmluZCBhIG1hdGNoaW5nIGZvbnQtc3RyZXRjaCB2YWx1ZSBmb3IgXCIrdCk7cmV0dXJuIGl9KGEuc3RyZXRjaCxvKSxvPWZ1bmN0aW9uKHQsZSl7aWYoZVt0XSlyZXR1cm4gZVt0XTtmb3IodmFyIHI9a3RbdF0sbj0wO248ci5sZW5ndGg7KytuKWlmKGVbcltuXV0pcmV0dXJuIGVbcltuXV07dGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGZpbmQgYSBtYXRjaGluZyBmb250LXN0eWxlIGZvciBcIit0KX0oYS5zdHlsZSxvKSwhKG89ZnVuY3Rpb24odCxlKXtpZihlW3RdKXJldHVybiBlW3RdO2lmKDQwMD09PXQmJmVbNTAwXSlyZXR1cm4gZVs1MDBdO2lmKDUwMD09PXQmJmVbNDAwXSlyZXR1cm4gZVs0MDBdO3ZhciByPWp0W3RdLG49QnQoZSxDdCxyLHQ8NDAwPy0xOjEpO2lmKCFuKXRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kIGEgbWF0Y2hpbmcgZm9udC13ZWlnaHQgZm9yIHZhbHVlIFwiK3QpO3JldHVybiBufShhLndlaWdodCxvKSkpdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJlc29sdmUgYSBmb250IGZvciB0aGUgcnVsZSAnXCIrRXQoYSkrXCInLlwiKTtyZXR1cm4gb30odSxjKTt0aGlzLnBkZi5zZXRGb250KGYucmVmLm5hbWUsZi5yZWYuc3R5bGUpfWVsc2V7dmFyIGQ9XCJcIjsoXCJib2xkXCI9PT1ufHxwYXJzZUludChuLDEwKT49NzAwfHxcImJvbGRcIj09PXIpJiYoZD1cImJvbGRcIiksXCJpdGFsaWNcIj09PXImJihkKz1cIml0YWxpY1wiKSwwPT09ZC5sZW5ndGgmJihkPVwibm9ybWFsXCIpO2Zvcih2YXIgcD1cIlwiLGc9e2FyaWFsOlwiSGVsdmV0aWNhXCIsQXJpYWw6XCJIZWx2ZXRpY2FcIix2ZXJkYW5hOlwiSGVsdmV0aWNhXCIsVmVyZGFuYTpcIkhlbHZldGljYVwiLGhlbHZldGljYTpcIkhlbHZldGljYVwiLEhlbHZldGljYTpcIkhlbHZldGljYVwiLFwic2Fucy1zZXJpZlwiOlwiSGVsdmV0aWNhXCIsZml4ZWQ6XCJDb3VyaWVyXCIsbW9ub3NwYWNlOlwiQ291cmllclwiLHRlcm1pbmFsOlwiQ291cmllclwiLGN1cnNpdmU6XCJUaW1lc1wiLGZhbnRhc3k6XCJUaW1lc1wiLHNlcmlmOlwiVGltZXNcIn0sbT0wO208cy5sZW5ndGg7bSsrKXtpZih2b2lkIDAhPT10aGlzLnBkZi5pbnRlcm5hbC5nZXRGb250KHNbbV0sZCx7bm9GYWxsYmFjazohMCxkaXNhYmxlV2FybmluZzohMH0pKXtwPXNbbV07YnJlYWt9aWYoXCJib2xkaXRhbGljXCI9PT1kJiZ2b2lkIDAhPT10aGlzLnBkZi5pbnRlcm5hbC5nZXRGb250KHNbbV0sXCJib2xkXCIse25vRmFsbGJhY2s6ITAsZGlzYWJsZVdhcm5pbmc6ITB9KSlwPXNbbV0sZD1cImJvbGRcIjtlbHNlIGlmKHZvaWQgMCE9PXRoaXMucGRmLmludGVybmFsLmdldEZvbnQoc1ttXSxcIm5vcm1hbFwiLHtub0ZhbGxiYWNrOiEwLGRpc2FibGVXYXJuaW5nOiEwfSkpe3A9c1ttXSxkPVwibm9ybWFsXCI7YnJlYWt9fWlmKFwiXCI9PT1wKWZvcih2YXIgdj0wO3Y8cy5sZW5ndGg7disrKWlmKGdbc1t2XV0pe3A9Z1tzW3ZdXTticmVha31wPVwiXCI9PT1wP1wiVGltZXNcIjpwLHRoaXMucGRmLnNldEZvbnQocCxkKX19fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb259LHNldDpmdW5jdGlvbih0KXt0aGlzLmN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImdsb2JhbEFscGhhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN0eC5nbG9iYWxBbHBoYX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuY3R4Lmdsb2JhbEFscGhhPXR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJsaW5lRGFzaE9mZnNldFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdHgubGluZURhc2hPZmZzZXR9LHNldDpmdW5jdGlvbih0KXt0aGlzLmN0eC5saW5lRGFzaE9mZnNldD10LFQuY2FsbCh0aGlzKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImxpbmVEYXNoXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN0eC5saW5lRGFzaH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuY3R4LmxpbmVEYXNoPXQsVC5jYWxsKHRoaXMpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiaWdub3JlQ2xlYXJSZWN0XCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN0eC5pZ25vcmVDbGVhclJlY3R9LHNldDpmdW5jdGlvbih0KXt0aGlzLmN0eC5pZ25vcmVDbGVhclJlY3Q9Qm9vbGVhbih0KX19KX07cC5wcm90b3R5cGUuc2V0TGluZURhc2g9ZnVuY3Rpb24odCl7dGhpcy5saW5lRGFzaD10fSxwLnByb3RvdHlwZS5nZXRMaW5lRGFzaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxpbmVEYXNoLmxlbmd0aCUyP3RoaXMubGluZURhc2guY29uY2F0KHRoaXMubGluZURhc2gpOnRoaXMubGluZURhc2guc2xpY2UoKX0scC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbigpe3guY2FsbCh0aGlzLFwiZmlsbFwiLCExKX0scC5wcm90b3R5cGUuc3Ryb2tlPWZ1bmN0aW9uKCl7eC5jYWxsKHRoaXMsXCJzdHJva2VcIiwhMSl9LHAucHJvdG90eXBlLmJlZ2luUGF0aD1mdW5jdGlvbigpe3RoaXMucGF0aD1be3R5cGU6XCJiZWdpblwifV19LHAucHJvdG90eXBlLm1vdmVUbz1mdW5jdGlvbih0LGUpe2lmKGlzTmFOKHQpfHxpc05hTihlKSl0aHJvdyBvLmVycm9yKFwianNQREYuY29udGV4dDJkLm1vdmVUbzogSW52YWxpZCBhcmd1bWVudHNcIixhcmd1bWVudHMpLG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBqc1BERi5jb250ZXh0MmQubW92ZVRvXCIpO3ZhciByPXRoaXMuY3R4LnRyYW5zZm9ybS5hcHBseVRvUG9pbnQobmV3IHUodCxlKSk7dGhpcy5wYXRoLnB1c2goe3R5cGU6XCJtdFwiLHg6ci54LHk6ci55fSksdGhpcy5jdHgubGFzdFBvaW50PW5ldyB1KHQsZSl9LHAucHJvdG90eXBlLmNsb3NlUGF0aD1mdW5jdGlvbigpe3ZhciBlPW5ldyB1KDAsMCkscj0wO2ZvcihyPXRoaXMucGF0aC5sZW5ndGgtMTstMSE9PXI7ci0tKWlmKFwiYmVnaW5cIj09PXRoaXMucGF0aFtyXS50eXBlJiZcIm9iamVjdFwiPT09dCh0aGlzLnBhdGhbcisxXSkmJlwibnVtYmVyXCI9PXR5cGVvZiB0aGlzLnBhdGhbcisxXS54KXtlPW5ldyB1KHRoaXMucGF0aFtyKzFdLngsdGhpcy5wYXRoW3IrMV0ueSk7YnJlYWt9dGhpcy5wYXRoLnB1c2goe3R5cGU6XCJjbG9zZVwifSksdGhpcy5jdHgubGFzdFBvaW50PW5ldyB1KGUueCxlLnkpfSxwLnByb3RvdHlwZS5saW5lVG89ZnVuY3Rpb24odCxlKXtpZihpc05hTih0KXx8aXNOYU4oZSkpdGhyb3cgby5lcnJvcihcImpzUERGLmNvbnRleHQyZC5saW5lVG86IEludmFsaWQgYXJndW1lbnRzXCIsYXJndW1lbnRzKSxuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8ganNQREYuY29udGV4dDJkLmxpbmVUb1wiKTt2YXIgcj10aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHlUb1BvaW50KG5ldyB1KHQsZSkpO3RoaXMucGF0aC5wdXNoKHt0eXBlOlwibHRcIix4OnIueCx5OnIueX0pLHRoaXMuY3R4Lmxhc3RQb2ludD1uZXcgdShyLngsci55KX0scC5wcm90b3R5cGUuY2xpcD1mdW5jdGlvbigpe3RoaXMuY3R4LmNsaXBfcGF0aD1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucGF0aCkpLHguY2FsbCh0aGlzLG51bGwsITApfSxwLnByb3RvdHlwZS5xdWFkcmF0aWNDdXJ2ZVRvPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKGlzTmFOKHIpfHxpc05hTihuKXx8aXNOYU4odCl8fGlzTmFOKGUpKXRocm93IG8uZXJyb3IoXCJqc1BERi5jb250ZXh0MmQucXVhZHJhdGljQ3VydmVUbzogSW52YWxpZCBhcmd1bWVudHNcIixhcmd1bWVudHMpLG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBqc1BERi5jb250ZXh0MmQucXVhZHJhdGljQ3VydmVUb1wiKTt2YXIgaT10aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHlUb1BvaW50KG5ldyB1KHIsbikpLGE9dGhpcy5jdHgudHJhbnNmb3JtLmFwcGx5VG9Qb2ludChuZXcgdSh0LGUpKTt0aGlzLnBhdGgucHVzaCh7dHlwZTpcInFjdFwiLHgxOmEueCx5MTphLnkseDppLngseTppLnl9KSx0aGlzLmN0eC5sYXN0UG9pbnQ9bmV3IHUoaS54LGkueSl9LHAucHJvdG90eXBlLmJlemllckN1cnZlVG89ZnVuY3Rpb24odCxlLHIsbixpLGEpe2lmKGlzTmFOKGkpfHxpc05hTihhKXx8aXNOYU4odCl8fGlzTmFOKGUpfHxpc05hTihyKXx8aXNOYU4obikpdGhyb3cgby5lcnJvcihcImpzUERGLmNvbnRleHQyZC5iZXppZXJDdXJ2ZVRvOiBJbnZhbGlkIGFyZ3VtZW50c1wiLGFyZ3VtZW50cyksbmV3IEVycm9yKFwiSW52YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIGpzUERGLmNvbnRleHQyZC5iZXppZXJDdXJ2ZVRvXCIpO3ZhciBzPXRoaXMuY3R4LnRyYW5zZm9ybS5hcHBseVRvUG9pbnQobmV3IHUoaSxhKSksYz10aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHlUb1BvaW50KG5ldyB1KHQsZSkpLGw9dGhpcy5jdHgudHJhbnNmb3JtLmFwcGx5VG9Qb2ludChuZXcgdShyLG4pKTt0aGlzLnBhdGgucHVzaCh7dHlwZTpcImJjdFwiLHgxOmMueCx5MTpjLnkseDI6bC54LHkyOmwueSx4OnMueCx5OnMueX0pLHRoaXMuY3R4Lmxhc3RQb2ludD1uZXcgdShzLngscy55KX0scC5wcm90b3R5cGUuYXJjPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtpZihpc05hTih0KXx8aXNOYU4oZSl8fGlzTmFOKHIpfHxpc05hTihuKXx8aXNOYU4oaSkpdGhyb3cgby5lcnJvcihcImpzUERGLmNvbnRleHQyZC5hcmM6IEludmFsaWQgYXJndW1lbnRzXCIsYXJndW1lbnRzKSxuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8ganNQREYuY29udGV4dDJkLmFyY1wiKTtpZihhPUJvb2xlYW4oYSksIXRoaXMuY3R4LnRyYW5zZm9ybS5pc0lkZW50aXR5KXt2YXIgcz10aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHlUb1BvaW50KG5ldyB1KHQsZSkpO3Q9cy54LGU9cy55O3ZhciBjPXRoaXMuY3R4LnRyYW5zZm9ybS5hcHBseVRvUG9pbnQobmV3IHUoMCxyKSksbD10aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHlUb1BvaW50KG5ldyB1KDAsMCkpO3I9TWF0aC5zcXJ0KE1hdGgucG93KGMueC1sLngsMikrTWF0aC5wb3coYy55LWwueSwyKSl9TWF0aC5hYnMoaS1uKT49MipNYXRoLlBJJiYobj0wLGk9MipNYXRoLlBJKSx0aGlzLnBhdGgucHVzaCh7dHlwZTpcImFyY1wiLHg6dCx5OmUscmFkaXVzOnIsc3RhcnRBbmdsZTpuLGVuZEFuZ2xlOmksY291bnRlcmNsb2Nrd2lzZTphfSl9LHAucHJvdG90eXBlLmFyY1RvPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhyb3cgbmV3IEVycm9yKFwiYXJjVG8gbm90IGltcGxlbWVudGVkLlwiKX0scC5wcm90b3R5cGUucmVjdD1mdW5jdGlvbih0LGUscixuKXtpZihpc05hTih0KXx8aXNOYU4oZSl8fGlzTmFOKHIpfHxpc05hTihuKSl0aHJvdyBvLmVycm9yKFwianNQREYuY29udGV4dDJkLnJlY3Q6IEludmFsaWQgYXJndW1lbnRzXCIsYXJndW1lbnRzKSxuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8ganNQREYuY29udGV4dDJkLnJlY3RcIik7dGhpcy5tb3ZlVG8odCxlKSx0aGlzLmxpbmVUbyh0K3IsZSksdGhpcy5saW5lVG8odCtyLGUrbiksdGhpcy5saW5lVG8odCxlK24pLHRoaXMubGluZVRvKHQsZSksdGhpcy5saW5lVG8odCtyLGUpLHRoaXMubGluZVRvKHQsZSl9LHAucHJvdG90eXBlLmZpbGxSZWN0PWZ1bmN0aW9uKHQsZSxyLG4pe2lmKGlzTmFOKHQpfHxpc05hTihlKXx8aXNOYU4ocil8fGlzTmFOKG4pKXRocm93IG8uZXJyb3IoXCJqc1BERi5jb250ZXh0MmQuZmlsbFJlY3Q6IEludmFsaWQgYXJndW1lbnRzXCIsYXJndW1lbnRzKSxuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8ganNQREYuY29udGV4dDJkLmZpbGxSZWN0XCIpO2lmKCFtLmNhbGwodGhpcykpe3ZhciBpPXt9O1wiYnV0dFwiIT09dGhpcy5saW5lQ2FwJiYoaS5saW5lQ2FwPXRoaXMubGluZUNhcCx0aGlzLmxpbmVDYXA9XCJidXR0XCIpLFwibWl0ZXJcIiE9PXRoaXMubGluZUpvaW4mJihpLmxpbmVKb2luPXRoaXMubGluZUpvaW4sdGhpcy5saW5lSm9pbj1cIm1pdGVyXCIpLHRoaXMuYmVnaW5QYXRoKCksdGhpcy5yZWN0KHQsZSxyLG4pLHRoaXMuZmlsbCgpLGkuaGFzT3duUHJvcGVydHkoXCJsaW5lQ2FwXCIpJiYodGhpcy5saW5lQ2FwPWkubGluZUNhcCksaS5oYXNPd25Qcm9wZXJ0eShcImxpbmVKb2luXCIpJiYodGhpcy5saW5lSm9pbj1pLmxpbmVKb2luKX19LHAucHJvdG90eXBlLnN0cm9rZVJlY3Q9ZnVuY3Rpb24odCxlLHIsbil7aWYoaXNOYU4odCl8fGlzTmFOKGUpfHxpc05hTihyKXx8aXNOYU4obikpdGhyb3cgby5lcnJvcihcImpzUERGLmNvbnRleHQyZC5zdHJva2VSZWN0OiBJbnZhbGlkIGFyZ3VtZW50c1wiLGFyZ3VtZW50cyksbmV3IEVycm9yKFwiSW52YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIGpzUERGLmNvbnRleHQyZC5zdHJva2VSZWN0XCIpO3YuY2FsbCh0aGlzKXx8KHRoaXMuYmVnaW5QYXRoKCksdGhpcy5yZWN0KHQsZSxyLG4pLHRoaXMuc3Ryb2tlKCkpfSxwLnByb3RvdHlwZS5jbGVhclJlY3Q9ZnVuY3Rpb24odCxlLHIsbil7aWYoaXNOYU4odCl8fGlzTmFOKGUpfHxpc05hTihyKXx8aXNOYU4obikpdGhyb3cgby5lcnJvcihcImpzUERGLmNvbnRleHQyZC5jbGVhclJlY3Q6IEludmFsaWQgYXJndW1lbnRzXCIsYXJndW1lbnRzKSxuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8ganNQREYuY29udGV4dDJkLmNsZWFyUmVjdFwiKTt0aGlzLmlnbm9yZUNsZWFyUmVjdHx8KHRoaXMuZmlsbFN0eWxlPVwiI2ZmZmZmZlwiLHRoaXMuZmlsbFJlY3QodCxlLHIsbikpfSxwLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKHQpe3Q9XCJib29sZWFuXCIhPXR5cGVvZiB0fHx0O2Zvcih2YXIgZT10aGlzLnBkZi5pbnRlcm5hbC5nZXRDdXJyZW50UGFnZUluZm8oKS5wYWdlTnVtYmVyLHI9MDtyPHRoaXMucGRmLmludGVybmFsLmdldE51bWJlck9mUGFnZXMoKTtyKyspdGhpcy5wZGYuc2V0UGFnZShyKzEpLHRoaXMucGRmLmludGVybmFsLm91dChcInFcIik7aWYodGhpcy5wZGYuc2V0UGFnZShlKSx0KXt0aGlzLmN0eC5mb250U2l6ZT10aGlzLnBkZi5pbnRlcm5hbC5nZXRGb250U2l6ZSgpO3ZhciBuPW5ldyBkKHRoaXMuY3R4KTt0aGlzLmN0eFN0YWNrLnB1c2godGhpcy5jdHgpLHRoaXMuY3R4PW59fSxwLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKHQpe3Q9XCJib29sZWFuXCIhPXR5cGVvZiB0fHx0O2Zvcih2YXIgZT10aGlzLnBkZi5pbnRlcm5hbC5nZXRDdXJyZW50UGFnZUluZm8oKS5wYWdlTnVtYmVyLHI9MDtyPHRoaXMucGRmLmludGVybmFsLmdldE51bWJlck9mUGFnZXMoKTtyKyspdGhpcy5wZGYuc2V0UGFnZShyKzEpLHRoaXMucGRmLmludGVybmFsLm91dChcIlFcIik7dGhpcy5wZGYuc2V0UGFnZShlKSx0JiYwIT09dGhpcy5jdHhTdGFjay5sZW5ndGgmJih0aGlzLmN0eD10aGlzLmN0eFN0YWNrLnBvcCgpLHRoaXMuZmlsbFN0eWxlPXRoaXMuY3R4LmZpbGxTdHlsZSx0aGlzLnN0cm9rZVN0eWxlPXRoaXMuY3R4LnN0cm9rZVN0eWxlLHRoaXMuZm9udD10aGlzLmN0eC5mb250LHRoaXMubGluZUNhcD10aGlzLmN0eC5saW5lQ2FwLHRoaXMubGluZVdpZHRoPXRoaXMuY3R4LmxpbmVXaWR0aCx0aGlzLmxpbmVKb2luPXRoaXMuY3R4LmxpbmVKb2luLHRoaXMubGluZURhc2g9dGhpcy5jdHgubGluZURhc2gsdGhpcy5saW5lRGFzaE9mZnNldD10aGlzLmN0eC5saW5lRGFzaE9mZnNldCl9LHAucHJvdG90eXBlLnRvRGF0YVVSTD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRvRGF0YVVybCBub3QgaW1wbGVtZW50ZWQuXCIpfTt2YXIgZz1mdW5jdGlvbih0KXt2YXIgZSxyLG4saTtpZighMD09PXQuaXNDYW52YXNHcmFkaWVudCYmKHQ9dC5nZXRDb2xvcigpKSwhdClyZXR1cm57cjowLGc6MCxiOjAsYTowLHN0eWxlOnR9O2lmKC90cmFuc3BhcmVudHxyZ2JhXFxzKlxcKFxccyooXFxkKylcXHMqLFxccyooXFxkKylcXHMqLFxccyooXFxkKylcXHMqLFxccyowK1xccypcXCkvLnRlc3QodCkpZT0wLHI9MCxuPTAsaT0wO2Vsc2V7dmFyIGE9L3JnYlxccypcXChcXHMqKFxcZCspXFxzKixcXHMqKFxcZCspXFxzKixcXHMqKFxcZCspXFxzKlxcKS8uZXhlYyh0KTtpZihudWxsIT09YSllPXBhcnNlSW50KGFbMV0pLHI9cGFyc2VJbnQoYVsyXSksbj1wYXJzZUludChhWzNdKSxpPTE7ZWxzZSBpZihudWxsIT09KGE9L3JnYmFcXHMqXFwoXFxzKihcXGQrKVxccyosXFxzKihcXGQrKVxccyosXFxzKihcXGQrKVxccyosXFxzKihbXFxkLl0rKVxccypcXCkvLmV4ZWModCkpKWU9cGFyc2VJbnQoYVsxXSkscj1wYXJzZUludChhWzJdKSxuPXBhcnNlSW50KGFbM10pLGk9cGFyc2VGbG9hdChhWzRdKTtlbHNle2lmKGk9MSxcInN0cmluZ1wiPT10eXBlb2YgdCYmXCIjXCIhPT10LmNoYXJBdCgwKSl7dmFyIG89bmV3IGgodCk7dD1vLm9rP28udG9IZXgoKTpcIiMwMDAwMDBcIn00PT09dC5sZW5ndGg/KGU9dC5zdWJzdHJpbmcoMSwyKSxlKz1lLHI9dC5zdWJzdHJpbmcoMiwzKSxyKz1yLG49dC5zdWJzdHJpbmcoMyw0KSxuKz1uKTooZT10LnN1YnN0cmluZygxLDMpLHI9dC5zdWJzdHJpbmcoMyw1KSxuPXQuc3Vic3RyaW5nKDUsNykpLGU9cGFyc2VJbnQoZSwxNikscj1wYXJzZUludChyLDE2KSxuPXBhcnNlSW50KG4sMTYpfX1yZXR1cm57cjplLGc6cixiOm4sYTppLHN0eWxlOnR9fSxtPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3R4LmlzRmlsbFRyYW5zcGFyZW50fHwwPT10aGlzLmdsb2JhbEFscGhhfSx2PWZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5jdHguaXNTdHJva2VUcmFuc3BhcmVudHx8MD09dGhpcy5nbG9iYWxBbHBoYSl9O3AucHJvdG90eXBlLmZpbGxUZXh0PWZ1bmN0aW9uKHQsZSxyLG4pe2lmKGlzTmFOKGUpfHxpc05hTihyKXx8XCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgby5lcnJvcihcImpzUERGLmNvbnRleHQyZC5maWxsVGV4dDogSW52YWxpZCBhcmd1bWVudHNcIixhcmd1bWVudHMpLG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBqc1BERi5jb250ZXh0MmQuZmlsbFRleHRcIik7aWYobj1pc05hTihuKT92b2lkIDA6biwhbS5jYWxsKHRoaXMpKXt2YXIgaT1FKHRoaXMuY3R4LnRyYW5zZm9ybS5yb3RhdGlvbiksYT10aGlzLmN0eC50cmFuc2Zvcm0uc2NhbGVYO0MuY2FsbCh0aGlzLHt0ZXh0OnQseDplLHk6cixzY2FsZTphLGFuZ2xlOmksYWxpZ246dGhpcy50ZXh0QWxpZ24sbWF4V2lkdGg6bn0pfX0scC5wcm90b3R5cGUuc3Ryb2tlVGV4dD1mdW5jdGlvbih0LGUscixuKXtpZihpc05hTihlKXx8aXNOYU4ocil8fFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG8uZXJyb3IoXCJqc1BERi5jb250ZXh0MmQuc3Ryb2tlVGV4dDogSW52YWxpZCBhcmd1bWVudHNcIixhcmd1bWVudHMpLG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBqc1BERi5jb250ZXh0MmQuc3Ryb2tlVGV4dFwiKTtpZighdi5jYWxsKHRoaXMpKXtuPWlzTmFOKG4pP3ZvaWQgMDpuO3ZhciBpPUUodGhpcy5jdHgudHJhbnNmb3JtLnJvdGF0aW9uKSxhPXRoaXMuY3R4LnRyYW5zZm9ybS5zY2FsZVg7Qy5jYWxsKHRoaXMse3RleHQ6dCx4OmUseTpyLHNjYWxlOmEscmVuZGVyaW5nTW9kZTpcInN0cm9rZVwiLGFuZ2xlOmksYWxpZ246dGhpcy50ZXh0QWxpZ24sbWF4V2lkdGg6bn0pfX0scC5wcm90b3R5cGUubWVhc3VyZVRleHQ9ZnVuY3Rpb24odCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgby5lcnJvcihcImpzUERGLmNvbnRleHQyZC5tZWFzdXJlVGV4dDogSW52YWxpZCBhcmd1bWVudHNcIixhcmd1bWVudHMpLG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBqc1BERi5jb250ZXh0MmQubWVhc3VyZVRleHRcIik7dmFyIGU9dGhpcy5wZGYscj10aGlzLnBkZi5pbnRlcm5hbC5zY2FsZUZhY3RvcixuPWUuaW50ZXJuYWwuZ2V0Rm9udFNpemUoKSxpPWUuZ2V0U3RyaW5nVW5pdFdpZHRoKHQpKm4vZS5pbnRlcm5hbC5zY2FsZUZhY3RvcjtyZXR1cm4gbmV3IGZ1bmN0aW9uKHQpe3ZhciBlPSh0PXR8fHt9KS53aWR0aHx8MDtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJ3aWR0aFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZX19KSx0aGlzfSh7d2lkdGg6aSo9TWF0aC5yb3VuZCg5NipyLzcyKjFlNCkvMWU0fSl9LHAucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odCl8fGlzTmFOKGUpKXRocm93IG8uZXJyb3IoXCJqc1BERi5jb250ZXh0MmQuc2NhbGU6IEludmFsaWQgYXJndW1lbnRzXCIsYXJndW1lbnRzKSxuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8ganNQREYuY29udGV4dDJkLnNjYWxlXCIpO3ZhciByPW5ldyBsKHQsMCwwLGUsMCwwKTt0aGlzLmN0eC50cmFuc2Zvcm09dGhpcy5jdHgudHJhbnNmb3JtLm11bHRpcGx5KHIpfSxwLnByb3RvdHlwZS5yb3RhdGU9ZnVuY3Rpb24odCl7aWYoaXNOYU4odCkpdGhyb3cgby5lcnJvcihcImpzUERGLmNvbnRleHQyZC5yb3RhdGU6IEludmFsaWQgYXJndW1lbnRzXCIsYXJndW1lbnRzKSxuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8ganNQREYuY29udGV4dDJkLnJvdGF0ZVwiKTt2YXIgZT1uZXcgbChNYXRoLmNvcyh0KSxNYXRoLnNpbih0KSwtTWF0aC5zaW4odCksTWF0aC5jb3ModCksMCwwKTt0aGlzLmN0eC50cmFuc2Zvcm09dGhpcy5jdHgudHJhbnNmb3JtLm11bHRpcGx5KGUpfSxwLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24odCxlKXtpZihpc05hTih0KXx8aXNOYU4oZSkpdGhyb3cgby5lcnJvcihcImpzUERGLmNvbnRleHQyZC50cmFuc2xhdGU6IEludmFsaWQgYXJndW1lbnRzXCIsYXJndW1lbnRzKSxuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8ganNQREYuY29udGV4dDJkLnRyYW5zbGF0ZVwiKTt2YXIgcj1uZXcgbCgxLDAsMCwxLHQsZSk7dGhpcy5jdHgudHJhbnNmb3JtPXRoaXMuY3R4LnRyYW5zZm9ybS5tdWx0aXBseShyKX0scC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtpZihpc05hTih0KXx8aXNOYU4oZSl8fGlzTmFOKHIpfHxpc05hTihuKXx8aXNOYU4oaSl8fGlzTmFOKGEpKXRocm93IG8uZXJyb3IoXCJqc1BERi5jb250ZXh0MmQudHJhbnNmb3JtOiBJbnZhbGlkIGFyZ3VtZW50c1wiLGFyZ3VtZW50cyksbmV3IEVycm9yKFwiSW52YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIGpzUERGLmNvbnRleHQyZC50cmFuc2Zvcm1cIik7dmFyIHM9bmV3IGwodCxlLHIsbixpLGEpO3RoaXMuY3R4LnRyYW5zZm9ybT10aGlzLmN0eC50cmFuc2Zvcm0ubXVsdGlwbHkocyl9LHAucHJvdG90eXBlLnNldFRyYW5zZm9ybT1mdW5jdGlvbih0LGUscixuLGksYSl7dD1pc05hTih0KT8xOnQsZT1pc05hTihlKT8wOmUscj1pc05hTihyKT8wOnIsbj1pc05hTihuKT8xOm4saT1pc05hTihpKT8wOmksYT1pc05hTihhKT8wOmEsdGhpcy5jdHgudHJhbnNmb3JtPW5ldyBsKHQsZSxyLG4saSxhKX07dmFyIGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXJnaW5bMF0+MHx8dGhpcy5tYXJnaW5bMV0+MHx8dGhpcy5tYXJnaW5bMl0+MHx8dGhpcy5tYXJnaW5bM10+MH07cC5wcm90b3R5cGUuZHJhd0ltYWdlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyx1KXt2YXIgaD10aGlzLnBkZi5nZXRJbWFnZVByb3BlcnRpZXModCksZj0xLGQ9MSxwPTEsZz0xO3ZvaWQgMCE9PW4mJnZvaWQgMCE9PXMmJihwPXMvbixnPXUvaSxmPWgud2lkdGgvbipzL24sZD1oLmhlaWdodC9pKnUvaSksdm9pZCAwPT09YSYmKGE9ZSxvPXIsZT0wLHI9MCksdm9pZCAwIT09biYmdm9pZCAwPT09cyYmKHM9bix1PWkpLHZvaWQgMD09PW4mJnZvaWQgMD09PXMmJihzPWgud2lkdGgsdT1oLmhlaWdodCk7dmFyIG09dGhpcy5jdHgudHJhbnNmb3JtLmRlY29tcG9zZSgpLHY9RShtLnJvdGF0ZS5zaHgpLHc9bmV3IGwseD0odz0odz0odz13Lm11bHRpcGx5KG0udHJhbnNsYXRlKSkubXVsdGlwbHkobS5za2V3KSkubXVsdGlwbHkobS5zY2FsZSkpLmFwcGx5VG9SZWN0YW5nbGUobmV3IGMoYS1lKnAsby1yKmcsbipmLGkqZCkpO2lmKHRoaXMuYXV0b1BhZ2luZyl7Zm9yKHZhciBTLF89eS5jYWxsKHRoaXMseCksUD1bXSxrPTA7azxfLmxlbmd0aDtrKz0xKS0xPT09UC5pbmRleE9mKF9ba10pJiZQLnB1c2goX1trXSk7TChQKTtmb3IodmFyIEY9UFswXSxJPVBbUC5sZW5ndGgtMV0sQz1GO0M8SSsxO0MrKyl7dGhpcy5wZGYuc2V0UGFnZShDKTt2YXIgaj10aGlzLnBkZi5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aC10aGlzLm1hcmdpblszXS10aGlzLm1hcmdpblsxXSxPPTE9PT1DP3RoaXMucG9zWSt0aGlzLm1hcmdpblswXTp0aGlzLm1hcmdpblswXSxCPXRoaXMucGRmLmludGVybmFsLnBhZ2VTaXplLmhlaWdodC10aGlzLnBvc1ktdGhpcy5tYXJnaW5bMF0tdGhpcy5tYXJnaW5bMl0sTT10aGlzLnBkZi5pbnRlcm5hbC5wYWdlU2l6ZS5oZWlnaHQtdGhpcy5tYXJnaW5bMF0tdGhpcy5tYXJnaW5bMl0scT0xPT09Qz8wOkIrKEMtMikqTTtpZigwIT09dGhpcy5jdHguY2xpcF9wYXRoLmxlbmd0aCl7dmFyIFI9dGhpcy5wYXRoO1M9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmN0eC5jbGlwX3BhdGgpKSx0aGlzLnBhdGg9TihTLHRoaXMucG9zWCt0aGlzLm1hcmdpblszXSwtcStPK3RoaXMuY3R4LnByZXZQYWdlTGFzdEVsZW1PZmZzZXQpLEEuY2FsbCh0aGlzLFwiZmlsbFwiLCEwKSx0aGlzLnBhdGg9Un12YXIgRD1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHgpKTtEPU4oW0RdLHRoaXMucG9zWCt0aGlzLm1hcmdpblszXSwtcStPK3RoaXMuY3R4LnByZXZQYWdlTGFzdEVsZW1PZmZzZXQpWzBdO3ZhciBUPShDPkZ8fEM8SSkmJmIuY2FsbCh0aGlzKTtUJiYodGhpcy5wZGYuc2F2ZUdyYXBoaWNzU3RhdGUoKSx0aGlzLnBkZi5yZWN0KHRoaXMubWFyZ2luWzNdLHRoaXMubWFyZ2luWzBdLGosTSxudWxsKS5jbGlwKCkuZGlzY2FyZFBhdGgoKSksdGhpcy5wZGYuYWRkSW1hZ2UodCxcIkpQRUdcIixELngsRC55LEQudyxELmgsbnVsbCxudWxsLHYpLFQmJnRoaXMucGRmLnJlc3RvcmVHcmFwaGljc1N0YXRlKCl9fWVsc2UgdGhpcy5wZGYuYWRkSW1hZ2UodCxcIkpQRUdcIix4LngseC55LHgudyx4LmgsbnVsbCxudWxsLHYpfTt2YXIgeT1mdW5jdGlvbih0LGUscil7dmFyIG49W107ZT1lfHx0aGlzLnBkZi5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aCxyPXJ8fHRoaXMucGRmLmludGVybmFsLnBhZ2VTaXplLmhlaWdodC10aGlzLm1hcmdpblswXS10aGlzLm1hcmdpblsyXTt2YXIgaT10aGlzLnBvc1krdGhpcy5jdHgucHJldlBhZ2VMYXN0RWxlbU9mZnNldDtzd2l0Y2godC50eXBlKXtkZWZhdWx0OmNhc2VcIm10XCI6Y2FzZVwibHRcIjpuLnB1c2goTWF0aC5mbG9vcigodC55K2kpL3IpKzEpO2JyZWFrO2Nhc2VcImFyY1wiOm4ucHVzaChNYXRoLmZsb29yKCh0LnkraS10LnJhZGl1cykvcikrMSksbi5wdXNoKE1hdGguZmxvb3IoKHQueStpK3QucmFkaXVzKS9yKSsxKTticmVhaztjYXNlXCJxY3RcIjp2YXIgYT1SKHRoaXMuY3R4Lmxhc3RQb2ludC54LHRoaXMuY3R4Lmxhc3RQb2ludC55LHQueDEsdC55MSx0LngsdC55KTtuLnB1c2goTWF0aC5mbG9vcigoYS55K2kpL3IpKzEpLG4ucHVzaChNYXRoLmZsb29yKChhLnkrYS5oK2kpL3IpKzEpO2JyZWFrO2Nhc2VcImJjdFwiOnZhciBvPUQodGhpcy5jdHgubGFzdFBvaW50LngsdGhpcy5jdHgubGFzdFBvaW50LnksdC54MSx0LnkxLHQueDIsdC55Mix0LngsdC55KTtuLnB1c2goTWF0aC5mbG9vcigoby55K2kpL3IpKzEpLG4ucHVzaChNYXRoLmZsb29yKChvLnkrby5oK2kpL3IpKzEpO2JyZWFrO2Nhc2VcInJlY3RcIjpuLnB1c2goTWF0aC5mbG9vcigodC55K2kpL3IpKzEpLG4ucHVzaChNYXRoLmZsb29yKCh0LnkrdC5oK2kpL3IpKzEpfWZvcih2YXIgcz0wO3M8bi5sZW5ndGg7cys9MSlmb3IoO3RoaXMucGRmLmludGVybmFsLmdldE51bWJlck9mUGFnZXMoKTxuW3NdOyl3LmNhbGwodGhpcyk7cmV0dXJuIG59LHc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmZpbGxTdHlsZSxlPXRoaXMuc3Ryb2tlU3R5bGUscj10aGlzLmZvbnQsbj10aGlzLmxpbmVDYXAsaT10aGlzLmxpbmVXaWR0aCxhPXRoaXMubGluZUpvaW47dGhpcy5wZGYuYWRkUGFnZSgpLHRoaXMuZmlsbFN0eWxlPXQsdGhpcy5zdHJva2VTdHlsZT1lLHRoaXMuZm9udD1yLHRoaXMubGluZUNhcD1uLHRoaXMubGluZVdpZHRoPWksdGhpcy5saW5lSm9pbj1hfSxOPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylzd2l0Y2godFtuXS50eXBlKXtjYXNlXCJiY3RcIjp0W25dLngyKz1lLHRbbl0ueTIrPXI7Y2FzZVwicWN0XCI6dFtuXS54MSs9ZSx0W25dLnkxKz1yO2RlZmF1bHQ6dFtuXS54Kz1lLHRbbl0ueSs9cn1yZXR1cm4gdH0sTD1mdW5jdGlvbih0KXtyZXR1cm4gdC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pfSx4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5maWxsU3R5bGUsbj10aGlzLnN0cm9rZVN0eWxlLGk9dGhpcy5saW5lQ2FwLGE9dGhpcy5saW5lV2lkdGgsbz1NYXRoLmFicyhhKnRoaXMuY3R4LnRyYW5zZm9ybS5zY2FsZVgpLHM9dGhpcy5saW5lSm9pbjtpZih0aGlzLmF1dG9QYWdpbmcpe2Zvcih2YXIgdSxjLGw9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnBhdGgpKSxoPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5wYXRoKSksZj1bXSxkPTA7ZDxoLmxlbmd0aDtkKyspaWYodm9pZCAwIT09aFtkXS54KWZvcih2YXIgcD15LmNhbGwodGhpcyxoW2RdKSxnPTA7ZzxwLmxlbmd0aDtnKz0xKS0xPT09Zi5pbmRleE9mKHBbZ10pJiZmLnB1c2gocFtnXSk7Zm9yKHZhciBtPTA7bTxmLmxlbmd0aDttKyspZm9yKDt0aGlzLnBkZi5pbnRlcm5hbC5nZXROdW1iZXJPZlBhZ2VzKCk8ZlttXTspdy5jYWxsKHRoaXMpO0woZik7Zm9yKHZhciB2PWZbMF0seD1mW2YubGVuZ3RoLTFdLFM9djtTPHgrMTtTKyspe3RoaXMucGRmLnNldFBhZ2UoUyksdGhpcy5maWxsU3R5bGU9cix0aGlzLnN0cm9rZVN0eWxlPW4sdGhpcy5saW5lQ2FwPWksdGhpcy5saW5lV2lkdGg9byx0aGlzLmxpbmVKb2luPXM7dmFyIF89dGhpcy5wZGYuaW50ZXJuYWwucGFnZVNpemUud2lkdGgtdGhpcy5tYXJnaW5bM10tdGhpcy5tYXJnaW5bMV0sUD0xPT09Uz90aGlzLnBvc1krdGhpcy5tYXJnaW5bMF06dGhpcy5tYXJnaW5bMF0saz10aGlzLnBkZi5pbnRlcm5hbC5wYWdlU2l6ZS5oZWlnaHQtdGhpcy5wb3NZLXRoaXMubWFyZ2luWzBdLXRoaXMubWFyZ2luWzJdLEY9dGhpcy5wZGYuaW50ZXJuYWwucGFnZVNpemUuaGVpZ2h0LXRoaXMubWFyZ2luWzBdLXRoaXMubWFyZ2luWzJdLEk9MT09PVM/MDprKyhTLTIpKkY7aWYoMCE9PXRoaXMuY3R4LmNsaXBfcGF0aC5sZW5ndGgpe3ZhciBDPXRoaXMucGF0aDt1PUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jdHguY2xpcF9wYXRoKSksdGhpcy5wYXRoPU4odSx0aGlzLnBvc1grdGhpcy5tYXJnaW5bM10sLUkrUCt0aGlzLmN0eC5wcmV2UGFnZUxhc3RFbGVtT2Zmc2V0KSxBLmNhbGwodGhpcyx0LCEwKSx0aGlzLnBhdGg9Q31pZihjPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobCkpLHRoaXMucGF0aD1OKGMsdGhpcy5wb3NYK3RoaXMubWFyZ2luWzNdLC1JK1ArdGhpcy5jdHgucHJldlBhZ2VMYXN0RWxlbU9mZnNldCksITE9PT1lfHwwPT09Uyl7dmFyIGo9KFM+dnx8Uzx4KSYmYi5jYWxsKHRoaXMpO2omJih0aGlzLnBkZi5zYXZlR3JhcGhpY3NTdGF0ZSgpLHRoaXMucGRmLnJlY3QodGhpcy5tYXJnaW5bM10sdGhpcy5tYXJnaW5bMF0sXyxGLG51bGwpLmNsaXAoKS5kaXNjYXJkUGF0aCgpKSxBLmNhbGwodGhpcyx0LGUpLGomJnRoaXMucGRmLnJlc3RvcmVHcmFwaGljc1N0YXRlKCl9dGhpcy5saW5lV2lkdGg9YX10aGlzLnBhdGg9bH1lbHNlIHRoaXMubGluZVdpZHRoPW8sQS5jYWxsKHRoaXMsdCxlKSx0aGlzLmxpbmVXaWR0aD1hfSxBPWZ1bmN0aW9uKHQsZSl7aWYoKFwic3Ryb2tlXCIhPT10fHxlfHwhdi5jYWxsKHRoaXMpKSYmKFwic3Ryb2tlXCI9PT10fHxlfHwhbS5jYWxsKHRoaXMpKSl7Zm9yKHZhciByLG4saT1bXSxhPXRoaXMucGF0aCxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107c3dpdGNoKHMudHlwZSl7Y2FzZVwiYmVnaW5cIjppLnB1c2goe2JlZ2luOiEwfSk7YnJlYWs7Y2FzZVwiY2xvc2VcIjppLnB1c2goe2Nsb3NlOiEwfSk7YnJlYWs7Y2FzZVwibXRcIjppLnB1c2goe3N0YXJ0OnMsZGVsdGFzOltdLGFiczpbXX0pO2JyZWFrO2Nhc2VcImx0XCI6dmFyIHU9aS5sZW5ndGg7aWYoYVtvLTFdJiYhaXNOYU4oYVtvLTFdLngpJiYocj1bcy54LWFbby0xXS54LHMueS1hW28tMV0ueV0sdT4wKSlmb3IoO3U+PTA7dS0tKWlmKCEwIT09aVt1LTFdLmNsb3NlJiYhMCE9PWlbdS0xXS5iZWdpbil7aVt1LTFdLmRlbHRhcy5wdXNoKHIpLGlbdS0xXS5hYnMucHVzaChzKTticmVha31icmVhaztjYXNlXCJiY3RcIjpyPVtzLngxLWFbby0xXS54LHMueTEtYVtvLTFdLnkscy54Mi1hW28tMV0ueCxzLnkyLWFbby0xXS55LHMueC1hW28tMV0ueCxzLnktYVtvLTFdLnldLGlbaS5sZW5ndGgtMV0uZGVsdGFzLnB1c2gocik7YnJlYWs7Y2FzZVwicWN0XCI6dmFyIGM9YVtvLTFdLngrMi8zKihzLngxLWFbby0xXS54KSxsPWFbby0xXS55KzIvMyoocy55MS1hW28tMV0ueSksaD1zLngrMi8zKihzLngxLXMueCksZj1zLnkrMi8zKihzLnkxLXMueSksZD1zLngscD1zLnk7cj1bYy1hW28tMV0ueCxsLWFbby0xXS55LGgtYVtvLTFdLngsZi1hW28tMV0ueSxkLWFbby0xXS54LHAtYVtvLTFdLnldLGlbaS5sZW5ndGgtMV0uZGVsdGFzLnB1c2gocik7YnJlYWs7Y2FzZVwiYXJjXCI6aS5wdXNoKHtkZWx0YXM6W10sYWJzOltdLGFyYzohMH0pLEFycmF5LmlzQXJyYXkoaVtpLmxlbmd0aC0xXS5hYnMpJiZpW2kubGVuZ3RoLTFdLmFicy5wdXNoKHMpfX1uPWU/bnVsbDpcInN0cm9rZVwiPT09dD9cInN0cm9rZVwiOlwiZmlsbFwiO2Zvcih2YXIgZz0hMSxiPTA7YjxpLmxlbmd0aDtiKyspaWYoaVtiXS5hcmMpZm9yKHZhciB5PWlbYl0uYWJzLHc9MDt3PHkubGVuZ3RoO3crKyl7dmFyIE49eVt3XTtcImFyY1wiPT09Ti50eXBlP1AuY2FsbCh0aGlzLE4ueCxOLnksTi5yYWRpdXMsTi5zdGFydEFuZ2xlLE4uZW5kQW5nbGUsTi5jb3VudGVyY2xvY2t3aXNlLHZvaWQgMCxlLCFnKTpqLmNhbGwodGhpcyxOLngsTi55KSxnPSEwfWVsc2UgaWYoITA9PT1pW2JdLmNsb3NlKXRoaXMucGRmLmludGVybmFsLm91dChcImhcIiksZz0hMTtlbHNlIGlmKCEwIT09aVtiXS5iZWdpbil7dmFyIEw9aVtiXS5zdGFydC54LHg9aVtiXS5zdGFydC55O08uY2FsbCh0aGlzLGlbYl0uZGVsdGFzLEwseCksZz0hMH1uJiZrLmNhbGwodGhpcyxuKSxlJiZGLmNhbGwodGhpcyl9fSxTPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGRmLmludGVybmFsLmdldEZvbnRTaXplKCkvdGhpcy5wZGYuaW50ZXJuYWwuc2NhbGVGYWN0b3Iscj1lKih0aGlzLnBkZi5pbnRlcm5hbC5nZXRMaW5lSGVpZ2h0RmFjdG9yKCktMSk7c3dpdGNoKHRoaXMuY3R4LnRleHRCYXNlbGluZSl7Y2FzZVwiYm90dG9tXCI6cmV0dXJuIHQtcjtjYXNlXCJ0b3BcIjpyZXR1cm4gdCtlLXI7Y2FzZVwiaGFuZ2luZ1wiOnJldHVybiB0K2UtMipyO2Nhc2VcIm1pZGRsZVwiOnJldHVybiB0K2UvMi1yO2RlZmF1bHQ6cmV0dXJuIHR9fSxfPWZ1bmN0aW9uKHQpe3JldHVybiB0K3RoaXMucGRmLmludGVybmFsLmdldEZvbnRTaXplKCkvdGhpcy5wZGYuaW50ZXJuYWwuc2NhbGVGYWN0b3IqKHRoaXMucGRmLmludGVybmFsLmdldExpbmVIZWlnaHRGYWN0b3IoKS0xKX07cC5wcm90b3R5cGUuY3JlYXRlTGluZWFyR3JhZGllbnQ9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe307cmV0dXJuIHQuY29sb3JTdG9wcz1bXSx0LmFkZENvbG9yU3RvcD1mdW5jdGlvbih0LGUpe3RoaXMuY29sb3JTdG9wcy5wdXNoKFt0LGVdKX0sdC5nZXRDb2xvcj1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5jb2xvclN0b3BzLmxlbmd0aD9cIiMwMDAwMDBcIjp0aGlzLmNvbG9yU3RvcHNbMF1bMV19LHQuaXNDYW52YXNHcmFkaWVudD0hMCx0fSxwLnByb3RvdHlwZS5jcmVhdGVQYXR0ZXJuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3JlYXRlTGluZWFyR3JhZGllbnQoKX0scC5wcm90b3R5cGUuY3JlYXRlUmFkaWFsR3JhZGllbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jcmVhdGVMaW5lYXJHcmFkaWVudCgpfTt2YXIgUD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsdSl7Zm9yKHZhciBjPU0uY2FsbCh0aGlzLHIsbixpLGEpLGw9MDtsPGMubGVuZ3RoO2wrKyl7dmFyIGg9Y1tsXTswPT09bCYmKHU/SS5jYWxsKHRoaXMsaC54MSt0LGgueTErZSk6ai5jYWxsKHRoaXMsaC54MSt0LGgueTErZSkpLEIuY2FsbCh0aGlzLHQsZSxoLngyLGgueTIsaC54MyxoLnkzLGgueDQsaC55NCl9cz9GLmNhbGwodGhpcyk6ay5jYWxsKHRoaXMsbyl9LGs9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2VcInN0cm9rZVwiOnRoaXMucGRmLmludGVybmFsLm91dChcIlNcIik7YnJlYWs7Y2FzZVwiZmlsbFwiOnRoaXMucGRmLmludGVybmFsLm91dChcImZcIil9fSxGPWZ1bmN0aW9uKCl7dGhpcy5wZGYuY2xpcCgpLHRoaXMucGRmLmRpc2NhcmRQYXRoKCl9LEk9ZnVuY3Rpb24odCxlKXt0aGlzLnBkZi5pbnRlcm5hbC5vdXQobih0KStcIiBcIitpKGUpK1wiIG1cIil9LEM9ZnVuY3Rpb24odCl7dmFyIGU7c3dpdGNoKHQuYWxpZ24pe2Nhc2VcInJpZ2h0XCI6Y2FzZVwiZW5kXCI6ZT1cInJpZ2h0XCI7YnJlYWs7Y2FzZVwiY2VudGVyXCI6ZT1cImNlbnRlclwiO2JyZWFrO2RlZmF1bHQ6ZT1cImxlZnRcIn12YXIgcixuLGksYT10aGlzLnBkZi5nZXRUZXh0RGltZW5zaW9ucyh0LnRleHQpLG89Uy5jYWxsKHRoaXMsdC55KSxzPV8uY2FsbCh0aGlzLG8pLWEuaCxoPXRoaXMuY3R4LnRyYW5zZm9ybS5hcHBseVRvUG9pbnQobmV3IHUodC54LG8pKTtpZih0aGlzLmF1dG9QYWdpbmcpe3ZhciBmPXRoaXMuY3R4LnRyYW5zZm9ybS5kZWNvbXBvc2UoKSxkPW5ldyBsO2Q9KGQ9KGQ9ZC5tdWx0aXBseShmLnRyYW5zbGF0ZSkpLm11bHRpcGx5KGYuc2tldykpLm11bHRpcGx5KGYuc2NhbGUpO2Zvcih2YXIgcD10aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHlUb1JlY3RhbmdsZShuZXcgYyh0LngsbyxhLncsYS5oKSksZz1kLmFwcGx5VG9SZWN0YW5nbGUobmV3IGModC54LHMsYS53LGEuaCkpLG09eS5jYWxsKHRoaXMsZyksdj1bXSx3PTA7dzxtLmxlbmd0aDt3Kz0xKS0xPT09di5pbmRleE9mKG1bd10pJiZ2LnB1c2gobVt3XSk7TCh2KTtmb3IodmFyIHg9dlswXSxQPXZbdi5sZW5ndGgtMV0saz14O2s8UCsxO2srKyl7dGhpcy5wZGYuc2V0UGFnZShrKTt2YXIgRj0xPT09az90aGlzLnBvc1krdGhpcy5tYXJnaW5bMF06dGhpcy5tYXJnaW5bMF0sST10aGlzLnBkZi5pbnRlcm5hbC5wYWdlU2l6ZS5oZWlnaHQtdGhpcy5wb3NZLXRoaXMubWFyZ2luWzBdLXRoaXMubWFyZ2luWzJdLEM9dGhpcy5wZGYuaW50ZXJuYWwucGFnZVNpemUuaGVpZ2h0LXRoaXMubWFyZ2luWzJdLGo9Qy10aGlzLm1hcmdpblswXSxPPXRoaXMucGRmLmludGVybmFsLnBhZ2VTaXplLndpZHRoLXRoaXMubWFyZ2luWzFdLEI9Ty10aGlzLm1hcmdpblszXSxNPTE9PT1rPzA6SSsoay0yKSpqO2lmKDAhPT10aGlzLmN0eC5jbGlwX3BhdGgubGVuZ3RoKXt2YXIgcT10aGlzLnBhdGg7cj1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY3R4LmNsaXBfcGF0aCkpLHRoaXMucGF0aD1OKHIsdGhpcy5wb3NYK3RoaXMubWFyZ2luWzNdLC0xKk0rRiksQS5jYWxsKHRoaXMsXCJmaWxsXCIsITApLHRoaXMucGF0aD1xfXZhciBFPU4oW0pTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZykpXSx0aGlzLnBvc1grdGhpcy5tYXJnaW5bM10sLU0rRit0aGlzLmN0eC5wcmV2UGFnZUxhc3RFbGVtT2Zmc2V0KVswXTt0LnNjYWxlPj0uMDEmJihuPXRoaXMucGRmLmludGVybmFsLmdldEZvbnRTaXplKCksdGhpcy5wZGYuc2V0Rm9udFNpemUobip0LnNjYWxlKSxpPXRoaXMubGluZVdpZHRoLHRoaXMubGluZVdpZHRoPWkqdC5zY2FsZSk7dmFyIFI9XCJ0ZXh0XCIhPT10aGlzLmF1dG9QYWdpbmc7aWYoUnx8RS55K0UuaDw9Qyl7aWYoUnx8RS55Pj1GJiZFLng8PU8pe3ZhciBEPVI/dC50ZXh0OnRoaXMucGRmLnNwbGl0VGV4dFRvU2l6ZSh0LnRleHQsdC5tYXhXaWR0aHx8Ty1FLngpWzBdLFQ9TihbSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShwKSldLHRoaXMucG9zWCt0aGlzLm1hcmdpblszXSwtTStGK3RoaXMuY3R4LnByZXZQYWdlTGFzdEVsZW1PZmZzZXQpWzBdLHo9UiYmKGs+eHx8azxQKSYmYi5jYWxsKHRoaXMpO3omJih0aGlzLnBkZi5zYXZlR3JhcGhpY3NTdGF0ZSgpLHRoaXMucGRmLnJlY3QodGhpcy5tYXJnaW5bM10sdGhpcy5tYXJnaW5bMF0sQixqLG51bGwpLmNsaXAoKS5kaXNjYXJkUGF0aCgpKSx0aGlzLnBkZi50ZXh0KEQsVC54LFQueSx7YW5nbGU6dC5hbmdsZSxhbGlnbjplLHJlbmRlcmluZ01vZGU6dC5yZW5kZXJpbmdNb2RlfSkseiYmdGhpcy5wZGYucmVzdG9yZUdyYXBoaWNzU3RhdGUoKX19ZWxzZSBFLnk8QyYmKHRoaXMuY3R4LnByZXZQYWdlTGFzdEVsZW1PZmZzZXQrPUMtRS55KTt0LnNjYWxlPj0uMDEmJih0aGlzLnBkZi5zZXRGb250U2l6ZShuKSx0aGlzLmxpbmVXaWR0aD1pKX19ZWxzZSB0LnNjYWxlPj0uMDEmJihuPXRoaXMucGRmLmludGVybmFsLmdldEZvbnRTaXplKCksdGhpcy5wZGYuc2V0Rm9udFNpemUobip0LnNjYWxlKSxpPXRoaXMubGluZVdpZHRoLHRoaXMubGluZVdpZHRoPWkqdC5zY2FsZSksdGhpcy5wZGYudGV4dCh0LnRleHQsaC54K3RoaXMucG9zWCxoLnkrdGhpcy5wb3NZLHthbmdsZTp0LmFuZ2xlLGFsaWduOmUscmVuZGVyaW5nTW9kZTp0LnJlbmRlcmluZ01vZGUsbWF4V2lkdGg6dC5tYXhXaWR0aH0pLHQuc2NhbGU+PS4wMSYmKHRoaXMucGRmLnNldEZvbnRTaXplKG4pLHRoaXMubGluZVdpZHRoPWkpfSxqPWZ1bmN0aW9uKHQsZSxyLGEpe3I9cnx8MCxhPWF8fDAsdGhpcy5wZGYuaW50ZXJuYWwub3V0KG4odCtyKStcIiBcIitpKGUrYSkrXCIgbFwiKX0sTz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMucGRmLmxpbmVzKHQsZSxyLG51bGwsbnVsbCl9LEI9ZnVuY3Rpb24odCxlLG4saSxvLHUsYyxsKXt0aGlzLnBkZi5pbnRlcm5hbC5vdXQoW3IoYShuK3QpKSxyKHMoaStlKSkscihhKG8rdCkpLHIocyh1K2UpKSxyKGEoYyt0KSkscihzKGwrZSkpLFwiY1wiXS5qb2luKFwiIFwiKSl9LE09ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTIqTWF0aC5QSSxhPU1hdGguUEkvMjtlPnI7KWUtPWk7dmFyIG89TWF0aC5hYnMoci1lKTtvPGkmJm4mJihvPWktbyk7Zm9yKHZhciBzPVtdLHU9bj8tMToxLGM9ZTtvPjFlLTU7KXt2YXIgbD1jK3UqTWF0aC5taW4obyxhKTtzLnB1c2gocS5jYWxsKHRoaXMsdCxjLGwpKSxvLT1NYXRoLmFicyhsLWMpLGM9bH1yZXR1cm4gc30scT1mdW5jdGlvbih0LGUscil7dmFyIG49KHItZSkvMixpPXQqTWF0aC5jb3MobiksYT10Kk1hdGguc2luKG4pLG89aSxzPS1hLHU9bypvK3MqcyxjPXUrbyppK3MqYSxsPTQvMyooTWF0aC5zcXJ0KDIqdSpjKS1jKS8obyphLXMqaSksaD1vLWwqcyxmPXMrbCpvLGQ9aCxwPS1mLGc9bitlLG09TWF0aC5jb3MoZyksdj1NYXRoLnNpbihnKTtyZXR1cm57eDE6dCpNYXRoLmNvcyhlKSx5MTp0Kk1hdGguc2luKGUpLHgyOmgqbS1mKnYseTI6aCp2K2YqbSx4MzpkKm0tcCp2LHkzOmQqditwKm0seDQ6dCpNYXRoLmNvcyhyKSx5NDp0Kk1hdGguc2luKHIpfX0sRT1mdW5jdGlvbih0KXtyZXR1cm4gMTgwKnQvTWF0aC5QSX0sUj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89dCsuNSooci10KSxzPWUrLjUqKG4tZSksdT1pKy41KihyLWkpLGw9YSsuNSoobi1hKSxoPU1hdGgubWluKHQsaSxvLHUpLGY9TWF0aC5tYXgodCxpLG8sdSksZD1NYXRoLm1pbihlLGEscyxsKSxwPU1hdGgubWF4KGUsYSxzLGwpO3JldHVybiBuZXcgYyhoLGQsZi1oLHAtZCl9LEQ9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgdSxsLGgsZixkLHAsZyxtLHYsYix5LHcsTixMLHg9ci10LEE9bi1lLFM9aS1yLF89YS1uLFA9by1pLGs9cy1hO2ZvcihsPTA7bDw0MTtsKyspdj0oZz0oaD10Kyh1PWwvNDApKngpK3UqKChkPXIrdSpTKS1oKSkrdSooZCt1KihpK3UqUC1kKS1nKSxiPShtPShmPWUrdSpBKSt1KigocD1uK3UqXyktZikpK3UqKHArdSooYSt1KmstcCktbSksMD09bD8oeT12LHc9YixOPXYsTD1iKTooeT1NYXRoLm1pbih5LHYpLHc9TWF0aC5taW4odyxiKSxOPU1hdGgubWF4KE4sdiksTD1NYXRoLm1heChMLGIpKTtyZXR1cm4gbmV3IGMoTWF0aC5yb3VuZCh5KSxNYXRoLnJvdW5kKHcpLE1hdGgucm91bmQoTi15KSxNYXRoLnJvdW5kKEwtdykpfSxUPWZ1bmN0aW9uKCl7aWYodGhpcy5wcmV2TGluZURhc2h8fHRoaXMuY3R4LmxpbmVEYXNoLmxlbmd0aHx8dGhpcy5jdHgubGluZURhc2hPZmZzZXQpe3ZhciB0LGUscj0odD10aGlzLmN0eC5saW5lRGFzaCxlPXRoaXMuY3R4LmxpbmVEYXNoT2Zmc2V0LEpTT04uc3RyaW5naWZ5KHtsaW5lRGFzaDp0LGxpbmVEYXNoT2Zmc2V0OmV9KSk7dGhpcy5wcmV2TGluZURhc2ghPT1yJiYodGhpcy5wZGYuc2V0TGluZURhc2godGhpcy5jdHgubGluZURhc2gsdGhpcy5jdHgubGluZURhc2hPZmZzZXQpLHRoaXMucHJldkxpbmVEYXNoPXIpfX19KEUuQVBJKSxcbi8qKlxuICogQGxpY2Vuc2VcbiAqIGpzUERGIGZpbHRlcnMgUGx1Z0luXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgQXJhcyBBYmJhc2lcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2VcbiAqL1xuZnVuY3Rpb24odCl7dmFyIHI9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHMsdSxjLGw7Zm9yKC9bXlxceDAwLVxceEZGXS8udGVzdCh0KSxyPVtdLG49MCxpPSh0Kz1lPVwiXFwwXFwwXFwwXFwwXCIuc2xpY2UodC5sZW5ndGglNHx8NCkpLmxlbmd0aDtpPm47bis9NCkwIT09KGE9KHQuY2hhckNvZGVBdChuKTw8MjQpKyh0LmNoYXJDb2RlQXQobisxKTw8MTYpKyh0LmNoYXJDb2RlQXQobisyKTw8OCkrdC5jaGFyQ29kZUF0KG4rMykpPyhvPShhPSgoYT0oKGE9KChhPShhLShsPWElODUpKS84NSktKGM9YSU4NSkpLzg1KS0odT1hJTg1KSkvODUpLShzPWElODUpKS84NSklODUsci5wdXNoKG8rMzMscyszMyx1KzMzLGMrMzMsbCszMykpOnIucHVzaCgxMjIpO3JldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lO3I+MDtyLS0pdC5wb3AoKX0ocixlLmxlbmd0aCksU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcscikrXCJ+PlwifSxuPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbz1TdHJpbmcscz1cImxlbmd0aFwiLHU9MjU1LGM9XCJjaGFyQ29kZUF0XCIsbD1cInNsaWNlXCIsaD1cInJlcGxhY2VcIjtmb3IodFtsXSgtMiksdD10W2xdKDAsLTIpW2hdKC9cXHMvZyxcIlwiKVtoXShcInpcIixcIiEhISEhXCIpLG49W10saT0wLGE9KHQrPWU9XCJ1dXV1dVwiW2xdKHRbc10lNXx8NSkpW3NdO2E+aTtpKz01KXI9NTIyMDA2MjUqKHRbY10oaSktMzMpKzYxNDEyNSoodFtjXShpKzEpLTMzKSs3MjI1Kih0W2NdKGkrMiktMzMpKzg1Kih0W2NdKGkrMyktMzMpKyh0W2NdKGkrNCktMzMpLG4ucHVzaCh1JnI+PjI0LHUmcj4+MTYsdSZyPj44LHUmcik7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWU7cj4wO3ItLSl0LnBvcCgpfShuLGVbc10pLG8uZnJvbUNoYXJDb2RlLmFwcGx5KG8sbil9LGk9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3BsaXQoXCJcIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybihcIjBcIit0LmNoYXJDb2RlQXQoKS50b1N0cmluZygxNikpLnNsaWNlKC0yKX0pLmpvaW4oXCJcIikrXCI+XCJ9LGE9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFJlZ0V4cCgvXihbMC05QS1GYS1mXXsyfSkrJC8pO2lmKC0xIT09KHQ9dC5yZXBsYWNlKC9cXHMvZyxcIlwiKSkuaW5kZXhPZihcIj5cIikmJih0PXQuc3Vic3RyKDAsdC5pbmRleE9mKFwiPlwiKSkpLHQubGVuZ3RoJTImJih0Kz1cIjBcIiksITE9PT1lLnRlc3QodCkpcmV0dXJuXCJcIjtmb3IodmFyIHI9XCJcIixuPTA7bjx0Lmxlbmd0aDtuKz0yKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUoXCIweFwiKyh0W25dK3RbbisxXSkpO3JldHVybiByfSxvPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCksbj10Lmxlbmd0aDtuLS07KXJbbl09dC5jaGFyQ29kZUF0KG4pO3JldHVybihyPWUocikpLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0K1N0cmluZy5mcm9tQ2hhckNvZGUoZSl9LFwiXCIpfTt0LnByb2Nlc3NEYXRhQnlGaWx0ZXJzPWZ1bmN0aW9uKHQsZSl7dmFyIHM9MCx1PXR8fFwiXCIsYz1bXTtmb3IoXCJzdHJpbmdcIj09dHlwZW9mKGU9ZXx8W10pJiYoZT1bZV0pLHM9MDtzPGUubGVuZ3RoO3MrPTEpc3dpdGNoKGVbc10pe2Nhc2VcIkFTQ0lJODVEZWNvZGVcIjpjYXNlXCIvQVNDSUk4NURlY29kZVwiOnU9bih1KSxjLnB1c2goXCIvQVNDSUk4NUVuY29kZVwiKTticmVhaztjYXNlXCJBU0NJSTg1RW5jb2RlXCI6Y2FzZVwiL0FTQ0lJODVFbmNvZGVcIjp1PXIodSksYy5wdXNoKFwiL0FTQ0lJODVEZWNvZGVcIik7YnJlYWs7Y2FzZVwiQVNDSUlIZXhEZWNvZGVcIjpjYXNlXCIvQVNDSUlIZXhEZWNvZGVcIjp1PWEodSksYy5wdXNoKFwiL0FTQ0lJSGV4RW5jb2RlXCIpO2JyZWFrO2Nhc2VcIkFTQ0lJSGV4RW5jb2RlXCI6Y2FzZVwiL0FTQ0lJSGV4RW5jb2RlXCI6dT1pKHUpLGMucHVzaChcIi9BU0NJSUhleERlY29kZVwiKTticmVhaztjYXNlXCJGbGF0ZUVuY29kZVwiOmNhc2VcIi9GbGF0ZUVuY29kZVwiOnU9byh1KSxjLnB1c2goXCIvRmxhdGVEZWNvZGVcIik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmaWx0ZXI6IFwiJytlW3NdKydcIiBpcyBub3QgaW1wbGVtZW50ZWQnKX1yZXR1cm57ZGF0YTp1LHJldmVyc2VDaGFpbjpjLnJldmVyc2UoKS5qb2luKFwiIFwiKX19fShFLkFQSSksXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBqc1BERiBmaWxlbG9hZGluZyBQbHVnSW5cbiAqIENvcHlyaWdodCAoYykgMjAxOCBBcmFzIEFiYmFzaSAoYXJhcy5hYmJhc2lAZ21haWwuY29tKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZVxuICovXG5mdW5jdGlvbih0KXt0LmxvYWRGaWxlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2U9ITEhPT1lLHI9XCJmdW5jdGlvblwiPT10eXBlb2Ygcj9yOmZ1bmN0aW9uKCl7fTt2YXIgbj12b2lkIDA7dHJ5e249ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyBYTUxIdHRwUmVxdWVzdCxpPTAsYT1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxyPVtdLG49U3RyaW5nLmZyb21DaGFyQ29kZTtmb3IoaT0wO2k8ZTtpKz0xKXIucHVzaChuKDI1NSZ0LmNoYXJDb2RlQXQoaSkpKTtyZXR1cm4gci5qb2luKFwiXCIpfTtpZihuLm9wZW4oXCJHRVRcIix0LCFlKSxuLm92ZXJyaWRlTWltZVR5cGUoXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXgtdXNlci1kZWZpbmVkXCIpLCExPT09ZSYmKG4ub25sb2FkPWZ1bmN0aW9uKCl7MjAwPT09bi5zdGF0dXM/cihhKHRoaXMucmVzcG9uc2VUZXh0KSk6cih2b2lkIDApfSksbi5zZW5kKG51bGwpLGUmJjIwMD09PW4uc3RhdHVzKXJldHVybiBhKG4ucmVzcG9uc2VUZXh0KX0odCxlLHIpfWNhdGNoKGkpe31yZXR1cm4gbn0odCxlLHIpfSx0LmFsbG93RnNSZWFkPXZvaWQgMCx0LmxvYWRJbWFnZUZpbGU9dC5sb2FkRmlsZX0oRS5BUEkpLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoKXtyZXR1cm4oaS5odG1sMmNhbnZhcz9Qcm9taXNlLnJlc29sdmUoaS5odG1sMmNhbnZhcyk6aW1wb3J0KFwiaHRtbDJjYW52YXNcIikpLmNhdGNoKGZ1bmN0aW9uKHQpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJDb3VsZCBub3QgbG9hZCBodG1sMmNhbnZhczogXCIrdCkpfSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gdC5kZWZhdWx0P3QuZGVmYXVsdDp0fSl9ZnVuY3Rpb24gbigpe3JldHVybihpLkRPTVB1cmlmeT9Qcm9taXNlLnJlc29sdmUoaS5ET01QdXJpZnkpOmltcG9ydChcImRvbXB1cmlmeVwiKSkuY2F0Y2goZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkNvdWxkIG5vdCBsb2FkIGRvbXB1cmlmeTogXCIrdCkpfSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gdC5kZWZhdWx0P3QuZGVmYXVsdDp0fSl9dmFyIGE9ZnVuY3Rpb24oZSl7dmFyIHI9dChlKTtyZXR1cm5cInVuZGVmaW5lZFwiPT09cj9cInVuZGVmaW5lZFwiOlwic3RyaW5nXCI9PT1yfHxlIGluc3RhbmNlb2YgU3RyaW5nP1wic3RyaW5nXCI6XCJudW1iZXJcIj09PXJ8fGUgaW5zdGFuY2VvZiBOdW1iZXI/XCJudW1iZXJcIjpcImZ1bmN0aW9uXCI9PT1yfHxlIGluc3RhbmNlb2YgRnVuY3Rpb24/XCJmdW5jdGlvblwiOmUmJmUuY29uc3RydWN0b3I9PT1BcnJheT9cImFycmF5XCI6ZSYmMT09PWUubm9kZVR5cGU/XCJlbGVtZW50XCI6XCJvYmplY3RcIj09PXI/XCJvYmplY3RcIjpcInVua25vd25cIn0sbz1mdW5jdGlvbih0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk7Zm9yKHZhciBuIGluIGUuY2xhc3NOYW1lJiYoci5jbGFzc05hbWU9ZS5jbGFzc05hbWUpLGUuaW5uZXJIVE1MJiZlLmRvbXB1cmlmeSYmKHIuaW5uZXJIVE1MPWUuZG9tcHVyaWZ5LnNhbml0aXplKGUuaW5uZXJIVE1MKSksZS5zdHlsZSlyLnN0eWxlW25dPWUuc3R5bGVbbl07cmV0dXJuIHJ9LHM9ZnVuY3Rpb24gdChlLHIpe2Zvcih2YXIgbj0zPT09ZS5ub2RlVHlwZT9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlLm5vZGVWYWx1ZSk6ZS5jbG9uZU5vZGUoITEpLGk9ZS5maXJzdENoaWxkO2k7aT1pLm5leHRTaWJsaW5nKSEwIT09ciYmMT09PWkubm9kZVR5cGUmJlwiU0NSSVBUXCI9PT1pLm5vZGVOYW1lfHxuLmFwcGVuZENoaWxkKHQoaSxyKSk7cmV0dXJuIDE9PT1lLm5vZGVUeXBlJiYoXCJDQU5WQVNcIj09PWUubm9kZU5hbWU/KG4ud2lkdGg9ZS53aWR0aCxuLmhlaWdodD1lLmhlaWdodCxuLmdldENvbnRleHQoXCIyZFwiKS5kcmF3SW1hZ2UoZSwwLDApKTpcIlRFWFRBUkVBXCIhPT1lLm5vZGVOYW1lJiZcIlNFTEVDVFwiIT09ZS5ub2RlTmFtZXx8KG4udmFsdWU9ZS52YWx1ZSksbi5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLGZ1bmN0aW9uKCl7bi5zY3JvbGxUb3A9ZS5zY3JvbGxUb3Asbi5zY3JvbGxMZWZ0PWUuc2Nyb2xsTGVmdH0sITApKSxufSx1PWZ1bmN0aW9uIHQoZSl7dmFyIHI9T2JqZWN0LmFzc2lnbih0LmNvbnZlcnQoUHJvbWlzZS5yZXNvbHZlKCkpLEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC50ZW1wbGF0ZSkpKSxuPXQuY29udmVydChQcm9taXNlLnJlc29sdmUoKSxyKTtyZXR1cm4obj1uLnNldFByb2dyZXNzKDEsdCwxLFt0XSkpLnNldChlKX07KHUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUHJvbWlzZS5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj11LHUuY29udmVydD1mdW5jdGlvbih0LGUpe3JldHVybiB0Ll9fcHJvdG9fXz1lfHx1LnByb3RvdHlwZSx0fSx1LnRlbXBsYXRlPXtwcm9wOntzcmM6bnVsbCxjb250YWluZXI6bnVsbCxvdmVybGF5Om51bGwsY2FudmFzOm51bGwsaW1nOm51bGwscGRmOm51bGwscGFnZVNpemU6bnVsbCxjYWxsYmFjazpmdW5jdGlvbigpe319LHByb2dyZXNzOnt2YWw6MCxzdGF0ZTpudWxsLG46MCxzdGFjazpbXX0sb3B0OntmaWxlbmFtZTpcImZpbGUucGRmXCIsbWFyZ2luOlswLDAsMCwwXSxlbmFibGVMaW5rczohMCx4OjAseTowLGh0bWwyY2FudmFzOnt9LGpzUERGOnt9LGJhY2tncm91bmRDb2xvcjpcInRyYW5zcGFyZW50XCJ9fSx1LnByb3RvdHlwZS5mcm9tPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudGhlbihmdW5jdGlvbigpe3N3aXRjaChlPWV8fGZ1bmN0aW9uKHQpe3N3aXRjaChhKHQpKXtjYXNlXCJzdHJpbmdcIjpyZXR1cm5cInN0cmluZ1wiO2Nhc2VcImVsZW1lbnRcIjpyZXR1cm5cImNhbnZhc1wiPT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP1wiY2FudmFzXCI6XCJlbGVtZW50XCI7ZGVmYXVsdDpyZXR1cm5cInVua25vd25cIn19KHQpLGUpe2Nhc2VcInN0cmluZ1wiOnJldHVybiB0aGlzLnRoZW4obikudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zZXQoe3NyYzpvKFwiZGl2XCIse2lubmVySFRNTDp0LGRvbXB1cmlmeTplfSl9KX0pO2Nhc2VcImVsZW1lbnRcIjpyZXR1cm4gdGhpcy5zZXQoe3NyYzp0fSk7Y2FzZVwiY2FudmFzXCI6cmV0dXJuIHRoaXMuc2V0KHtjYW52YXM6dH0pO2Nhc2VcImltZ1wiOnJldHVybiB0aGlzLnNldCh7aW1nOnR9KTtkZWZhdWx0OnJldHVybiB0aGlzLmVycm9yKFwiVW5rbm93biBzb3VyY2UgdHlwZS5cIil9fSl9LHUucHJvdG90eXBlLnRvPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlXCJjb250YWluZXJcIjpyZXR1cm4gdGhpcy50b0NvbnRhaW5lcigpO2Nhc2VcImNhbnZhc1wiOnJldHVybiB0aGlzLnRvQ2FudmFzKCk7Y2FzZVwiaW1nXCI6cmV0dXJuIHRoaXMudG9JbWcoKTtjYXNlXCJwZGZcIjpyZXR1cm4gdGhpcy50b1BkZigpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuZXJyb3IoXCJJbnZhbGlkIHRhcmdldC5cIil9fSx1LnByb3RvdHlwZS50b0NvbnRhaW5lcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRoZW5MaXN0KFtmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3Auc3JjfHx0aGlzLmVycm9yKFwiQ2Fubm90IGR1cGxpY2F0ZSAtIG5vIHNvdXJjZSBIVE1MLlwiKX0sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wLnBhZ2VTaXplfHx0aGlzLnNldFBhZ2VTaXplKCl9XSkudGhlbihmdW5jdGlvbigpe3ZhciB0PXtwb3NpdGlvbjpcInJlbGF0aXZlXCIsZGlzcGxheTpcImlubGluZS1ibG9ja1wiLHdpZHRoOihcIm51bWJlclwiIT10eXBlb2YgdGhpcy5vcHQud2lkdGh8fGlzTmFOKHRoaXMub3B0LndpZHRoKXx8XCJudW1iZXJcIiE9dHlwZW9mIHRoaXMub3B0LndpbmRvd1dpZHRofHxpc05hTih0aGlzLm9wdC53aW5kb3dXaWR0aCk/TWF0aC5tYXgodGhpcy5wcm9wLnNyYy5jbGllbnRXaWR0aCx0aGlzLnByb3Auc3JjLnNjcm9sbFdpZHRoLHRoaXMucHJvcC5zcmMub2Zmc2V0V2lkdGgpOnRoaXMub3B0LndpbmRvd1dpZHRoKStcInB4XCIsbGVmdDowLHJpZ2h0OjAsdG9wOjAsbWFyZ2luOlwiYXV0b1wiLGJhY2tncm91bmRDb2xvcjp0aGlzLm9wdC5iYWNrZ3JvdW5kQ29sb3J9LGU9cyh0aGlzLnByb3Auc3JjLHRoaXMub3B0Lmh0bWwyY2FudmFzLmphdmFzY3JpcHRFbmFibGVkKTtcIkJPRFlcIj09PWUudGFnTmFtZSYmKHQuaGVpZ2h0PU1hdGgubWF4KGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0KStcInB4XCIpLHRoaXMucHJvcC5vdmVybGF5PW8oXCJkaXZcIix7Y2xhc3NOYW1lOlwiaHRtbDJwZGZfX292ZXJsYXlcIixzdHlsZTp7cG9zaXRpb246XCJmaXhlZFwiLG92ZXJmbG93OlwiaGlkZGVuXCIsekluZGV4OjFlMyxsZWZ0OlwiLTEwMDAwMHB4XCIscmlnaHQ6MCxib3R0b206MCx0b3A6MH19KSx0aGlzLnByb3AuY29udGFpbmVyPW8oXCJkaXZcIix7Y2xhc3NOYW1lOlwiaHRtbDJwZGZfX2NvbnRhaW5lclwiLHN0eWxlOnR9KSx0aGlzLnByb3AuY29udGFpbmVyLmFwcGVuZENoaWxkKGUpLHRoaXMucHJvcC5jb250YWluZXIuZmlyc3RDaGlsZC5hcHBlbmRDaGlsZChvKFwiZGl2XCIse3N0eWxlOntjbGVhcjpcImJvdGhcIixib3JkZXI6XCIwIG5vbmUgdHJhbnNwYXJlbnRcIixtYXJnaW46MCxwYWRkaW5nOjAsaGVpZ2h0OjB9fSkpLHRoaXMucHJvcC5jb250YWluZXIuc3R5bGUuZmxvYXQ9XCJub25lXCIsdGhpcy5wcm9wLm92ZXJsYXkuYXBwZW5kQ2hpbGQodGhpcy5wcm9wLmNvbnRhaW5lciksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnByb3Aub3ZlcmxheSksdGhpcy5wcm9wLmNvbnRhaW5lci5maXJzdENoaWxkLnN0eWxlLnBvc2l0aW9uPVwicmVsYXRpdmVcIix0aGlzLnByb3AuY29udGFpbmVyLmhlaWdodD1NYXRoLm1heCh0aGlzLnByb3AuY29udGFpbmVyLmZpcnN0Q2hpbGQuY2xpZW50SGVpZ2h0LHRoaXMucHJvcC5jb250YWluZXIuZmlyc3RDaGlsZC5zY3JvbGxIZWlnaHQsdGhpcy5wcm9wLmNvbnRhaW5lci5maXJzdENoaWxkLm9mZnNldEhlaWdodCkrXCJweFwifSl9LHUucHJvdG90eXBlLnRvQ2FudmFzPWZ1bmN0aW9uKCl7dmFyIHQ9W2Z1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmJvZHkuY29udGFpbnModGhpcy5wcm9wLmNvbnRhaW5lcil8fHRoaXMudG9Db250YWluZXIoKX1dO3JldHVybiB0aGlzLnRoZW5MaXN0KHQpLnRoZW4ocikudGhlbihmdW5jdGlvbih0KXt2YXIgZT1PYmplY3QuYXNzaWduKHt9LHRoaXMub3B0Lmh0bWwyY2FudmFzKTtyZXR1cm4gZGVsZXRlIGUub25yZW5kZXJlZCx0KHRoaXMucHJvcC5jb250YWluZXIsZSl9KS50aGVuKGZ1bmN0aW9uKHQpeyh0aGlzLm9wdC5odG1sMmNhbnZhcy5vbnJlbmRlcmVkfHxmdW5jdGlvbigpe30pKHQpLHRoaXMucHJvcC5jYW52YXM9dCxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMucHJvcC5vdmVybGF5KX0pfSx1LnByb3RvdHlwZS50b0NvbnRleHQyZD1mdW5jdGlvbigpe3ZhciB0PVtmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5ib2R5LmNvbnRhaW5zKHRoaXMucHJvcC5jb250YWluZXIpfHx0aGlzLnRvQ29udGFpbmVyKCl9XTtyZXR1cm4gdGhpcy50aGVuTGlzdCh0KS50aGVuKHIpLnRoZW4oZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHQuanNQREYscj10aGlzLm9wdC5mb250RmFjZXMsbj1cIm51bWJlclwiIT10eXBlb2YgdGhpcy5vcHQud2lkdGh8fGlzTmFOKHRoaXMub3B0LndpZHRoKXx8XCJudW1iZXJcIiE9dHlwZW9mIHRoaXMub3B0LndpbmRvd1dpZHRofHxpc05hTih0aGlzLm9wdC53aW5kb3dXaWR0aCk/MTp0aGlzLm9wdC53aWR0aC90aGlzLm9wdC53aW5kb3dXaWR0aCxpPU9iamVjdC5hc3NpZ24oe2FzeW5jOiEwLGFsbG93VGFpbnQ6ITAsc2NhbGU6bixzY3JvbGxYOnRoaXMub3B0LnNjcm9sbFh8fDAsc2Nyb2xsWTp0aGlzLm9wdC5zY3JvbGxZfHwwLGJhY2tncm91bmRDb2xvcjpcIiNmZmZmZmZcIixpbWFnZVRpbWVvdXQ6MTVlMyxsb2dnaW5nOiEwLHByb3h5Om51bGwscmVtb3ZlQ29udGFpbmVyOiEwLGZvcmVpZ25PYmplY3RSZW5kZXJpbmc6ITEsdXNlQ09SUzohMX0sdGhpcy5vcHQuaHRtbDJjYW52YXMpO2lmKGRlbGV0ZSBpLm9ucmVuZGVyZWQsZS5jb250ZXh0MmQuYXV0b1BhZ2luZz12b2lkIDA9PT10aGlzLm9wdC5hdXRvUGFnaW5nfHx0aGlzLm9wdC5hdXRvUGFnaW5nLGUuY29udGV4dDJkLnBvc1g9dGhpcy5vcHQueCxlLmNvbnRleHQyZC5wb3NZPXRoaXMub3B0LnksZS5jb250ZXh0MmQubWFyZ2luPXRoaXMub3B0Lm1hcmdpbixlLmNvbnRleHQyZC5mb250RmFjZXM9cixyKWZvcih2YXIgYT0wO2E8ci5sZW5ndGg7KythKXt2YXIgbz1yW2FdLHM9by5zcmMuZmluZChmdW5jdGlvbih0KXtyZXR1cm5cInRydWV0eXBlXCI9PT10LmZvcm1hdH0pO3MmJmUuYWRkRm9udChzLnVybCxvLnJlZi5uYW1lLG8ucmVmLnN0eWxlKX1yZXR1cm4gaS53aW5kb3dIZWlnaHQ9aS53aW5kb3dIZWlnaHR8fDAsaS53aW5kb3dIZWlnaHQ9MD09aS53aW5kb3dIZWlnaHQ/TWF0aC5tYXgodGhpcy5wcm9wLmNvbnRhaW5lci5jbGllbnRIZWlnaHQsdGhpcy5wcm9wLmNvbnRhaW5lci5zY3JvbGxIZWlnaHQsdGhpcy5wcm9wLmNvbnRhaW5lci5vZmZzZXRIZWlnaHQpOmkud2luZG93SGVpZ2h0LGUuY29udGV4dDJkLnNhdmUoITApLHQodGhpcy5wcm9wLmNvbnRhaW5lcixpKX0pLnRoZW4oZnVuY3Rpb24odCl7dGhpcy5vcHQuanNQREYuY29udGV4dDJkLnJlc3RvcmUoITApLCh0aGlzLm9wdC5odG1sMmNhbnZhcy5vbnJlbmRlcmVkfHxmdW5jdGlvbigpe30pKHQpLHRoaXMucHJvcC5jYW52YXM9dCxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMucHJvcC5vdmVybGF5KX0pfSx1LnByb3RvdHlwZS50b0ltZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRoZW5MaXN0KFtmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3AuY2FudmFzfHx0aGlzLnRvQ2FudmFzKCl9XSkudGhlbihmdW5jdGlvbigpe3ZhciB0PXRoaXMucHJvcC5jYW52YXMudG9EYXRhVVJMKFwiaW1hZ2UvXCIrdGhpcy5vcHQuaW1hZ2UudHlwZSx0aGlzLm9wdC5pbWFnZS5xdWFsaXR5KTt0aGlzLnByb3AuaW1nPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiksdGhpcy5wcm9wLmltZy5zcmM9dH0pfSx1LnByb3RvdHlwZS50b1BkZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRoZW5MaXN0KFtmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvQ29udGV4dDJkKCl9XSkudGhlbihmdW5jdGlvbigpe3RoaXMucHJvcC5wZGY9dGhpcy5wcm9wLnBkZnx8dGhpcy5vcHQuanNQREZ9KX0sdS5wcm90b3R5cGUub3V0cHV0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5cImltZ1wiPT09KHI9cnx8XCJwZGZcIikudG9Mb3dlckNhc2UoKXx8XCJpbWFnZVwiPT09ci50b0xvd2VyQ2FzZSgpP3RoaXMub3V0cHV0SW1nKHQsZSk6dGhpcy5vdXRwdXRQZGYodCxlKX0sdS5wcm90b3R5cGUub3V0cHV0UGRmPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudGhlbkxpc3QoW2Z1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcC5wZGZ8fHRoaXMudG9QZGYoKX1dKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcC5wZGYub3V0cHV0KHQsZSl9KX0sdS5wcm90b3R5cGUub3V0cHV0SW1nPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW5MaXN0KFtmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb3AuaW1nfHx0aGlzLnRvSW1nKCl9XSkudGhlbihmdW5jdGlvbigpe3N3aXRjaCh0KXtjYXNlIHZvaWQgMDpjYXNlXCJpbWdcIjpyZXR1cm4gdGhpcy5wcm9wLmltZztjYXNlXCJkYXRhdXJpc3RyaW5nXCI6Y2FzZVwiZGF0YXVybHN0cmluZ1wiOnJldHVybiB0aGlzLnByb3AuaW1nLnNyYztjYXNlXCJkYXRhdXJpXCI6Y2FzZVwiZGF0YXVybFwiOnJldHVybiBkb2N1bWVudC5sb2NhdGlvbi5ocmVmPXRoaXMucHJvcC5pbWcuc3JjO2RlZmF1bHQ6dGhyb3cnSW1hZ2Ugb3V0cHV0IHR5cGUgXCInK3QrJ1wiIGlzIG5vdCBzdXBwb3J0ZWQuJ319KX0sdS5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50aGVuTGlzdChbZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wLnBkZnx8dGhpcy50b1BkZigpfV0pLnNldCh0P3tmaWxlbmFtZTp0fTpudWxsKS50aGVuKGZ1bmN0aW9uKCl7dGhpcy5wcm9wLnBkZi5zYXZlKHRoaXMub3B0LmZpbGVuYW1lKX0pfSx1LnByb3RvdHlwZS5kb0NhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGhlbkxpc3QoW2Z1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcC5wZGZ8fHRoaXMudG9QZGYoKX1dKS50aGVuKGZ1bmN0aW9uKCl7dGhpcy5wcm9wLmNhbGxiYWNrKHRoaXMucHJvcC5wZGYpfSl9LHUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZihcIm9iamVjdFwiIT09YSh0KSlyZXR1cm4gdGhpczt2YXIgZT1PYmplY3Qua2V5cyh0fHx7fSkubWFwKGZ1bmN0aW9uKGUpe2lmKGUgaW4gdS50ZW1wbGF0ZS5wcm9wKXJldHVybiBmdW5jdGlvbigpe3RoaXMucHJvcFtlXT10W2VdfTtzd2l0Y2goZSl7Y2FzZVwibWFyZ2luXCI6cmV0dXJuIHRoaXMuc2V0TWFyZ2luLmJpbmQodGhpcyx0Lm1hcmdpbik7Y2FzZVwianNQREZcIjpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHQuanNQREY9dC5qc1BERix0aGlzLnNldFBhZ2VTaXplKCl9O2Nhc2VcInBhZ2VTaXplXCI6cmV0dXJuIHRoaXMuc2V0UGFnZVNpemUuYmluZCh0aGlzLHQucGFnZVNpemUpO2RlZmF1bHQ6cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5vcHRbZV09dFtlXX19fSx0aGlzKTtyZXR1cm4gdGhpcy50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGhlbkxpc3QoZSl9KX0sdS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudGhlbihmdW5jdGlvbigpe3ZhciByPXQgaW4gdS50ZW1wbGF0ZS5wcm9wP3RoaXMucHJvcFt0XTp0aGlzLm9wdFt0XTtyZXR1cm4gZT9lKHIpOnJ9KX0sdS5wcm90b3R5cGUuc2V0TWFyZ2luPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW4oZnVuY3Rpb24oKXtzd2l0Y2goYSh0KSl7Y2FzZVwibnVtYmVyXCI6dD1bdCx0LHQsdF07Y2FzZVwiYXJyYXlcIjppZigyPT09dC5sZW5ndGgmJih0PVt0WzBdLHRbMV0sdFswXSx0WzFdXSksND09PXQubGVuZ3RoKWJyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMuZXJyb3IoXCJJbnZhbGlkIG1hcmdpbiBhcnJheS5cIil9dGhpcy5vcHQubWFyZ2luPXR9KS50aGVuKHRoaXMuc2V0UGFnZVNpemUpfSx1LnByb3RvdHlwZS5zZXRQYWdlU2l6ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIE1hdGguZmxvb3IodCplLzcyKjk2KX1yZXR1cm4gdGhpcy50aGVuKGZ1bmN0aW9uKCl7KHQ9dHx8RS5nZXRQYWdlU2l6ZSh0aGlzLm9wdC5qc1BERikpLmhhc093blByb3BlcnR5KFwiaW5uZXJcIil8fCh0LmlubmVyPXt3aWR0aDp0LndpZHRoLXRoaXMub3B0Lm1hcmdpblsxXS10aGlzLm9wdC5tYXJnaW5bM10saGVpZ2h0OnQuaGVpZ2h0LXRoaXMub3B0Lm1hcmdpblswXS10aGlzLm9wdC5tYXJnaW5bMl19LHQuaW5uZXIucHg9e3dpZHRoOmUodC5pbm5lci53aWR0aCx0LmspLGhlaWdodDplKHQuaW5uZXIuaGVpZ2h0LHQuayl9LHQuaW5uZXIucmF0aW89dC5pbm5lci5oZWlnaHQvdC5pbm5lci53aWR0aCksdGhpcy5wcm9wLnBhZ2VTaXplPXR9KX0sdS5wcm90b3R5cGUuc2V0UHJvZ3Jlc3M9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIG51bGwhPXQmJih0aGlzLnByb2dyZXNzLnZhbD10KSxudWxsIT1lJiYodGhpcy5wcm9ncmVzcy5zdGF0ZT1lKSxudWxsIT1yJiYodGhpcy5wcm9ncmVzcy5uPXIpLG51bGwhPW4mJih0aGlzLnByb2dyZXNzLnN0YWNrPW4pLHRoaXMucHJvZ3Jlc3MucmF0aW89dGhpcy5wcm9ncmVzcy52YWwvdGhpcy5wcm9ncmVzcy5zdGF0ZSx0aGlzfSx1LnByb3RvdHlwZS51cGRhdGVQcm9ncmVzcz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdGhpcy5zZXRQcm9ncmVzcyh0P3RoaXMucHJvZ3Jlc3MudmFsK3Q6bnVsbCxlfHxudWxsLHI/dGhpcy5wcm9ncmVzcy5uK3I6bnVsbCxuP3RoaXMucHJvZ3Jlc3Muc3RhY2suY29uY2F0KG4pOm51bGwpfSx1LnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztyZXR1cm4gdGhpcy50aGVuQ29yZSh0LGUsZnVuY3Rpb24odCxlKXtyZXR1cm4gci51cGRhdGVQcm9ncmVzcyhudWxsLG51bGwsMSxbdF0pLFByb21pc2UucHJvdG90eXBlLnRoZW4uY2FsbCh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybiByLnVwZGF0ZVByb2dyZXNzKG51bGwsdCksZX0pLnRoZW4odCxlKS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiByLnVwZGF0ZVByb2dyZXNzKDEpLHR9KX0pfSx1LnByb3RvdHlwZS50aGVuQ29yZT1mdW5jdGlvbih0LGUscil7cj1yfHxQcm9taXNlLnByb3RvdHlwZS50aGVuO3ZhciBuPXRoaXM7dCYmKHQ9dC5iaW5kKG4pKSxlJiYoZT1lLmJpbmQobikpO3ZhciBpPS0xIT09UHJvbWlzZS50b1N0cmluZygpLmluZGV4T2YoXCJbbmF0aXZlIGNvZGVdXCIpJiZcIlByb21pc2VcIj09PVByb21pc2UubmFtZT9uOnUuY29udmVydChPYmplY3QuYXNzaWduKHt9LG4pLFByb21pc2UucHJvdG90eXBlKSxhPXIuY2FsbChpLHQsZSk7cmV0dXJuIHUuY29udmVydChhLG4uX19wcm90b19fKX0sdS5wcm90b3R5cGUudGhlbkV4dGVybmFsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFByb21pc2UucHJvdG90eXBlLnRoZW4uY2FsbCh0aGlzLHQsZSl9LHUucHJvdG90eXBlLnRoZW5MaXN0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXtlPWUudGhlbkNvcmUodCl9KSxlfSx1LnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbih0KXt0JiYodD10LmJpbmQodGhpcykpO3ZhciBlPVByb21pc2UucHJvdG90eXBlLmNhdGNoLmNhbGwodGhpcyx0KTtyZXR1cm4gdS5jb252ZXJ0KGUsdGhpcyl9LHUucHJvdG90eXBlLmNhdGNoRXh0ZXJuYWw9ZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UucHJvdG90eXBlLmNhdGNoLmNhbGwodGhpcyx0KX0sdS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGhlbihmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcih0KX0pfSx1LnByb3RvdHlwZS51c2luZz11LnByb3RvdHlwZS5zZXQsdS5wcm90b3R5cGUuc2F2ZUFzPXUucHJvdG90eXBlLnNhdmUsdS5wcm90b3R5cGUuZXhwb3J0PXUucHJvdG90eXBlLm91dHB1dCx1LnByb3RvdHlwZS5ydW49dS5wcm90b3R5cGUudGhlbixFLmdldFBhZ2VTaXplPWZ1bmN0aW9uKGUscixuKXtpZihcIm9iamVjdFwiPT09dChlKSl7dmFyIGk9ZTtlPWkub3JpZW50YXRpb24scj1pLnVuaXR8fHIsbj1pLmZvcm1hdHx8bn1yPXJ8fFwibW1cIixuPW58fFwiYTRcIixlPShcIlwiKyhlfHxcIlBcIikpLnRvTG93ZXJDYXNlKCk7dmFyIGEsbz0oXCJcIituKS50b0xvd2VyQ2FzZSgpLHM9e2EwOlsyMzgzLjk0LDMzNzAuMzldLGExOlsxNjgzLjc4LDIzODMuOTRdLGEyOlsxMTkwLjU1LDE2ODMuNzhdLGEzOls4NDEuODksMTE5MC41NV0sYTQ6WzU5NS4yOCw4NDEuODldLGE1Ols0MTkuNTMsNTk1LjI4XSxhNjpbMjk3LjY0LDQxOS41M10sYTc6WzIwOS43NiwyOTcuNjRdLGE4OlsxNDcuNCwyMDkuNzZdLGE5OlsxMDQuODgsMTQ3LjRdLGExMDpbNzMuNywxMDQuODhdLGIwOlsyODM0LjY1LDQwMDguMTldLGIxOlsyMDA0LjA5LDI4MzQuNjVdLGIyOlsxNDE3LjMyLDIwMDQuMDldLGIzOlsxMDAwLjYzLDE0MTcuMzJdLGI0Ols3MDguNjYsMTAwMC42M10sYjU6WzQ5OC45LDcwOC42Nl0sYjY6WzM1NC4zMyw0OTguOV0sYjc6WzI0OS40NSwzNTQuMzNdLGI4OlsxNzUuNzUsMjQ5LjQ1XSxiOTpbMTI0LjcyLDE3NS43NV0sYjEwOls4Ny44NywxMjQuNzJdLGMwOlsyNTk5LjM3LDM2NzYuNTRdLGMxOlsxODM2Ljg1LDI1OTkuMzddLGMyOlsxMjk4LjI3LDE4MzYuODVdLGMzOls5MTguNDMsMTI5OC4yN10sYzQ6WzY0OS4xMyw5MTguNDNdLGM1Ols0NTkuMjEsNjQ5LjEzXSxjNjpbMzIzLjE1LDQ1OS4yMV0sYzc6WzIyOS42MSwzMjMuMTVdLGM4OlsxNjEuNTcsMjI5LjYxXSxjOTpbMTEzLjM5LDE2MS41N10sYzEwOls3OS4zNywxMTMuMzldLGRsOlszMTEuODEsNjIzLjYyXSxsZXR0ZXI6WzYxMiw3OTJdLFwiZ292ZXJubWVudC1sZXR0ZXJcIjpbNTc2LDc1Nl0sbGVnYWw6WzYxMiwxMDA4XSxcImp1bmlvci1sZWdhbFwiOls1NzYsMzYwXSxsZWRnZXI6WzEyMjQsNzkyXSx0YWJsb2lkOls3OTIsMTIyNF0sXCJjcmVkaXQtY2FyZFwiOlsxNTMsMjQzXX07c3dpdGNoKHIpe2Nhc2VcInB0XCI6YT0xO2JyZWFrO2Nhc2VcIm1tXCI6YT03Mi8yNS40O2JyZWFrO2Nhc2VcImNtXCI6YT03Mi8yLjU0O2JyZWFrO2Nhc2VcImluXCI6YT03MjticmVhaztjYXNlXCJweFwiOmE9Ljc1O2JyZWFrO2Nhc2VcInBjXCI6Y2FzZVwiZW1cIjphPTEyO2JyZWFrO2Nhc2VcImV4XCI6YT02O2JyZWFrO2RlZmF1bHQ6dGhyb3dcIkludmFsaWQgdW5pdDogXCIrcn12YXIgdSxjPTAsbD0wO2lmKHMuaGFzT3duUHJvcGVydHkobykpYz1zW29dWzFdL2EsbD1zW29dWzBdL2E7ZWxzZSB0cnl7Yz1uWzFdLGw9blswXX1jYXRjaChoKXt0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGZvcm1hdDogXCIrbil9aWYoXCJwXCI9PT1lfHxcInBvcnRyYWl0XCI9PT1lKWU9XCJwXCIsbD5jJiYodT1sLGw9YyxjPXUpO2Vsc2V7aWYoXCJsXCIhPT1lJiZcImxhbmRzY2FwZVwiIT09ZSl0aHJvd1wiSW52YWxpZCBvcmllbnRhdGlvbjogXCIrZTtlPVwibFwiLGM+bCYmKHU9bCxsPWMsYz11KX1yZXR1cm57d2lkdGg6bCxoZWlnaHQ6Yyx1bml0OnIsazphLG9yaWVudGF0aW9uOmV9fSxlLmh0bWw9ZnVuY3Rpb24odCxlKXsoZT1lfHx7fSkuY2FsbGJhY2s9ZS5jYWxsYmFja3x8ZnVuY3Rpb24oKXt9LGUuaHRtbDJjYW52YXM9ZS5odG1sMmNhbnZhc3x8e30sZS5odG1sMmNhbnZhcy5jYW52YXM9ZS5odG1sMmNhbnZhcy5jYW52YXN8fHRoaXMuY2FudmFzLGUuanNQREY9ZS5qc1BERnx8dGhpcyxlLmZvbnRGYWNlcz1lLmZvbnRGYWNlcz9lLmZvbnRGYWNlcy5tYXAoT3QpOm51bGw7dmFyIHI9bmV3IHUoZSk7cmV0dXJuIGUud29ya2VyP3I6ci5mcm9tKHQpLmRvQ2FsbGJhY2soKX19KEUuQVBJKSxFLkFQSS5hZGRKUz1mdW5jdGlvbih0KXt2YXIgZSxyLG49ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVwiXCIscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO2lmKFwiKFwiPT09bnx8XCIpXCI9PT1uKXtmb3IodmFyIGk9MCxhPXItMTthPj0wJiZcIlxcXFxcIj09PXRbYV07YS0tKWkrKztlKz1pJTI9PTA/XCJcXFxcXCIrbjpufWVsc2UgZSs9bn1yZXR1cm4gZX0odCk7cmV0dXJuIHRoaXMuaW50ZXJuYWwuZXZlbnRzLnN1YnNjcmliZShcInBvc3RQdXRSZXNvdXJjZXNcIixmdW5jdGlvbigpe2U9dGhpcy5pbnRlcm5hbC5uZXdPYmplY3QoKSx0aGlzLmludGVybmFsLm91dChcIjw8XCIpLHRoaXMuaW50ZXJuYWwub3V0KFwiL05hbWVzIFsoRW1iZWRkZWRKUykgXCIrKGUrMSkrXCIgMCBSXVwiKSx0aGlzLmludGVybmFsLm91dChcIj4+XCIpLHRoaXMuaW50ZXJuYWwub3V0KFwiZW5kb2JqXCIpLHI9dGhpcy5pbnRlcm5hbC5uZXdPYmplY3QoKSx0aGlzLmludGVybmFsLm91dChcIjw8XCIpLHRoaXMuaW50ZXJuYWwub3V0KFwiL1MgL0phdmFTY3JpcHRcIiksdGhpcy5pbnRlcm5hbC5vdXQoXCIvSlMgKFwiK24rXCIpXCIpLHRoaXMuaW50ZXJuYWwub3V0KFwiPj5cIiksdGhpcy5pbnRlcm5hbC5vdXQoXCJlbmRvYmpcIil9KSx0aGlzLmludGVybmFsLmV2ZW50cy5zdWJzY3JpYmUoXCJwdXRDYXRhbG9nXCIsZnVuY3Rpb24oKXt2b2lkIDAhPT1lJiZ2b2lkIDAhPT1yJiZ0aGlzLmludGVybmFsLm91dChcIi9OYW1lcyA8PC9KYXZhU2NyaXB0IFwiK2UrXCIgMCBSPj5cIil9KSx0aGlzfSxcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNCBTdGV2ZW4gU3B1bmdpbiAoVHdlbHZlVG9uZSBMTEMpICBzdGV2ZW5AdHdlbHZldG9uZS50dlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZVxuICovXG5mdW5jdGlvbih0KXt2YXIgZTt0LmV2ZW50cy5wdXNoKFtcInBvc3RQdXRSZXNvdXJjZXNcIixmdW5jdGlvbigpe3ZhciB0PXRoaXMscj0vXihcXGQrKSAwIG9iaiQvO2lmKHRoaXMub3V0bGluZS5yb290LmNoaWxkcmVuLmxlbmd0aD4wKWZvcih2YXIgbj10Lm91dGxpbmUucmVuZGVyKCkuc3BsaXQoL1xcclxcbi8pLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIGE9bltpXSxvPXIuZXhlYyhhKTtpZihudWxsIT1vKXt2YXIgcz1vWzFdO3QuaW50ZXJuYWwubmV3T2JqZWN0RGVmZXJyZWRCZWdpbihzLCExKX10LmludGVybmFsLndyaXRlKGEpfWlmKHRoaXMub3V0bGluZS5jcmVhdGVOYW1lZERlc3RpbmF0aW9ucyl7dmFyIHU9dGhpcy5pbnRlcm5hbC5wYWdlcy5sZW5ndGgsYz1bXTtmb3IoaT0wO2k8dTtpKyspe3ZhciBsPXQuaW50ZXJuYWwubmV3T2JqZWN0KCk7Yy5wdXNoKGwpO3ZhciBoPXQuaW50ZXJuYWwuZ2V0UGFnZUluZm8oaSsxKTt0LmludGVybmFsLndyaXRlKFwiPDwgL0RbXCIraC5vYmpJZCtcIiAwIFIgL1hZWiBudWxsIG51bGwgbnVsbF0+PiBlbmRvYmpcIil9dmFyIGY9dC5pbnRlcm5hbC5uZXdPYmplY3QoKTtmb3IodC5pbnRlcm5hbC53cml0ZShcIjw8IC9OYW1lcyBbIFwiKSxpPTA7aTxjLmxlbmd0aDtpKyspdC5pbnRlcm5hbC53cml0ZShcIihwYWdlX1wiKyhpKzEpK1wiKVwiK2NbaV0rXCIgMCBSXCIpO3QuaW50ZXJuYWwud3JpdGUoXCIgXSA+PlwiLFwiZW5kb2JqXCIpLGU9dC5pbnRlcm5hbC5uZXdPYmplY3QoKSx0LmludGVybmFsLndyaXRlKFwiPDwgL0Rlc3RzIFwiK2YrXCIgMCBSXCIpLHQuaW50ZXJuYWwud3JpdGUoXCI+PlwiLFwiZW5kb2JqXCIpfX1dKSx0LmV2ZW50cy5wdXNoKFtcInB1dENhdGFsb2dcIixmdW5jdGlvbigpe3ZhciB0PXRoaXM7dC5vdXRsaW5lLnJvb3QuY2hpbGRyZW4ubGVuZ3RoPjAmJih0LmludGVybmFsLndyaXRlKFwiL091dGxpbmVzXCIsdGhpcy5vdXRsaW5lLm1ha2VSZWYodGhpcy5vdXRsaW5lLnJvb3QpKSx0aGlzLm91dGxpbmUuY3JlYXRlTmFtZWREZXN0aW5hdGlvbnMmJnQuaW50ZXJuYWwud3JpdGUoXCIvTmFtZXMgXCIrZStcIiAwIFJcIikpfV0pLHQuZXZlbnRzLnB1c2goW1wiaW5pdGlhbGl6ZWRcIixmdW5jdGlvbigpe3ZhciB0PXRoaXM7dC5vdXRsaW5lPXtjcmVhdGVOYW1lZERlc3RpbmF0aW9uczohMSxyb290OntjaGlsZHJlbjpbXX19LHQub3V0bGluZS5hZGQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXt0aXRsZTplLG9wdGlvbnM6cixjaGlsZHJlbjpbXX07cmV0dXJuIG51bGw9PXQmJih0PXRoaXMucm9vdCksdC5jaGlsZHJlbi5wdXNoKG4pLG59LHQub3V0bGluZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdHg9e30sdGhpcy5jdHgudmFsPVwiXCIsdGhpcy5jdHgucGRmPXQsdGhpcy5nZW5JZHNfcih0aGlzLnJvb3QpLHRoaXMucmVuZGVyUm9vdCh0aGlzLnJvb3QpLHRoaXMucmVuZGVySXRlbXModGhpcy5yb290KSx0aGlzLmN0eC52YWx9LHQub3V0bGluZS5nZW5JZHNfcj1mdW5jdGlvbihlKXtlLmlkPXQuaW50ZXJuYWwubmV3T2JqZWN0RGVmZXJyZWQoKTtmb3IodmFyIHI9MDtyPGUuY2hpbGRyZW4ubGVuZ3RoO3IrKyl0aGlzLmdlbklkc19yKGUuY2hpbGRyZW5bcl0pfSx0Lm91dGxpbmUucmVuZGVyUm9vdD1mdW5jdGlvbih0KXt0aGlzLm9ialN0YXJ0KHQpLHRoaXMubGluZShcIi9UeXBlIC9PdXRsaW5lc1wiKSx0LmNoaWxkcmVuLmxlbmd0aD4wJiYodGhpcy5saW5lKFwiL0ZpcnN0IFwiK3RoaXMubWFrZVJlZih0LmNoaWxkcmVuWzBdKSksdGhpcy5saW5lKFwiL0xhc3QgXCIrdGhpcy5tYWtlUmVmKHQuY2hpbGRyZW5bdC5jaGlsZHJlbi5sZW5ndGgtMV0pKSksdGhpcy5saW5lKFwiL0NvdW50IFwiK3RoaXMuY291bnRfcih7Y291bnQ6MH0sdCkpLHRoaXMub2JqRW5kKCl9LHQub3V0bGluZS5yZW5kZXJJdGVtcz1mdW5jdGlvbihlKXtmb3IodmFyIHI9dGhpcy5jdHgucGRmLmludGVybmFsLmdldFZlcnRpY2FsQ29vcmRpbmF0ZVN0cmluZyxuPTA7bjxlLmNoaWxkcmVuLmxlbmd0aDtuKyspe3ZhciBpPWUuY2hpbGRyZW5bbl07dGhpcy5vYmpTdGFydChpKSx0aGlzLmxpbmUoXCIvVGl0bGUgXCIrdGhpcy5tYWtlU3RyaW5nKGkudGl0bGUpKSx0aGlzLmxpbmUoXCIvUGFyZW50IFwiK3RoaXMubWFrZVJlZihlKSksbj4wJiZ0aGlzLmxpbmUoXCIvUHJldiBcIit0aGlzLm1ha2VSZWYoZS5jaGlsZHJlbltuLTFdKSksbjxlLmNoaWxkcmVuLmxlbmd0aC0xJiZ0aGlzLmxpbmUoXCIvTmV4dCBcIit0aGlzLm1ha2VSZWYoZS5jaGlsZHJlbltuKzFdKSksaS5jaGlsZHJlbi5sZW5ndGg+MCYmKHRoaXMubGluZShcIi9GaXJzdCBcIit0aGlzLm1ha2VSZWYoaS5jaGlsZHJlblswXSkpLHRoaXMubGluZShcIi9MYXN0IFwiK3RoaXMubWFrZVJlZihpLmNoaWxkcmVuW2kuY2hpbGRyZW4ubGVuZ3RoLTFdKSkpO3ZhciBhPXRoaXMuY291bnQ9dGhpcy5jb3VudF9yKHtjb3VudDowfSxpKTtpZihhPjAmJnRoaXMubGluZShcIi9Db3VudCBcIithKSxpLm9wdGlvbnMmJmkub3B0aW9ucy5wYWdlTnVtYmVyKXt2YXIgbz10LmludGVybmFsLmdldFBhZ2VJbmZvKGkub3B0aW9ucy5wYWdlTnVtYmVyKTt0aGlzLmxpbmUoXCIvRGVzdCBbXCIrby5vYmpJZCtcIiAwIFIgL1hZWiAwIFwiK3IoMCkrXCIgMF1cIil9dGhpcy5vYmpFbmQoKX1mb3IodmFyIHM9MDtzPGUuY2hpbGRyZW4ubGVuZ3RoO3MrKyl0aGlzLnJlbmRlckl0ZW1zKGUuY2hpbGRyZW5bc10pfSx0Lm91dGxpbmUubGluZT1mdW5jdGlvbih0KXt0aGlzLmN0eC52YWwrPXQrXCJcXHJcXG5cIn0sdC5vdXRsaW5lLm1ha2VSZWY9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaWQrXCIgMCBSXCJ9LHQub3V0bGluZS5tYWtlU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVyblwiKFwiK3QuaW50ZXJuYWwucGRmRXNjYXBlKGUpK1wiKVwifSx0Lm91dGxpbmUub2JqU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5jdHgudmFsKz1cIlxcclxcblwiK3QuaWQrXCIgMCBvYmpcXHJcXG48PFxcclxcblwifSx0Lm91dGxpbmUub2JqRW5kPWZ1bmN0aW9uKCl7dGhpcy5jdHgudmFsKz1cIj4+IFxcclxcbmVuZG9ialxcclxcblwifSx0Lm91dGxpbmUuY291bnRfcj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5jaGlsZHJlbi5sZW5ndGg7cisrKXQuY291bnQrKyx0aGlzLmNvdW50X3IodCxlLmNoaWxkcmVuW3JdKTtyZXR1cm4gdC5jb3VudH19XSl9KEUuQVBJKSxcbi8qKlxuICogQGxpY2Vuc2VcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2VcbiAqL1xuZnVuY3Rpb24odCl7dmFyIGU9WzE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTldO3QucHJvY2Vzc0pQRUc9ZnVuY3Rpb24odCxyLG4saSxhLG8pe3ZhciBzLHU9dGhpcy5kZWNvZGUuRENUX0RFQ09ERSxjPW51bGw7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHR8fHRoaXMuX19hZGRpbWFnZV9fLmlzQXJyYXlCdWZmZXIodCl8fHRoaXMuX19hZGRpbWFnZV9fLmlzQXJyYXlCdWZmZXJWaWV3KHQpKXtzd2l0Y2godD1hfHx0LHQ9dGhpcy5fX2FkZGltYWdlX18uaXNBcnJheUJ1ZmZlcih0KT9uZXcgVWludDhBcnJheSh0KTp0LHM9ZnVuY3Rpb24odCl7Zm9yKHZhciByLG49MjU2KnQuY2hhckNvZGVBdCg0KSt0LmNoYXJDb2RlQXQoNSksaT10Lmxlbmd0aCxhPXt3aWR0aDowLGhlaWdodDowLG51bWNvbXBvbmVudHM6MX0sbz00O288aTtvKz0yKXtpZihvKz1uLC0xIT09ZS5pbmRleE9mKHQuY2hhckNvZGVBdChvKzEpKSl7cj0yNTYqdC5jaGFyQ29kZUF0KG8rNSkrdC5jaGFyQ29kZUF0KG8rNiksYT17d2lkdGg6MjU2KnQuY2hhckNvZGVBdChvKzcpK3QuY2hhckNvZGVBdChvKzgpLGhlaWdodDpyLG51bWNvbXBvbmVudHM6dC5jaGFyQ29kZUF0KG8rOSl9O2JyZWFrfW49MjU2KnQuY2hhckNvZGVBdChvKzIpK3QuY2hhckNvZGVBdChvKzMpfXJldHVybiBhfSh0PXRoaXMuX19hZGRpbWFnZV9fLmlzQXJyYXlCdWZmZXJWaWV3KHQpP3RoaXMuX19hZGRpbWFnZV9fLmFycmF5QnVmZmVyVG9CaW5hcnlTdHJpbmcodCk6dCkscy5udW1jb21wb25lbnRzKXtjYXNlIDE6bz10aGlzLmNvbG9yX3NwYWNlcy5ERVZJQ0VfR1JBWTticmVhaztjYXNlIDQ6bz10aGlzLmNvbG9yX3NwYWNlcy5ERVZJQ0VfQ01ZSzticmVhaztjYXNlIDM6bz10aGlzLmNvbG9yX3NwYWNlcy5ERVZJQ0VfUkdCfWM9e2RhdGE6dCx3aWR0aDpzLndpZHRoLGhlaWdodDpzLmhlaWdodCxjb2xvclNwYWNlOm8sYml0c1BlckNvbXBvbmVudDo4LGZpbHRlcjp1LGluZGV4OnIsYWxpYXM6bn19cmV0dXJuIGN9fShFLkFQSSksRS5BUEkucHJvY2Vzc1BORz1mdW5jdGlvbih0LGksYSxvKXtpZih0aGlzLl9fYWRkaW1hZ2VfXy5pc0FycmF5QnVmZmVyKHQpJiYodD1uZXcgVWludDhBcnJheSh0KSksdGhpcy5fX2FkZGltYWdlX18uaXNBcnJheUJ1ZmZlclZpZXcodCkpe3ZhciBzLHU9bih0LHtjaGVja0NyYzohMH0pLGM9dS53aWR0aCxsPXUuaGVpZ2h0LGg9dS5jaGFubmVscyxmPXUucGFsZXR0ZSxkPXUuZGVwdGg7cz1mJiYxPT09aD9mdW5jdGlvbih0KXtmb3IodmFyIGU9dC53aWR0aCxuPXQuaGVpZ2h0LGk9dC5kYXRhLGE9dC5wYWxldHRlLG89dC5kZXB0aCxzPSExLHU9W10sYz1bXSxsPXZvaWQgMCxoPSExLGY9MCxkPTA7ZDxhLmxlbmd0aDtkKyspe3ZhciBwPXIoYVtkXSw0KSxnPXBbMF0sbT1wWzFdLHY9cFsyXSxiPXBbM107dS5wdXNoKGcsbSx2KSxudWxsIT1iJiYoMD09PWI/KGYrKyxjLmxlbmd0aDwxJiZjLnB1c2goZCkpOmI8MjU1JiYoaD0hMCkpfWlmKGh8fGY+MSl7cz0hMCxjPXZvaWQgMDt2YXIgeT1lKm47bD1uZXcgVWludDhBcnJheSh5KTtmb3IodmFyIHc9bmV3IERhdGFWaWV3KGkuYnVmZmVyKSxOPTA7Tjx5O04rKyl7dmFyIEw9ZWUodyxOLG8pLHg9cihhW0xdLDQpWzNdO2xbTl09eH19ZWxzZSAwPT09ZiYmKGM9dm9pZCAwKTtyZXR1cm57Y29sb3JTcGFjZTpcIkluZGV4ZWRcIixjb2xvcnNQZXJQaXhlbDoxLHNNYXNrQml0c1BlckNvbXBvbmVudDpzPzg6dm9pZCAwLGNvbG9yQnl0ZXM6aSxhbHBoYUJ5dGVzOmwsbmVlZFNNYXNrOnMscGFsZXR0ZTp1LG1hc2s6Y319KHUpOjI9PT1ofHw0PT09aD9mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5kYXRhLHI9dC53aWR0aCxuPXQuaGVpZ2h0LGk9dC5jaGFubmVscyxhPXQuZGVwdGgsbz0yPT09aT9cIkRldmljZUdyYXlcIjpcIkRldmljZVJHQlwiLHM9aS0xLHU9cipuLGM9cyxsPXUqYyxoPTEqdSxmPU1hdGguY2VpbChsKmEvOCksZD1NYXRoLmNlaWwoaCphLzgpLHA9bmV3IFVpbnQ4QXJyYXkoZiksZz1uZXcgVWludDhBcnJheShkKSxtPW5ldyBEYXRhVmlldyhlLmJ1ZmZlciksdj1uZXcgRGF0YVZpZXcocC5idWZmZXIpLGI9bmV3IERhdGFWaWV3KGcuYnVmZmVyKSx5PSExLHc9MDt3PHU7dysrKXtmb3IodmFyIE49dyppLEw9MDtMPGM7TCsrKXJlKHYsZWUobSxOK0wsYSksdypjK0wsYSk7dmFyIHg9ZWUobSxOK2MsYSk7eDwoMTw8YSktMSYmKHk9ITApLHJlKGIseCwxKncsYSl9cmV0dXJue2NvbG9yU3BhY2U6byxjb2xvcnNQZXJQaXhlbDpzLHNNYXNrQml0c1BlckNvbXBvbmVudDp5P2E6dm9pZCAwLGNvbG9yQnl0ZXM6cCxhbHBoYUJ5dGVzOmcsbmVlZFNNYXNrOnl9fSh1KTpmdW5jdGlvbih0KXt2YXIgZT10LmRhdGEscj0xPT09dC5jaGFubmVscz9cIkRldmljZUdyYXlcIjpcIkRldmljZVJHQlwiO3JldHVybntjb2xvclNwYWNlOnIsY29sb3JzUGVyUGl4ZWw6XCJEZXZpY2VHcmF5XCI9PT1yPzE6Myxjb2xvckJ5dGVzOmUgaW5zdGFuY2VvZiBVaW50MTZBcnJheT9mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgVWludDhBcnJheSgyKmUpLG49bmV3IERhdGFWaWV3KHIuYnVmZmVyLHIuYnl0ZU9mZnNldCxyLmJ5dGVMZW5ndGgpLGk9MDtpPGU7aSsrKW4uc2V0VWludDE2KDIqaSx0W2ldLCExKTtyZXR1cm4gcn0oZSk6ZSxuZWVkU01hc2s6ITF9fSh1KTt2YXIgcCxnLG0sdj1zLGI9di5jb2xvclNwYWNlLHk9di5jb2xvcnNQZXJQaXhlbCx3PXYuc01hc2tCaXRzUGVyQ29tcG9uZW50LE49di5jb2xvckJ5dGVzLEw9di5hbHBoYUJ5dGVzLHg9di5uZWVkU01hc2ssQT12LnBhbGV0dGUsUz12Lm1hc2ssXz1udWxsO3JldHVybiBvIT09RS5BUEkuaW1hZ2VfY29tcHJlc3Npb24uTk9ORSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZT8oXz1mdW5jdGlvbih0KXt2YXIgZTtzd2l0Y2godCl7Y2FzZSBFLkFQSS5pbWFnZV9jb21wcmVzc2lvbi5GQVNUOmU9MTE7YnJlYWs7Y2FzZSBFLkFQSS5pbWFnZV9jb21wcmVzc2lvbi5NRURJVU06ZT0xMzticmVhaztjYXNlIEUuQVBJLmltYWdlX2NvbXByZXNzaW9uLlNMT1c6ZT0xNDticmVhaztkZWZhdWx0OmU9MTJ9cmV0dXJuIGV9KG8pLHA9dGhpcy5kZWNvZGUuRkxBVEVfREVDT0RFLGc9XCIvUHJlZGljdG9yIFwiLmNvbmNhdChfLFwiIC9Db2xvcnMgXCIpLmNvbmNhdCh5LFwiIC9CaXRzUGVyQ29tcG9uZW50IFwiKS5jb25jYXQoZCxcIiAvQ29sdW1ucyBcIikuY29uY2F0KGMpLHQ9WXQoTixNYXRoLmNlaWwoYyp5KmQvOCkseSxkLG8pLHgmJihtPVl0KEwsTWF0aC5jZWlsKGMqdy84KSwxLHcsbykpKToocD12b2lkIDAsZz12b2lkIDAsdD1OLHgmJihtPUwpKSwodGhpcy5fX2FkZGltYWdlX18uaXNBcnJheUJ1ZmZlcih0KXx8dGhpcy5fX2FkZGltYWdlX18uaXNBcnJheUJ1ZmZlclZpZXcodCkpJiYodD10aGlzLl9fYWRkaW1hZ2VfXy5hcnJheUJ1ZmZlclRvQmluYXJ5U3RyaW5nKHQpKSwobSYmdGhpcy5fX2FkZGltYWdlX18uaXNBcnJheUJ1ZmZlcihtKXx8dGhpcy5fX2FkZGltYWdlX18uaXNBcnJheUJ1ZmZlclZpZXcobSkpJiYobT10aGlzLl9fYWRkaW1hZ2VfXy5hcnJheUJ1ZmZlclRvQmluYXJ5U3RyaW5nKG0pKSx7YWxpYXM6YSxkYXRhOnQsaW5kZXg6aSxmaWx0ZXI6cCxkZWNvZGVQYXJhbWV0ZXJzOmcsdHJhbnNwYXJlbmN5OlMscGFsZXR0ZTpBLHNNYXNrOm0scHJlZGljdG9yOl8sd2lkdGg6YyxoZWlnaHQ6bCxiaXRzUGVyQ29tcG9uZW50OmQsc01hc2tCaXRzUGVyQ29tcG9uZW50OncsY29sb3JTcGFjZTpifX19LGZ1bmN0aW9uKHQpe3QucHJvY2Vzc0dJRjg5QT1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT1uZXcgaWUoZSksbz1hLndpZHRoLHM9YS5oZWlnaHQsdT1bXTthLmRlY29kZUFuZEJsaXRGcmFtZVJHQkEoMCx1KTt2YXIgYz17ZGF0YTp1LHdpZHRoOm8saGVpZ2h0OnN9LGw9bmV3IG9lKDEwMCkuZW5jb2RlKGMsMTAwKTtyZXR1cm4gdC5wcm9jZXNzSlBFRy5jYWxsKHRoaXMsbCxyLG4saSl9LHQucHJvY2Vzc0dJRjg3QT10LnByb2Nlc3NHSUY4OUF9KEUuQVBJKSxzZS5wcm90b3R5cGUucGFyc2VIZWFkZXI9ZnVuY3Rpb24oKXtpZih0aGlzLmZpbGVTaXplPXRoaXMuZGF0YXYuZ2V0VWludDMyKHRoaXMucG9zLCEwKSx0aGlzLnBvcys9NCx0aGlzLnJlc2VydmVkPXRoaXMuZGF0YXYuZ2V0VWludDMyKHRoaXMucG9zLCEwKSx0aGlzLnBvcys9NCx0aGlzLm9mZnNldD10aGlzLmRhdGF2LmdldFVpbnQzMih0aGlzLnBvcywhMCksdGhpcy5wb3MrPTQsdGhpcy5oZWFkZXJTaXplPXRoaXMuZGF0YXYuZ2V0VWludDMyKHRoaXMucG9zLCEwKSx0aGlzLnBvcys9NCx0aGlzLndpZHRoPXRoaXMuZGF0YXYuZ2V0VWludDMyKHRoaXMucG9zLCEwKSx0aGlzLnBvcys9NCx0aGlzLmhlaWdodD10aGlzLmRhdGF2LmdldEludDMyKHRoaXMucG9zLCEwKSx0aGlzLnBvcys9NCx0aGlzLnBsYW5lcz10aGlzLmRhdGF2LmdldFVpbnQxNih0aGlzLnBvcywhMCksdGhpcy5wb3MrPTIsdGhpcy5iaXRQUD10aGlzLmRhdGF2LmdldFVpbnQxNih0aGlzLnBvcywhMCksdGhpcy5wb3MrPTIsdGhpcy5jb21wcmVzcz10aGlzLmRhdGF2LmdldFVpbnQzMih0aGlzLnBvcywhMCksdGhpcy5wb3MrPTQsdGhpcy5yYXdTaXplPXRoaXMuZGF0YXYuZ2V0VWludDMyKHRoaXMucG9zLCEwKSx0aGlzLnBvcys9NCx0aGlzLmhyPXRoaXMuZGF0YXYuZ2V0VWludDMyKHRoaXMucG9zLCEwKSx0aGlzLnBvcys9NCx0aGlzLnZyPXRoaXMuZGF0YXYuZ2V0VWludDMyKHRoaXMucG9zLCEwKSx0aGlzLnBvcys9NCx0aGlzLmNvbG9ycz10aGlzLmRhdGF2LmdldFVpbnQzMih0aGlzLnBvcywhMCksdGhpcy5wb3MrPTQsdGhpcy5pbXBvcnRhbnRDb2xvcnM9dGhpcy5kYXRhdi5nZXRVaW50MzIodGhpcy5wb3MsITApLHRoaXMucG9zKz00LDE2PT09dGhpcy5iaXRQUCYmdGhpcy5pc193aXRoX2FscGhhJiYodGhpcy5iaXRQUD0xNSksdGhpcy5iaXRQUDwxNSl7dmFyIHQ9MD09PXRoaXMuY29sb3JzPzE8PHRoaXMuYml0UFA6dGhpcy5jb2xvcnM7dGhpcy5wYWxldHRlPW5ldyBBcnJheSh0KTtmb3IodmFyIGU9MDtlPHQ7ZSsrKXt2YXIgcj10aGlzLmRhdGF2LmdldFVpbnQ4KHRoaXMucG9zKyssITApLG49dGhpcy5kYXRhdi5nZXRVaW50OCh0aGlzLnBvcysrLCEwKSxpPXRoaXMuZGF0YXYuZ2V0VWludDgodGhpcy5wb3MrKywhMCksYT10aGlzLmRhdGF2LmdldFVpbnQ4KHRoaXMucG9zKyssITApO3RoaXMucGFsZXR0ZVtlXT17cmVkOmksZ3JlZW46bixibHVlOnIscXVhZDphfX19dGhpcy5oZWlnaHQ8MCYmKHRoaXMuaGVpZ2h0Kj0tMSx0aGlzLmJvdHRvbV91cD0hMSl9LHNlLnByb3RvdHlwZS5wYXJzZUJHUj1mdW5jdGlvbigpe3RoaXMucG9zPXRoaXMub2Zmc2V0O3ZhciB0PVwiYml0XCIrdGhpcy5iaXRQUCxlPXRoaXMud2lkdGgqdGhpcy5oZWlnaHQqNDtpZihlPjUzNjg3MDkxMil0aHJvdyBuZXcgRXJyb3IoXCJJbWFnZSBkaW1lbnNpb25zIGV4Y2VlZCA1MTJNQiwgd2hpY2ggaXMgdG9vIGxhcmdlLlwiKTt0aGlzLmRhdGE9bmV3IFVpbnQ4QXJyYXkoZSk7dHJ5e3RoaXNbdF0oKX1jYXRjaChyKXtvLmxvZyhcImJpdCBkZWNvZGUgZXJyb3I6XCIrcil9fSxzZS5wcm90b3R5cGUuYml0MT1mdW5jdGlvbigpe3ZhciB0LGU9TWF0aC5jZWlsKHRoaXMud2lkdGgvOCkscj1lJTQ7Zm9yKHQ9dGhpcy5oZWlnaHQtMTt0Pj0wO3QtLSl7Zm9yKHZhciBuPXRoaXMuYm90dG9tX3VwP3Q6dGhpcy5oZWlnaHQtMS10LGk9MDtpPGU7aSsrKWZvcih2YXIgYT10aGlzLmRhdGF2LmdldFVpbnQ4KHRoaXMucG9zKyssITApLG89bip0aGlzLndpZHRoKjQrOCppKjQscz0wO3M8OCYmOCppK3M8dGhpcy53aWR0aDtzKyspe3ZhciB1PXRoaXMucGFsZXR0ZVthPj43LXMmMV07dGhpcy5kYXRhW28rNCpzXT11LmJsdWUsdGhpcy5kYXRhW28rNCpzKzFdPXUuZ3JlZW4sdGhpcy5kYXRhW28rNCpzKzJdPXUucmVkLHRoaXMuZGF0YVtvKzQqcyszXT0yNTV9MCE9PXImJih0aGlzLnBvcys9NC1yKX19LHNlLnByb3RvdHlwZS5iaXQ0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PU1hdGguY2VpbCh0aGlzLndpZHRoLzIpLGU9dCU0LHI9dGhpcy5oZWlnaHQtMTtyPj0wO3ItLSl7Zm9yKHZhciBuPXRoaXMuYm90dG9tX3VwP3I6dGhpcy5oZWlnaHQtMS1yLGk9MDtpPHQ7aSsrKXt2YXIgYT10aGlzLmRhdGF2LmdldFVpbnQ4KHRoaXMucG9zKyssITApLG89bip0aGlzLndpZHRoKjQrMippKjQscz1hPj40LHU9MTUmYSxjPXRoaXMucGFsZXR0ZVtzXTtpZih0aGlzLmRhdGFbb109Yy5ibHVlLHRoaXMuZGF0YVtvKzFdPWMuZ3JlZW4sdGhpcy5kYXRhW28rMl09Yy5yZWQsdGhpcy5kYXRhW28rM109MjU1LDIqaSsxPj10aGlzLndpZHRoKWJyZWFrO2M9dGhpcy5wYWxldHRlW3VdLHRoaXMuZGF0YVtvKzRdPWMuYmx1ZSx0aGlzLmRhdGFbbys0KzFdPWMuZ3JlZW4sdGhpcy5kYXRhW28rNCsyXT1jLnJlZCx0aGlzLmRhdGFbbys0KzNdPTI1NX0wIT09ZSYmKHRoaXMucG9zKz00LWUpfX0sc2UucHJvdG90eXBlLmJpdDg9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy53aWR0aCU0LGU9dGhpcy5oZWlnaHQtMTtlPj0wO2UtLSl7Zm9yKHZhciByPXRoaXMuYm90dG9tX3VwP2U6dGhpcy5oZWlnaHQtMS1lLG49MDtuPHRoaXMud2lkdGg7bisrKXt2YXIgaT10aGlzLmRhdGF2LmdldFVpbnQ4KHRoaXMucG9zKyssITApLGE9cip0aGlzLndpZHRoKjQrNCpuO2lmKGk8dGhpcy5wYWxldHRlLmxlbmd0aCl7dmFyIG89dGhpcy5wYWxldHRlW2ldO3RoaXMuZGF0YVthXT1vLnJlZCx0aGlzLmRhdGFbYSsxXT1vLmdyZWVuLHRoaXMuZGF0YVthKzJdPW8uYmx1ZSx0aGlzLmRhdGFbYSszXT0yNTV9ZWxzZSB0aGlzLmRhdGFbYV09MjU1LHRoaXMuZGF0YVthKzFdPTI1NSx0aGlzLmRhdGFbYSsyXT0yNTUsdGhpcy5kYXRhW2ErM109MjU1fTAhPT10JiYodGhpcy5wb3MrPTQtdCl9fSxzZS5wcm90b3R5cGUuYml0MTU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy53aWR0aCUzLGU9cGFyc2VJbnQoXCIxMTExMVwiLDIpLHI9dGhpcy5oZWlnaHQtMTtyPj0wO3ItLSl7Zm9yKHZhciBuPXRoaXMuYm90dG9tX3VwP3I6dGhpcy5oZWlnaHQtMS1yLGk9MDtpPHRoaXMud2lkdGg7aSsrKXt2YXIgYT10aGlzLmRhdGF2LmdldFVpbnQxNih0aGlzLnBvcywhMCk7dGhpcy5wb3MrPTI7dmFyIG89KGEmZSkvZSoyNTV8MCxzPShhPj41JmUpL2UqMjU1fDAsdT0oYT4+MTAmZSkvZSoyNTV8MCxjPWE+PjE1PzI1NTowLGw9bip0aGlzLndpZHRoKjQrNCppO3RoaXMuZGF0YVtsXT11LHRoaXMuZGF0YVtsKzFdPXMsdGhpcy5kYXRhW2wrMl09byx0aGlzLmRhdGFbbCszXT1jfXRoaXMucG9zKz10fX0sc2UucHJvdG90eXBlLmJpdDE2PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMud2lkdGglMyxlPXBhcnNlSW50KFwiMTExMTFcIiwyKSxyPXBhcnNlSW50KFwiMTExMTExXCIsMiksbj10aGlzLmhlaWdodC0xO24+PTA7bi0tKXtmb3IodmFyIGk9dGhpcy5ib3R0b21fdXA/bjp0aGlzLmhlaWdodC0xLW4sYT0wO2E8dGhpcy53aWR0aDthKyspe3ZhciBvPXRoaXMuZGF0YXYuZ2V0VWludDE2KHRoaXMucG9zLCEwKTt0aGlzLnBvcys9Mjt2YXIgcz0obyZlKS9lKjI1NXwwLHU9KG8+PjUmcikvcioyNTV8MCxjPShvPj4xMSkvZSoyNTV8MCxsPWkqdGhpcy53aWR0aCo0KzQqYTt0aGlzLmRhdGFbbF09Yyx0aGlzLmRhdGFbbCsxXT11LHRoaXMuZGF0YVtsKzJdPXMsdGhpcy5kYXRhW2wrM109MjU1fXRoaXMucG9zKz10fX0sc2UucHJvdG90eXBlLmJpdDI0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuaGVpZ2h0LTE7dD49MDt0LS0pe2Zvcih2YXIgZT10aGlzLmJvdHRvbV91cD90OnRoaXMuaGVpZ2h0LTEtdCxyPTA7cjx0aGlzLndpZHRoO3IrKyl7dmFyIG49dGhpcy5kYXRhdi5nZXRVaW50OCh0aGlzLnBvcysrLCEwKSxpPXRoaXMuZGF0YXYuZ2V0VWludDgodGhpcy5wb3MrKywhMCksYT10aGlzLmRhdGF2LmdldFVpbnQ4KHRoaXMucG9zKyssITApLG89ZSp0aGlzLndpZHRoKjQrNCpyO3RoaXMuZGF0YVtvXT1hLHRoaXMuZGF0YVtvKzFdPWksdGhpcy5kYXRhW28rMl09bix0aGlzLmRhdGFbbyszXT0yNTV9dGhpcy5wb3MrPXRoaXMud2lkdGglNH19LHNlLnByb3RvdHlwZS5iaXQzMj1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmhlaWdodC0xO3Q+PTA7dC0tKWZvcih2YXIgZT10aGlzLmJvdHRvbV91cD90OnRoaXMuaGVpZ2h0LTEtdCxyPTA7cjx0aGlzLndpZHRoO3IrKyl7dmFyIG49dGhpcy5kYXRhdi5nZXRVaW50OCh0aGlzLnBvcysrLCEwKSxpPXRoaXMuZGF0YXYuZ2V0VWludDgodGhpcy5wb3MrKywhMCksYT10aGlzLmRhdGF2LmdldFVpbnQ4KHRoaXMucG9zKyssITApLG89dGhpcy5kYXRhdi5nZXRVaW50OCh0aGlzLnBvcysrLCEwKSxzPWUqdGhpcy53aWR0aCo0KzQqcjt0aGlzLmRhdGFbc109YSx0aGlzLmRhdGFbcysxXT1pLHRoaXMuZGF0YVtzKzJdPW4sdGhpcy5kYXRhW3MrM109b319LHNlLnByb3RvdHlwZS5nZXREYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YX0sXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTggQXJhcyBBYmJhc2lcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2VcbiAqL1xuZnVuY3Rpb24odCl7dC5wcm9jZXNzQk1QPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW5ldyBzZShlLCExKSxvPWEud2lkdGgscz1hLmhlaWdodCx1PXtkYXRhOmEuZ2V0RGF0YSgpLHdpZHRoOm8saGVpZ2h0OnN9LGM9bmV3IG9lKDEwMCkuZW5jb2RlKHUsMTAwKTtyZXR1cm4gdC5wcm9jZXNzSlBFRy5jYWxsKHRoaXMsYyxyLG4saSl9fShFLkFQSSksdWUucHJvdG90eXBlLmdldERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhfSxcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxOSBBcmFzIEFiYmFzaVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZVxuICovXG5mdW5jdGlvbih0KXt0LnByb2Nlc3NXRUJQPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW5ldyB1ZShlKSxvPWEud2lkdGgscz1hLmhlaWdodCx1PXtkYXRhOmEuZ2V0RGF0YSgpLHdpZHRoOm8saGVpZ2h0OnN9LGM9bmV3IG9lKDEwMCkuZW5jb2RlKHUsMTAwKTtyZXR1cm4gdC5wcm9jZXNzSlBFRy5jYWxsKHRoaXMsYyxyLG4saSl9fShFLkFQSSksRS5BUEkucHJvY2Vzc1JHQkE9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj10LmRhdGEsaT1uLmxlbmd0aCxhPW5ldyBVaW50OEFycmF5KGkvNCozKSxvPW5ldyBVaW50OEFycmF5KGkvNCkscz0wLHU9MCxjPTA7YzxpO2MrPTQpe3ZhciBsPW5bY10saD1uW2MrMV0sZj1uW2MrMl0sZD1uW2MrM107YVtzKytdPWwsYVtzKytdPWgsYVtzKytdPWYsb1t1KytdPWR9dmFyIHA9dGhpcy5fX2FkZGltYWdlX18uYXJyYXlCdWZmZXJUb0JpbmFyeVN0cmluZyhhKTtyZXR1cm57YWxwaGE6dGhpcy5fX2FkZGltYWdlX18uYXJyYXlCdWZmZXJUb0JpbmFyeVN0cmluZyhvKSxkYXRhOnAsaW5kZXg6ZSxhbGlhczpyLGNvbG9yU3BhY2U6XCJEZXZpY2VSR0JcIixiaXRzUGVyQ29tcG9uZW50Ojgsd2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHR9fSxFLkFQSS5zZXRMYW5ndWFnZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dGhpcy5pbnRlcm5hbC5sYW5ndWFnZVNldHRpbmdzJiYodGhpcy5pbnRlcm5hbC5sYW5ndWFnZVNldHRpbmdzPXt9LHRoaXMuaW50ZXJuYWwubGFuZ3VhZ2VTZXR0aW5ncy5pc1N1YnNjcmliZWQ9ITEpLHZvaWQgMCE9PXthZjpcIkFmcmlrYWFuc1wiLHNxOlwiQWxiYW5pYW5cIixhcjpcIkFyYWJpYyAoU3RhbmRhcmQpXCIsXCJhci1EWlwiOlwiQXJhYmljIChBbGdlcmlhKVwiLFwiYXItQkhcIjpcIkFyYWJpYyAoQmFocmFpbilcIixcImFyLUVHXCI6XCJBcmFiaWMgKEVneXB0KVwiLFwiYXItSVFcIjpcIkFyYWJpYyAoSXJhcSlcIixcImFyLUpPXCI6XCJBcmFiaWMgKEpvcmRhbilcIixcImFyLUtXXCI6XCJBcmFiaWMgKEt1d2FpdClcIixcImFyLUxCXCI6XCJBcmFiaWMgKExlYmFub24pXCIsXCJhci1MWVwiOlwiQXJhYmljIChMaWJ5YSlcIixcImFyLU1BXCI6XCJBcmFiaWMgKE1vcm9jY28pXCIsXCJhci1PTVwiOlwiQXJhYmljIChPbWFuKVwiLFwiYXItUUFcIjpcIkFyYWJpYyAoUWF0YXIpXCIsXCJhci1TQVwiOlwiQXJhYmljIChTYXVkaSBBcmFiaWEpXCIsXCJhci1TWVwiOlwiQXJhYmljIChTeXJpYSlcIixcImFyLVROXCI6XCJBcmFiaWMgKFR1bmlzaWEpXCIsXCJhci1BRVwiOlwiQXJhYmljIChVLkEuRS4pXCIsXCJhci1ZRVwiOlwiQXJhYmljIChZZW1lbilcIixhbjpcIkFyYWdvbmVzZVwiLGh5OlwiQXJtZW5pYW5cIixhczpcIkFzc2FtZXNlXCIsYXN0OlwiQXN0dXJpYW5cIixhejpcIkF6ZXJiYWlqYW5pXCIsZXU6XCJCYXNxdWVcIixiZTpcIkJlbGFydXNpYW5cIixibjpcIkJlbmdhbGlcIixiczpcIkJvc25pYW5cIixicjpcIkJyZXRvblwiLGJnOlwiQnVsZ2FyaWFuXCIsbXk6XCJCdXJtZXNlXCIsY2E6XCJDYXRhbGFuXCIsY2g6XCJDaGFtb3Jyb1wiLGNlOlwiQ2hlY2hlblwiLHpoOlwiQ2hpbmVzZVwiLFwiemgtSEtcIjpcIkNoaW5lc2UgKEhvbmcgS29uZylcIixcInpoLUNOXCI6XCJDaGluZXNlIChQUkMpXCIsXCJ6aC1TR1wiOlwiQ2hpbmVzZSAoU2luZ2Fwb3JlKVwiLFwiemgtVFdcIjpcIkNoaW5lc2UgKFRhaXdhbilcIixjdjpcIkNodXZhc2hcIixjbzpcIkNvcnNpY2FuXCIsY3I6XCJDcmVlXCIsaHI6XCJDcm9hdGlhblwiLGNzOlwiQ3plY2hcIixkYTpcIkRhbmlzaFwiLG5sOlwiRHV0Y2ggKFN0YW5kYXJkKVwiLFwibmwtQkVcIjpcIkR1dGNoIChCZWxnaWFuKVwiLGVuOlwiRW5nbGlzaFwiLFwiZW4tQVVcIjpcIkVuZ2xpc2ggKEF1c3RyYWxpYSlcIixcImVuLUJaXCI6XCJFbmdsaXNoIChCZWxpemUpXCIsXCJlbi1DQVwiOlwiRW5nbGlzaCAoQ2FuYWRhKVwiLFwiZW4tSUVcIjpcIkVuZ2xpc2ggKElyZWxhbmQpXCIsXCJlbi1KTVwiOlwiRW5nbGlzaCAoSmFtYWljYSlcIixcImVuLU5aXCI6XCJFbmdsaXNoIChOZXcgWmVhbGFuZClcIixcImVuLVBIXCI6XCJFbmdsaXNoIChQaGlsaXBwaW5lcylcIixcImVuLVpBXCI6XCJFbmdsaXNoIChTb3V0aCBBZnJpY2EpXCIsXCJlbi1UVFwiOlwiRW5nbGlzaCAoVHJpbmlkYWQgJiBUb2JhZ28pXCIsXCJlbi1HQlwiOlwiRW5nbGlzaCAoVW5pdGVkIEtpbmdkb20pXCIsXCJlbi1VU1wiOlwiRW5nbGlzaCAoVW5pdGVkIFN0YXRlcylcIixcImVuLVpXXCI6XCJFbmdsaXNoIChaaW1iYWJ3ZSlcIixlbzpcIkVzcGVyYW50b1wiLGV0OlwiRXN0b25pYW5cIixmbzpcIkZhZXJvZXNlXCIsZmo6XCJGaWppYW5cIixmaTpcIkZpbm5pc2hcIixmcjpcIkZyZW5jaCAoU3RhbmRhcmQpXCIsXCJmci1CRVwiOlwiRnJlbmNoIChCZWxnaXVtKVwiLFwiZnItQ0FcIjpcIkZyZW5jaCAoQ2FuYWRhKVwiLFwiZnItRlJcIjpcIkZyZW5jaCAoRnJhbmNlKVwiLFwiZnItTFVcIjpcIkZyZW5jaCAoTHV4ZW1ib3VyZylcIixcImZyLU1DXCI6XCJGcmVuY2ggKE1vbmFjbylcIixcImZyLUNIXCI6XCJGcmVuY2ggKFN3aXR6ZXJsYW5kKVwiLGZ5OlwiRnJpc2lhblwiLGZ1cjpcIkZyaXVsaWFuXCIsZ2Q6XCJHYWVsaWMgKFNjb3RzKVwiLFwiZ2QtSUVcIjpcIkdhZWxpYyAoSXJpc2gpXCIsZ2w6XCJHYWxhY2lhblwiLGthOlwiR2VvcmdpYW5cIixkZTpcIkdlcm1hbiAoU3RhbmRhcmQpXCIsXCJkZS1BVFwiOlwiR2VybWFuIChBdXN0cmlhKVwiLFwiZGUtREVcIjpcIkdlcm1hbiAoR2VybWFueSlcIixcImRlLUxJXCI6XCJHZXJtYW4gKExpZWNodGVuc3RlaW4pXCIsXCJkZS1MVVwiOlwiR2VybWFuIChMdXhlbWJvdXJnKVwiLFwiZGUtQ0hcIjpcIkdlcm1hbiAoU3dpdHplcmxhbmQpXCIsZWw6XCJHcmVla1wiLGd1OlwiR3VqdXJhdGlcIixodDpcIkhhaXRpYW5cIixoZTpcIkhlYnJld1wiLGhpOlwiSGluZGlcIixodTpcIkh1bmdhcmlhblwiLGlzOlwiSWNlbGFuZGljXCIsaWQ6XCJJbmRvbmVzaWFuXCIsaXU6XCJJbnVrdGl0dXRcIixnYTpcIklyaXNoXCIsaXQ6XCJJdGFsaWFuIChTdGFuZGFyZClcIixcIml0LUNIXCI6XCJJdGFsaWFuIChTd2l0emVybGFuZClcIixqYTpcIkphcGFuZXNlXCIsa246XCJLYW5uYWRhXCIsa3M6XCJLYXNobWlyaVwiLGtrOlwiS2F6YWtoXCIsa206XCJLaG1lclwiLGt5OlwiS2lyZ2hpelwiLHRsaDpcIktsaW5nb25cIixrbzpcIktvcmVhblwiLFwia28tS1BcIjpcIktvcmVhbiAoTm9ydGggS29yZWEpXCIsXCJrby1LUlwiOlwiS29yZWFuIChTb3V0aCBLb3JlYSlcIixsYTpcIkxhdGluXCIsbHY6XCJMYXR2aWFuXCIsbHQ6XCJMaXRodWFuaWFuXCIsbGI6XCJMdXhlbWJvdXJnaXNoXCIsbWs6XCJOb3J0aCBNYWNlZG9uaWFcIixtczpcIk1hbGF5XCIsbWw6XCJNYWxheWFsYW1cIixtdDpcIk1hbHRlc2VcIixtaTpcIk1hb3JpXCIsbXI6XCJNYXJhdGhpXCIsbW86XCJNb2xkYXZpYW5cIixudjpcIk5hdmFqb1wiLG5nOlwiTmRvbmdhXCIsbmU6XCJOZXBhbGlcIixubzpcIk5vcndlZ2lhblwiLG5iOlwiTm9yd2VnaWFuIChCb2ttYWwpXCIsbm46XCJOb3J3ZWdpYW4gKE55bm9yc2spXCIsb2M6XCJPY2NpdGFuXCIsb3I6XCJPcml5YVwiLG9tOlwiT3JvbW9cIixmYTpcIlBlcnNpYW5cIixcImZhLUlSXCI6XCJQZXJzaWFuL0lyYW5cIixwbDpcIlBvbGlzaFwiLHB0OlwiUG9ydHVndWVzZVwiLFwicHQtQlJcIjpcIlBvcnR1Z3Vlc2UgKEJyYXppbClcIixwYTpcIlB1bmphYmlcIixcInBhLUlOXCI6XCJQdW5qYWJpIChJbmRpYSlcIixcInBhLVBLXCI6XCJQdW5qYWJpIChQYWtpc3RhbilcIixxdTpcIlF1ZWNodWFcIixybTpcIlJoYWV0by1Sb21hbmljXCIscm86XCJSb21hbmlhblwiLFwicm8tTU9cIjpcIlJvbWFuaWFuIChNb2xkYXZpYSlcIixydTpcIlJ1c3NpYW5cIixcInJ1LU1PXCI6XCJSdXNzaWFuIChNb2xkYXZpYSlcIixzejpcIlNhbWkgKExhcHBpc2gpXCIsc2c6XCJTYW5nb1wiLHNhOlwiU2Fuc2tyaXRcIixzYzpcIlNhcmRpbmlhblwiLHNkOlwiU2luZGhpXCIsc2k6XCJTaW5naGFsZXNlXCIsc3I6XCJTZXJiaWFuXCIsc2s6XCJTbG92YWtcIixzbDpcIlNsb3ZlbmlhblwiLHNvOlwiU29tYW5pXCIsc2I6XCJTb3JiaWFuXCIsZXM6XCJTcGFuaXNoXCIsXCJlcy1BUlwiOlwiU3BhbmlzaCAoQXJnZW50aW5hKVwiLFwiZXMtQk9cIjpcIlNwYW5pc2ggKEJvbGl2aWEpXCIsXCJlcy1DTFwiOlwiU3BhbmlzaCAoQ2hpbGUpXCIsXCJlcy1DT1wiOlwiU3BhbmlzaCAoQ29sb21iaWEpXCIsXCJlcy1DUlwiOlwiU3BhbmlzaCAoQ29zdGEgUmljYSlcIixcImVzLURPXCI6XCJTcGFuaXNoIChEb21pbmljYW4gUmVwdWJsaWMpXCIsXCJlcy1FQ1wiOlwiU3BhbmlzaCAoRWN1YWRvcilcIixcImVzLVNWXCI6XCJTcGFuaXNoIChFbCBTYWx2YWRvcilcIixcImVzLUdUXCI6XCJTcGFuaXNoIChHdWF0ZW1hbGEpXCIsXCJlcy1ITlwiOlwiU3BhbmlzaCAoSG9uZHVyYXMpXCIsXCJlcy1NWFwiOlwiU3BhbmlzaCAoTWV4aWNvKVwiLFwiZXMtTklcIjpcIlNwYW5pc2ggKE5pY2FyYWd1YSlcIixcImVzLVBBXCI6XCJTcGFuaXNoIChQYW5hbWEpXCIsXCJlcy1QWVwiOlwiU3BhbmlzaCAoUGFyYWd1YXkpXCIsXCJlcy1QRVwiOlwiU3BhbmlzaCAoUGVydSlcIixcImVzLVBSXCI6XCJTcGFuaXNoIChQdWVydG8gUmljbylcIixcImVzLUVTXCI6XCJTcGFuaXNoIChTcGFpbilcIixcImVzLVVZXCI6XCJTcGFuaXNoIChVcnVndWF5KVwiLFwiZXMtVkVcIjpcIlNwYW5pc2ggKFZlbmV6dWVsYSlcIixzeDpcIlN1dHVcIixzdzpcIlN3YWhpbGlcIixzdjpcIlN3ZWRpc2hcIixcInN2LUZJXCI6XCJTd2VkaXNoIChGaW5sYW5kKVwiLFwic3YtU1ZcIjpcIlN3ZWRpc2ggKFN3ZWRlbilcIix0YTpcIlRhbWlsXCIsdHQ6XCJUYXRhclwiLHRlOlwiVGVsdWdhXCIsdGg6XCJUaGFpXCIsdGlnOlwiVGlncmVcIix0czpcIlRzb25nYVwiLHRuOlwiVHN3YW5hXCIsdHI6XCJUdXJraXNoXCIsdGs6XCJUdXJrbWVuXCIsdWs6XCJVa3JhaW5pYW5cIixoc2I6XCJVcHBlciBTb3JiaWFuXCIsdXI6XCJVcmR1XCIsdmU6XCJWZW5kYVwiLHZpOlwiVmlldG5hbWVzZVwiLHZvOlwiVm9sYXB1a1wiLHdhOlwiV2FsbG9vblwiLGN5OlwiV2Vsc2hcIix4aDpcIlhob3NhXCIsamk6XCJZaWRkaXNoXCIsenU6XCJadWx1XCJ9W3RdJiYodGhpcy5pbnRlcm5hbC5sYW5ndWFnZVNldHRpbmdzLmxhbmd1YWdlQ29kZT10LCExPT09dGhpcy5pbnRlcm5hbC5sYW5ndWFnZVNldHRpbmdzLmlzU3Vic2NyaWJlZCYmKHRoaXMuaW50ZXJuYWwuZXZlbnRzLnN1YnNjcmliZShcInB1dENhdGFsb2dcIixmdW5jdGlvbigpe3RoaXMuaW50ZXJuYWwud3JpdGUoXCIvTGFuZyAoXCIrdGhpcy5pbnRlcm5hbC5sYW5ndWFnZVNldHRpbmdzLmxhbmd1YWdlQ29kZStcIilcIil9KSx0aGlzLmludGVybmFsLmxhbmd1YWdlU2V0dGluZ3MuaXNTdWJzY3JpYmVkPSEwKSksdGhpc30senQ9RS5BUEksVXQ9enQuZ2V0Q2hhcldpZHRoc0FycmF5PWZ1bmN0aW9uKGUscil7dmFyIG4saSxhPShyPXJ8fHt9KS5mb250fHx0aGlzLmludGVybmFsLmdldEZvbnQoKSxvPXIuZm9udFNpemV8fHRoaXMuaW50ZXJuYWwuZ2V0Rm9udFNpemUoKSxzPXIuY2hhclNwYWNlfHx0aGlzLmludGVybmFsLmdldENoYXJTcGFjZSgpLHU9ci53aWR0aHM/ci53aWR0aHM6YS5tZXRhZGF0YS5Vbmljb2RlLndpZHRocyxjPXUuZm9mP3UuZm9mOjEsbD1yLmtlcm5pbmc/ci5rZXJuaW5nOmEubWV0YWRhdGEuVW5pY29kZS5rZXJuaW5nLGg9bC5mb2Y/bC5mb2Y6MSxmPSExIT09ci5kb0tlcm5pbmcsZD0wLHA9ZS5sZW5ndGgsZz0wLG09dVswXXx8Yyx2PVtdO2ZvcihuPTA7bjxwO24rKylpPWUuY2hhckNvZGVBdChuKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLm1ldGFkYXRhLndpZHRoT2ZTdHJpbmc/di5wdXNoKChhLm1ldGFkYXRhLndpZHRoT2ZHbHlwaChhLm1ldGFkYXRhLmNoYXJhY3RlclRvR2x5cGgoaSkpK3MqKDFlMy9vKXx8MCkvMWUzKTooZD1mJiZcIm9iamVjdFwiPT09dChsW2ldKSYmIWlzTmFOKHBhcnNlSW50KGxbaV1bZ10sMTApKT9sW2ldW2ddL2g6MCx2LnB1c2goKHVbaV18fG0pL2MrZCkpLGc9aTtyZXR1cm4gdn0sSHQ9enQuZ2V0U3RyaW5nVW5pdFdpZHRoPWZ1bmN0aW9uKHQsZSl7dmFyIHI9KGU9ZXx8e30pLmZvbnRTaXplfHx0aGlzLmludGVybmFsLmdldEZvbnRTaXplKCksbj1lLmZvbnR8fHRoaXMuaW50ZXJuYWwuZ2V0Rm9udCgpLGk9ZS5jaGFyU3BhY2V8fHRoaXMuaW50ZXJuYWwuZ2V0Q2hhclNwYWNlKCk7cmV0dXJuIHp0LnByb2Nlc3NBcmFiaWMmJih0PXp0LnByb2Nlc3NBcmFiaWModCkpLFwiZnVuY3Rpb25cIj09dHlwZW9mIG4ubWV0YWRhdGEud2lkdGhPZlN0cmluZz9uLm1ldGFkYXRhLndpZHRoT2ZTdHJpbmcodCxyLGkpL3I6VXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9LDApfSxXdD1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9W10sYT0wLG89dC5sZW5ndGgscz0wO2EhPT1vJiZzK2VbYV08cjspcys9ZVthXSxhKys7aS5wdXNoKHQuc2xpY2UoMCxhKSk7dmFyIHU9YTtmb3Iocz0wO2EhPT1vOylzK2VbYV0+biYmKGkucHVzaCh0LnNsaWNlKHUsYSkpLHM9MCx1PWEpLHMrPWVbYV0sYSsrO3JldHVybiB1IT09YSYmaS5wdXNoKHQuc2xpY2UodSxhKSksaX0sVnQ9ZnVuY3Rpb24odCxlLHIpe3J8fChyPXt9KTt2YXIgbixpLGEsbyxzLHUsYyxsPVtdLGg9W2xdLGY9ci50ZXh0SW5kZW50fHwwLGQ9MCxwPTAsZz10LnNwbGl0KFwiIFwiKSxtPVV0LmFwcGx5KHRoaXMsW1wiIFwiLHJdKVswXTtpZih1PS0xPT09ci5saW5lSW5kZW50P2dbMF0ubGVuZ3RoKzI6ci5saW5lSW5kZW50fHwwKXt2YXIgdj1BcnJheSh1KS5qb2luKFwiIFwiKSxiPVtdO2cubWFwKGZ1bmN0aW9uKHQpeyh0PXQuc3BsaXQoL1xccypcXG4vKSkubGVuZ3RoPjE/Yj1iLmNvbmNhdCh0Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybihlJiZ0Lmxlbmd0aD9cIlxcblwiOlwiXCIpK3R9KSk6Yi5wdXNoKHRbMF0pfSksZz1iLHU9SHQuYXBwbHkodGhpcyxbdixyXSl9Zm9yKGE9MCxvPWcubGVuZ3RoO2E8bzthKyspe3ZhciB5PTA7aWYobj1nW2FdLHUmJlwiXFxuXCI9PW5bMF0mJihuPW4uc3Vic3RyKDEpLHk9MSksZitkKyhwPShpPVV0LmFwcGx5KHRoaXMsW24scl0pKS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSwwKSk+ZXx8eSl7aWYocD5lKXtmb3Iocz1XdC5hcHBseSh0aGlzLFtuLGksZS0oZitkKSxlXSksbC5wdXNoKHMuc2hpZnQoKSksbD1bcy5wb3AoKV07cy5sZW5ndGg7KWgucHVzaChbcy5zaGlmdCgpXSk7cD1pLnNsaWNlKG4ubGVuZ3RoLShsWzBdP2xbMF0ubGVuZ3RoOjApKS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSwwKX1lbHNlIGw9W25dO2gucHVzaChsKSxmPXArdSxkPW19ZWxzZSBsLnB1c2gobiksZis9ZCtwLGQ9bX1yZXR1cm4gYz11P2Z1bmN0aW9uKHQsZSl7cmV0dXJuKGU/djpcIlwiKSt0LmpvaW4oXCIgXCIpfTpmdW5jdGlvbih0KXtyZXR1cm4gdC5qb2luKFwiIFwiKX0saC5tYXAoYyl9LHp0LnNwbGl0VGV4dFRvU2l6ZT1mdW5jdGlvbih0LGUscil7dmFyIG4saT0ocj1yfHx7fSkuZm9udFNpemV8fHRoaXMuaW50ZXJuYWwuZ2V0Rm9udFNpemUoKSxhPWZ1bmN0aW9uKHQpe2lmKHQud2lkdGhzJiZ0Lmtlcm5pbmcpcmV0dXJue3dpZHRoczp0LndpZHRocyxrZXJuaW5nOnQua2VybmluZ307dmFyIGU9dGhpcy5pbnRlcm5hbC5nZXRGb250KHQuZm9udE5hbWUsdC5mb250U3R5bGUpLHI9XCJVbmljb2RlXCI7cmV0dXJuIGUubWV0YWRhdGFbcl0/e3dpZHRoczplLm1ldGFkYXRhW3JdLndpZHRoc3x8ezA6MX0sa2VybmluZzplLm1ldGFkYXRhW3JdLmtlcm5pbmd8fHt9fTp7Zm9udDplLm1ldGFkYXRhLGZvbnRTaXplOnRoaXMuaW50ZXJuYWwuZ2V0Rm9udFNpemUoKSxjaGFyU3BhY2U6dGhpcy5pbnRlcm5hbC5nZXRDaGFyU3BhY2UoKX19LmNhbGwodGhpcyxyKTtuPUFycmF5LmlzQXJyYXkodCk/dDpTdHJpbmcodCkuc3BsaXQoL1xccj9cXG4vKTt2YXIgbz0xKnRoaXMuaW50ZXJuYWwuc2NhbGVGYWN0b3IqZS9pO2EudGV4dEluZGVudD1yLnRleHRJbmRlbnQ/MSpyLnRleHRJbmRlbnQqdGhpcy5pbnRlcm5hbC5zY2FsZUZhY3Rvci9pOjAsYS5saW5lSW5kZW50PXIubGluZUluZGVudDt2YXIgcyx1LGM9W107Zm9yKHM9MCx1PW4ubGVuZ3RoO3M8dTtzKyspYz1jLmNvbmNhdChWdC5hcHBseSh0aGlzLFtuW3NdLG8sYV0pKTtyZXR1cm4gY30sZnVuY3Rpb24oZSl7ZS5fX2ZvbnRtZXRyaWNzX189ZS5fX2ZvbnRtZXRyaWNzX198fHt9O2Zvcih2YXIgcj1cIjAxMjM0NTY3ODlhYmNkZWZcIixuPVwia2xtbm9wcXJzdHV2d3h5elwiLGk9e30sYT17fSxvPTA7bzwxNjtvKyspaVtuW29dXT1yW29dLGFbcltvXV09bltvXTt2YXIgcz1mdW5jdGlvbih0KXtyZXR1cm5cIjB4XCIrcGFyc2VJbnQodCwxMCkudG9TdHJpbmcoMTYpfSx1PWUuX19mb250bWV0cmljc19fLmNvbXByZXNzPWZ1bmN0aW9uKGUpe3ZhciByLG4saSxvLGM9W1wie1wiXTtmb3IodmFyIGwgaW4gZSl7aWYocj1lW2xdLGlzTmFOKHBhcnNlSW50KGwsMTApKT9uPVwiJ1wiK2wrXCInXCI6KGw9cGFyc2VJbnQobCwxMCksbj0obj1zKGwpLnNsaWNlKDIpKS5zbGljZSgwLC0xKSthW24uc2xpY2UoLTEpXSksXCJudW1iZXJcIj09dHlwZW9mIHIpcjwwPyhpPXMocikuc2xpY2UoMyksbz1cIi1cIik6KGk9cyhyKS5zbGljZSgyKSxvPVwiXCIpLGk9bytpLnNsaWNlKDAsLTEpK2FbaS5zbGljZSgtMSldO2Vsc2V7aWYoXCJvYmplY3RcIiE9PXQocikpdGhyb3cgbmV3IEVycm9yKFwiRG9uJ3Qga25vdyB3aGF0IHRvIGRvIHdpdGggdmFsdWUgdHlwZSBcIit0KHIpK1wiLlwiKTtpPXUocil9Yy5wdXNoKG4raSl9cmV0dXJuIGMucHVzaChcIn1cIiksYy5qb2luKFwiXCIpfSxjPWUuX19mb250bWV0cmljc19fLnVuY29tcHJlc3M9ZnVuY3Rpb24odCl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gdW5jb21wcmVzcy5cIik7Zm9yKHZhciBlLHIsbixhLG89e30scz0xLHU9byxjPVtdLGw9XCJcIixoPVwiXCIsZj10Lmxlbmd0aC0xLGQ9MTtkPGY7ZCs9MSlcIidcIj09KGE9dFtkXSk/ZT8obj1lLmpvaW4oXCJcIiksZT12b2lkIDApOmU9W106ZT9lLnB1c2goYSk6XCJ7XCI9PWE/KGMucHVzaChbdSxuXSksdT17fSxuPXZvaWQgMCk6XCJ9XCI9PWE/KChyPWMucG9wKCkpWzBdW3JbMV1dPXUsbj12b2lkIDAsdT1yWzBdKTpcIi1cIj09YT9zPS0xOnZvaWQgMD09PW4/aS5oYXNPd25Qcm9wZXJ0eShhKT8obCs9aVthXSxuPXBhcnNlSW50KGwsMTYpKnMscz0xLGw9XCJcIik6bCs9YTppLmhhc093blByb3BlcnR5KGEpPyhoKz1pW2FdLHVbbl09cGFyc2VJbnQoaCwxNikqcyxzPTEsbj12b2lkIDAsaD1cIlwiKTpoKz1hO3JldHVybiBvfSxsPXtjb2RlUGFnZXM6W1wiV2luQW5zaUVuY29kaW5nXCJdLFdpbkFuc2lFbmNvZGluZzpjKFwiezE5bThuMjAxbjlxMjAxbzlyMjAxczlsMjAxdDltMjAxdThtMjAxdzluMjAxeDlvMjAxeThvMjAyazhxMjAybDhyMjAybTlwMjAycThwMjBhdzhrMjAzazh0MjAzdDh2MjAzdTl2MmNxOHMyMTJtOXQxNW04dzE1bjl3MmR3OXMxNms4dTE2bDl1MTdzOXoxN3g4eTE3eTl5fVwiKX0saD17VW5pY29kZTp7Q291cmllcjpsLFwiQ291cmllci1Cb2xkXCI6bCxcIkNvdXJpZXItQm9sZE9ibGlxdWVcIjpsLFwiQ291cmllci1PYmxpcXVlXCI6bCxIZWx2ZXRpY2E6bCxcIkhlbHZldGljYS1Cb2xkXCI6bCxcIkhlbHZldGljYS1Cb2xkT2JsaXF1ZVwiOmwsXCJIZWx2ZXRpY2EtT2JsaXF1ZVwiOmwsXCJUaW1lcy1Sb21hblwiOmwsXCJUaW1lcy1Cb2xkXCI6bCxcIlRpbWVzLUJvbGRJdGFsaWNcIjpsLFwiVGltZXMtSXRhbGljXCI6bH19LGY9e1VuaWNvZGU6e1wiQ291cmllci1PYmxpcXVlXCI6YyhcInsnd2lkdGhzJ3trM3cnZm9mJzZvfSdrZXJuaW5nJ3snZm9mJy02b319XCIpLFwiVGltZXMtQm9sZEl0YWxpY1wiOmMoXCJ7J3dpZHRocyd7azNvMnE0eWN4MnIyMDFuM20yMDFvNm8yMDFzMmwyMDF0MmwyMDF1MmwyMDF3M20yMDF4M20yMDF5M20yazF0MmwycjIwMm0ybjJuM20ybzNtMnA1bjIwMnE2bzJyMXcyczJsMnQybDJ1M20ydjN0MncxdDJ4MmwyeTF0MnoxdzNrM20zbDNtM20zbTNuM20zbzNtM3AzbTNxM20zcjNtM3MzbTIwM3QybDIwM3UybDN2MmwzdzN0M3gzdDN5M3QzejNtNGs1bjRsNG00bTRtNG40bTRvNHM0cDRtNHE0bTRyNHM0czR5NHQycjR1M200djRtNHczeDR4NXQ0eTRzNHo0czVrM3g1bDRzNW00bTVuM3I1bzN4NXA0czVxNG01cjV0NXM0bTV0M3g1dTN4NXYybDV3MXc1eDJsNXkzdDV6M202azJsNmwzbTZtM202bjJ3Nm8zbTZwMnc2cTJsNnIzbTZzM3I2dDF3NnUxdzZ2M202dzF3Nng0eTZ5M3I2ejNtN2szbTdsM203bTJyN24ycjdvMXc3cDNyN3EydzdyNG03czNtN3Qydzd1MnI3djJuN3cxcTd4Mm43eTN0MjAybDNtY2w0bWFsMnJhbTNtYW4zbWFvM21hcDNtYXIzbWFzMmxhdDR1YXUxdWF2M21hdzN3YXk0dWF6MmxiazJzYmwzdCdmb2YnNm9ibzJsYnAzdGJxM21icjF0YnMybGJ1MXlidjNtYnozbWNrNG0yMDJrM21jbTRtY240bWNvNG1jcDRtY3E1eWNyNG1jczRtY3Q0bWN1NG1jdjRtY3cycjJtM3JjeTJyY3oycmRsNHNkbTRzZG40c2RvNHNkcDRzZHE0c2RzNHNkdDRzZHU0c2R2NHNkdzRzZHozbWVrM21lbDNtZW0zbWVuM21lbzNtZXAzbWVxNHNlcjJ3ZXMyd2V0MndldTJ3ZXYyd2V3MXdleDF3ZXkxd2V6MXdmbDNyZm0zbWZuM21mbzNtZnAzbWZxM21mcjN0ZnMzbWZ0M3JmdTNyZnYzcmZ3M3JmejJ3MjAzazZvMjEybTZvMmR3MmwyY3EybDN0M20zdTJsMTdzM3gxOW0zbX0na2VybmluZyd7Y2x7NHF1NWt0NXF0NXJzMTdzczV0c30yMDFzezIwMXNzfTIwMXR7Y2tzNGxzY21zY25zY29zY3BzY2xzMnd1Mnl1MjAxdHN9MjAxeHsyd3UyeXV9Mmt7MjAxdHN9Mnd7NHF4NWt4NW91NXF4NXJzMTdzdTV0dX0yeHsxN3N1NXR1NW91fTJ5ezRxeDVreDVvdTVxeDVyczE3c3M1dHN9J2ZvZictNm9mbnsxN3N3NXR3NW91NXF3NXJzfTd0e2Nrc2Nsc2Ntc2Nuc2Nvc2NwczRsc30zdXsxN3N1NXR1NW9zNXFzfTN2ezE3c3U1dHU1b3M1cXN9N3B7MTdzdTV0dX1ja3s0cXU1a3Q1cXQ1cnMxN3NzNXRzfTRsezRxdTVrdDVxdDVyczE3c3M1dHN9Y217NHF1NWt0NXF0NXJzMTdzczV0c31jbns0cXU1a3Q1cXQ1cnMxN3NzNXRzfWNvezRxdTVrdDVxdDVyczE3c3M1dHN9Y3B7NHF1NWt0NXF0NXJzMTdzczV0c302bHs0cXU1b3U1cXc1cnQxN3N1NXR1fTVxe2NrdWNsdWNtdWNudWNvdWNwdTRsdX01cntja3VjbHVjbXVjbnVjb3VjcHU0bHV9N3F7Y2tzY2xzY21zY25zY29zY3BzNGxzfTZwezRxdTVvdTVxdzVydDE3c3c1dHd9ZWt7NHF1NW91NXF3NXJ0MTdzdTV0dX1lbHs0cXU1b3U1cXc1cnQxN3N1NXR1fWVtezRxdTVvdTVxdzVydDE3c3U1dHV9ZW57NHF1NW91NXF3NXJ0MTdzdTV0dX1lb3s0cXU1b3U1cXc1cnQxN3N1NXR1fWVwezRxdTVvdTVxdzVydDE3c3U1dHV9ZXN7MTdzczV0czVxczRxdX1ldHs0cXU1b3U1cXc1cnQxN3N3NXR3fWV1ezRxdTVvdTVxdzVydDE3c3M1dHN9ZXZ7MTdzczV0czVxczRxdX02ensxN3N3NXR3NW91NXF3NXJzfWZtezE3c3c1dHc1b3U1cXc1cnN9N257MjAxdHN9Zm97MTdzdzV0dzVvdTVxdzVyc31mcHsxN3N3NXR3NW91NXF3NXJzfWZxezE3c3c1dHc1b3U1cXc1cnN9N3J7Y2tzY2xzY21zY25zY29zY3BzNGxzfWZzezE3c3c1dHc1b3U1cXc1cnN9ZnR7MTdzdTV0dX1mdXsxN3N1NXR1fWZ2ezE3c3U1dHV9Znd7MTdzdTV0dX1mentja3NjbHNjbXNjbnNjb3NjcHM0bHN9fX1cIiksXCJIZWx2ZXRpY2EtQm9sZFwiOmMoXCJ7J3dpZHRocyd7azNzMnE0c2N4MXcyMDFuM3IyMDFvNm8yMDFzMXcyMDF0MXcyMDF1MXcyMDF3M20yMDF4M20yMDF5M20yazF3MmwybDIwMm0ybjJuM3IybzNyMnA1dDIwMnE2bzJyMXMyczJsMnQybDJ1MnIydjN1MncxdzJ4MmwyeTF3MnoxdzNrM3IzbDNyM20zcjNuM3IzbzNyM3AzcjNxM3IzcjNyM3MzcjIwM3QybDIwM3UybDN2MmwzdzN1M3gzdTN5M3UzejN4NGs2bDRsNHM0bTRzNG40czRvNHM0cDRtNHEzeDRyNHk0czRzNHQxdzR1M3I0djRzNHczeDR4NW40eTRzNHo0eTVrNG01bDR5NW00czVuNG01bzN4NXA0czVxNG01cjV5NXM0bTV0NG01dTN4NXYybDV3MXc1eDJsNXkzdTV6M3I2azJsNmwzcjZtM3g2bjNyNm8zeDZwM3I2cTJsNnIzeDZzM3g2dDF3NnUxdzZ2M3I2dzF3Nng1dDZ5M3g2ejN4N2szeDdsM3g3bTJyN24zcjdvMmw3cDN4N3EzcjdyNHk3czNyN3Qzcjd1M203djJyN3cxdzd4MnI3eTN1MjAybDNyY2w0c2FsMmxhbTNyYW4zcmFvM3JhcDNyYXIzcmFzMmxhdDR0YXUycGF2M3JhdzN1YXk0dGF6MmxiazJzYmwzdSdmb2YnNm9ibzJsYnAzeGJxM3JicjF3YnMybGJ1Mm9idjNyYnozeGNrNHMyMDJrM3JjbTRzY240c2NvNHNjcDRzY3E2b2NyNHNjczRtY3Q0bWN1NG1jdjRtY3cxdzJtMnpjeTF3Y3oxd2RsNHNkbTR5ZG40eWRvNHlkcDR5ZHE0eWRzNHlkdDRzZHU0c2R2NHNkdzRzZHozeGVrM3JlbDNyZW0zcmVuM3JlbzNyZXAzcmVxNXRlcjNyZXMzcmV0M3JldTNyZXYzcmV3MXdleDF3ZXkxd2V6MXdmbDN4Zm0zeGZuM3hmbzN4ZnAzeGZxM3hmcjN1ZnMzeGZ0M3hmdTN4ZnYzeGZ3M3hmejNyMjAzazZvMjEybTZvMmR3MmwyY3EybDN0M3IzdTJsMTdzNG0xOW0zcn0na2VybmluZyd7Y2x7NHFzNWt1NW90NXFzMTdzdjV0dn0yMDF0ezJ3dzR3eTJ5d30yMDF3ezJrc30yMDF4ezJ3dzR3eTJ5d30ya3syMDF0czIwMXhzfTJ3ezdxczRxdTVrdzVvczVxdzVyczE3c3U1dHU3dHNmenN9Mnh7NW93NXFzfTJ5ezdxczRxdTVrdzVvczVxdzVyczE3c3U1dHU3dHNmenN9J2ZvZictNm83cHsxN3N1NXR1NW90fWNrezRxczVrdTVvdDVxczE3c3Y1dHZ9NGx7NHFzNWt1NW90NXFzMTdzdjV0dn1jbXs0cXM1a3U1b3Q1cXMxN3N2NXR2fWNuezRxczVrdTVvdDVxczE3c3Y1dHZ9Y297NHFzNWt1NW90NXFzMTdzdjV0dn1jcHs0cXM1a3U1b3Q1cXMxN3N2NXR2fTZsezE3c3Q1dHQ1b3N9MTdzezJrd2NsdmNtdmNudmNvdmNwdjRsdjR3d2Nrdn01b3sya3VjbHRjbXRjbnRjb3RjcHQ0bHQ0d3Rja3R9NXF7MmtzY2xzY21zY25zY29zY3BzNGxzNHd2Y2tzfTVyezJrczR3c301dHsya3djbHZjbXZjbnZjb3ZjcHY0bHY0d3dja3Z9ZW97MTdzdDV0dDVvc31mdXsxN3N1NXR1NW90fTZwezE3c3M1dHN9ZWt7MTdzdDV0dDVvc31lbHsxN3N0NXR0NW9zfWVtezE3c3Q1dHQ1b3N9ZW57MTdzdDV0dDVvc302b3syMDF0c31lcHsxN3N0NXR0NW9zfWVzezE3c3M1dHN9ZXR7MTdzczV0c31ldXsxN3NzNXRzfWV2ezE3c3M1dHN9Nnp7MTdzdTV0dTVvczVxdH1mbXsxN3N1NXR1NW9zNXF0fWZuezE3c3U1dHU1b3M1cXR9Zm97MTdzdTV0dTVvczVxdH1mcHsxN3N1NXR1NW9zNXF0fWZxezE3c3U1dHU1b3M1cXR9ZnN7MTdzdTV0dTVvczVxdH1mdHsxN3N1NXR1NW90fTdtezVvc31mdnsxN3N1NXR1NW90fWZ3ezE3c3U1dHU1b3R9fX1cIiksQ291cmllcjpjKFwieyd3aWR0aHMne2szdydmb2YnNm99J2tlcm5pbmcneydmb2YnLTZvfX1cIiksXCJDb3VyaWVyLUJvbGRPYmxpcXVlXCI6YyhcInsnd2lkdGhzJ3trM3cnZm9mJzZvfSdrZXJuaW5nJ3snZm9mJy02b319XCIpLFwiVGltZXMtQm9sZFwiOmMoXCJ7J3dpZHRocyd7azNxMnE1bmN4MnIyMDFuM20yMDFvNm8yMDFzMmwyMDF0MmwyMDF1MmwyMDF3M20yMDF4M20yMDF5M20yazF0MmwybDIwMm0ybjJuM20ybzNtMnA2bzIwMnE2bzJyMXcyczJsMnQybDJ1M20ydjN0MncxdDJ4MmwyeTF0MnoxdzNrM20zbDNtM20zbTNuM20zbzNtM3AzbTNxM20zcjNtM3MzbTIwM3QybDIwM3UybDN2MmwzdzN0M3gzdDN5M3QzejNtNGs1eDRsNHM0bTRtNG40czRvNHM0cDRtNHEzeDRyNHk0czR5NHQycjR1M200djR5NHc0bTR4NXk0eTRzNHo0eTVrM3g1bDR5NW00czVuM3I1bzRtNXA0czVxNHM1cjZvNXM0czV0NHM1dTRtNXYybDV3MXc1eDJsNXkzdTV6M202azJsNmwzbTZtM3I2bjJ3Nm8zcjZwMnc2cTJsNnIzbTZzM3I2dDF3NnUybDZ2M3I2dzF3Nng1bjZ5M3I2ejNtN2szcjdsM3I3bTJ3N24ycjdvMmw3cDNyN3EzbTdyNHM3czNtN3QzbTd1Mnc3djJyN3cxcTd4MnI3eTNvMjAybDNtY2w0c2FsMmxhbTNtYW4zbWFvM21hcDNtYXIzbWFzMmxhdDR1YXUxeWF2M21hdzN0YXk0dWF6MmxiazJzYmwzdCdmb2YnNm9ibzJsYnAzcmJyMXRiczJsYnUybGJ2M21iejNtY2s0czIwMmszbWNtNHNjbjRzY280c2NwNHNjcTZvY3I0c2NzNG1jdDRtY3U0bWN2NG1jdzJyMm0zcmN5MnJjejJyZGw0c2RtNHlkbjR5ZG80eWRwNHlkcTR5ZHM0eWR0NHNkdTRzZHY0c2R3NHNkejNyZWszbWVsM21lbTNtZW4zbWVvM21lcDNtZXE0c2VyMndlczJ3ZXQyd2V1MndldjJ3ZXcxd2V4MXdleTF3ZXoxd2ZsM3JmbTNtZm4zbWZvM21mcDNtZnEzbWZyM3RmczNtZnQzcmZ1M3JmdjNyZnczcmZ6M20yMDNrNm8yMTJtNm8yZHcybDJjcTJsM3QzbTN1MmwxN3M0czE5bTNtfSdrZXJuaW5nJ3tjbHs0cXQ1a3M1b3Q1cXk1cncxN3N2NXR2fTIwMXR7Y2tzNGxzY21zY25zY29zY3BzY2xzNHd2fTJrezIwMXRzfTJ3ezRxdTVrdTdtdTVvczVxeDVydTE3c3U1dHV9Mnh7MTdzdTV0dTVvdTVxc30yeXs0cXY1a3Y3bXU1b3Q1cXo1cnUxN3N1NXR1fSdmb2YnLTZvN3R7Y2tzY2xzY21zY25zY29zY3BzNGxzfTN1ezE3c3U1dHU1b3M1cXV9M3Z7MTdzdTV0dTVvczVxdX1mdXsxN3N1NXR1NW91NXF1fTdwezE3c3U1dHU1b3U1cXV9Y2t7NHF0NWtzNW90NXF5NXJ3MTdzdjV0dn00bHs0cXQ1a3M1b3Q1cXk1cncxN3N2NXR2fWNtezRxdDVrczVvdDVxeTVydzE3c3Y1dHZ9Y257NHF0NWtzNW90NXF5NXJ3MTdzdjV0dn1jb3s0cXQ1a3M1b3Q1cXk1cncxN3N2NXR2fWNwezRxdDVrczVvdDVxeTVydzE3c3Y1dHZ9Nmx7MTdzdDV0dDVvdTVxdX0xN3N7Y2t1Y2x1Y211Y251Y291Y3B1NGx1NHd1fTVve2NrdWNsdWNtdWNudWNvdWNwdTRsdTR3dX01cXtja3pjbHpjbXpjbnpjb3pjcHo0bHo0d3V9NXJ7Y2t4Y2x4Y214Y254Y294Y3B4NGx4NHd1fTV0e2NrdWNsdWNtdWNudWNvdWNwdTRsdTR3dX03cXtja3VjbHVjbXVjbnVjb3VjcHU0bHV9NnB7MTdzdzV0dzVvdTVxdX1la3sxN3N0NXR0NXF1fWVsezE3c3Q1dHQ1b3U1cXV9ZW17MTdzdDV0dDVxdX1lbnsxN3N0NXR0NXF1fWVvezE3c3Q1dHQ1cXV9ZXB7MTdzdDV0dDVvdTVxdX1lc3sxN3NzNXRzNXF1fWV0ezE3c3c1dHc1b3U1cXV9ZXV7MTdzdzV0dzVvdTVxdX1ldnsxN3NzNXRzNXF1fTZ6ezE3c3c1dHc1b3U1cXU1cnN9Zm17MTdzdzV0dzVvdTVxdTVyc31mbnsxN3N3NXR3NW91NXF1NXJzfWZvezE3c3c1dHc1b3U1cXU1cnN9ZnB7MTdzdzV0dzVvdTVxdTVyc31mcXsxN3N3NXR3NW91NXF1NXJzfTdye2NrdGNsdGNtdGNudGNvdGNwdDRsdDVvc31mc3sxN3N3NXR3NW91NXF1NXJzfWZ0ezE3c3U1dHU1b3U1cXV9N217NW9zfWZ2ezE3c3U1dHU1b3U1cXV9Znd7MTdzdTV0dTVvdTVxdX1mentja3NjbHNjbXNjbnNjb3NjcHM0bHN9fX1cIiksU3ltYm9sOmMoXCJ7J3dpZHRocyd7azN1YXc0cjE5bTNtMmsxdDJsMmwyMDJtMnkybjNtMnA1bjIwMnE2bzNrM20yczJsMnQybDJ2M3IydzF0M20zbTJ5MXQyejF3Ymsyc2JsM3InZm9mJzZvM24zbTNvM20zcDNtM3EzbTNyM20zczNtM3QzbTN1MXczdjF3M3czcjN4M3IzeTNyM3oyd2JwM3QzbDNtNXYybDV4Mmw1ejNtMnE0eWZyM3I3djNrN3cxbzd4M2t9J2tlcm5pbmcneydmb2YnLTZvfX1cIiksSGVsdmV0aWNhOmMoXCJ7J3dpZHRocyd7azNwMnE0bWN4MXcyMDFuM3IyMDFvNm8yMDFzMXEyMDF0MXEyMDF1MXEyMDF3MmwyMDF4MmwyMDF5MmwyazF3MmwxdzIwMm0ybjJuM3IybzNyMnA1dDIwMnE2bzJyMW4yczJsMnQybDJ1MnIydjN1MncxdzJ4MmwyeTF3MnoxdzNrM3IzbDNyM20zcjNuM3IzbzNyM3AzcjNxM3IzcjNyM3MzcjIwM3QybDIwM3UybDN2MXczdzN1M3gzdTN5M3UzejNyNGs2cDRsNG00bTRtNG40czRvNHM0cDRtNHEzeDRyNHk0czRzNHQxdzR1M200djRtNHczcjR4NW40eTRzNHo0eTVrNG01bDR5NW00czVuNG01bzN4NXA0czVxNG01cjV5NXM0bTV0NG01dTN4NXYxdzV3MXc1eDF3NXkyejV6M3I2azJsNmwzcjZtM3I2bjNtNm8zcjZwM3I2cTF3NnIzcjZzM3I2dDFxNnUxcTZ2M202dzFxNng1bjZ5M3I2ejNyN2szcjdsM3I3bTJsN24zbTdvMXc3cDNyN3EzbTdyNHM3czNtN3QzbTd1M203djJsN3cxdTd4Mmw3eTN1MjAybDNyY2w0bWFsMmxhbTNyYW4zcmFvM3JhcDNyYXIzcmFzMmxhdDR0YXUycGF2M3JhdzN1YXk0dGF6MmxiazJzYmwzdSdmb2YnNm9ibzJsYnAzcmJyMXdiczJsYnUyb2J2M3JiejN4Y2s0bTIwMmszcmNtNG1jbjRtY280bWNwNG1jcTZvY3I0c2NzNG1jdDRtY3U0bWN2NG1jdzF3Mm0ybmN5MXdjejF3ZGw0c2RtNHlkbjR5ZG80eWRwNHlkcTR5ZHM0eWR0NHNkdTRzZHY0c2R3NHNkejN4ZWszcmVsM3JlbTNyZW4zcmVvM3JlcDNyZXE1dGVyM21lczNyZXQzcmV1M3JldjNyZXcxd2V4MXdleTF3ZXoxd2ZsM3JmbTNyZm4zcmZvM3JmcDNyZnEzcmZyM3VmczN4ZnQzcmZ1M3JmdjNyZnczcmZ6M20yMDNrNm8yMTJtNm8yZHcybDJjcTJsM3QzcjN1MXcxN3M0bTE5bTNyfSdrZXJuaW5nJ3s1cXs0d3Z9Y2x7NHFzNWt3NW93NXFzMTdzdjV0dn0yMDF0ezJ3dTR3MWsyeXV9MjAxeHsyd3U0d3kyeXV9MTdzezJrdGNsdWNtdWNudTRvdGNwdTRsdTR3eWNvdWNrdX0yd3s3cXM0cXo1azFtMTdzeTVvdzVxeDVyc2ZzdTV0eTd0dWZ6dX0yeHsxN3N5NXR5NW95NXFzfTJ5ezdxczRxejVrMW0xN3N5NW93NXF4NXJzZnN1NXR5N3R1Znp1fSdmb2YnLTZvN3B7MTdzdjV0djVvd31ja3s0cXM1a3c1b3c1cXMxN3N2NXR2fTRsezRxczVrdzVvdzVxczE3c3Y1dHZ9Y217NHFzNWt3NW93NXFzMTdzdjV0dn1jbns0cXM1a3c1b3c1cXMxN3N2NXR2fWNvezRxczVrdzVvdzVxczE3c3Y1dHZ9Y3B7NHFzNWt3NW93NXFzMTdzdjV0dn02bHsxN3N5NXR5NW93fWRvezE3c3Q1dHR9NHp7MTdzdDV0dH03c3tmc3R9ZG17MTdzdDV0dH1kbnsxN3N0NXR0fTVve2Nrd2Nsd2Ntd2Nud2Nvd2NwdzRsdzR3dn1kcHsxN3N0NXR0fWRxezE3c3Q1dHR9N3R7NW93fWRzezE3c3Q1dHR9NXR7Mmt0Y2x1Y211Y251NG90Y3B1NGx1NHd5Y291Y2t1fWZ1ezE3c3Y1dHY1b3d9NnB7MTdzeTV0eTVvdzVxc31la3sxN3N5NXR5NW93fWVsezE3c3k1dHk1b3d9ZW17MTdzeTV0eTVvd31lbns1dHl9ZW97MTdzeTV0eTVvd31lcHsxN3N5NXR5NW93fWVzezE3c3k1dHk1cXN9ZXR7MTdzeTV0eTVvdzVxc31ldXsxN3N5NXR5NW93NXFzfWV2ezE3c3k1dHk1b3c1cXN9Nnp7MTdzeTV0eTVvdzVxc31mbXsxN3N5NXR5NW93NXFzfWZuezE3c3k1dHk1b3c1cXN9Zm97MTdzeTV0eTVvdzVxc31mcHsxN3N5NXR5NXFzfWZxezE3c3k1dHk1b3c1cXN9N3J7NW93fWZzezE3c3k1dHk1b3c1cXN9ZnR7MTdzdjV0djVvd303bXs1b3d9ZnZ7MTdzdjV0djVvd31md3sxN3N2NXR2NW93fX19XCIpLFwiSGVsdmV0aWNhLUJvbGRPYmxpcXVlXCI6YyhcInsnd2lkdGhzJ3trM3MycTRzY3gxdzIwMW4zcjIwMW82bzIwMXMxdzIwMXQxdzIwMXUxdzIwMXczbTIwMXgzbTIwMXkzbTJrMXcybDJsMjAybTJuMm4zcjJvM3IycDV0MjAycTZvMnIxczJzMmwydDJsMnUycjJ2M3UydzF3MngybDJ5MXcyejF3M2szcjNsM3IzbTNyM24zcjNvM3IzcDNyM3EzcjNyM3IzczNyMjAzdDJsMjAzdTJsM3YybDN3M3UzeDN1M3kzdTN6M3g0azZsNGw0czRtNHM0bjRzNG80czRwNG00cTN4NHI0eTRzNHM0dDF3NHUzcjR2NHM0dzN4NHg1bjR5NHM0ejR5NWs0bTVsNHk1bTRzNW40bTVvM3g1cDRzNXE0bTVyNXk1czRtNXQ0bTV1M3g1djJsNXcxdzV4Mmw1eTN1NXozcjZrMmw2bDNyNm0zeDZuM3I2bzN4NnAzcjZxMmw2cjN4NnMzeDZ0MXc2dTF3NnYzcjZ3MXc2eDV0NnkzeDZ6M3g3azN4N2wzeDdtMnI3bjNyN28ybDdwM3g3cTNyN3I0eTdzM3I3dDNyN3UzbTd2MnI3dzF3N3gycjd5M3UyMDJsM3JjbDRzYWwybGFtM3JhbjNyYW8zcmFwM3JhcjNyYXMybGF0NHRhdTJwYXYzcmF3M3VheTR0YXoybGJrMnNibDN1J2ZvZic2b2JvMmxicDN4YnEzcmJyMXdiczJsYnUyb2J2M3JiejN4Y2s0czIwMmszcmNtNHNjbjRzY280c2NwNHNjcTZvY3I0c2NzNG1jdDRtY3U0bWN2NG1jdzF3Mm0yemN5MXdjejF3ZGw0c2RtNHlkbjR5ZG80eWRwNHlkcTR5ZHM0eWR0NHNkdTRzZHY0c2R3NHNkejN4ZWszcmVsM3JlbTNyZW4zcmVvM3JlcDNyZXE1dGVyM3JlczNyZXQzcmV1M3JldjNyZXcxd2V4MXdleTF3ZXoxd2ZsM3hmbTN4Zm4zeGZvM3hmcDN4ZnEzeGZyM3VmczN4ZnQzeGZ1M3hmdjN4ZnczeGZ6M3IyMDNrNm8yMTJtNm8yZHcybDJjcTJsM3QzcjN1MmwxN3M0bTE5bTNyfSdrZXJuaW5nJ3tjbHs0cXM1a3U1b3Q1cXMxN3N2NXR2fTIwMXR7Mnd3NHd5Mnl3fTIwMXd7MmtzfTIwMXh7Mnd3NHd5Mnl3fTJrezIwMXRzMjAxeHN9Mnd7N3FzNHF1NWt3NW9zNXF3NXJzMTdzdTV0dTd0c2Z6c30yeHs1b3c1cXN9Mnl7N3FzNHF1NWt3NW9zNXF3NXJzMTdzdTV0dTd0c2Z6c30nZm9mJy02bzdwezE3c3U1dHU1b3R9Y2t7NHFzNWt1NW90NXFzMTdzdjV0dn00bHs0cXM1a3U1b3Q1cXMxN3N2NXR2fWNtezRxczVrdTVvdDVxczE3c3Y1dHZ9Y257NHFzNWt1NW90NXFzMTdzdjV0dn1jb3s0cXM1a3U1b3Q1cXMxN3N2NXR2fWNwezRxczVrdTVvdDVxczE3c3Y1dHZ9Nmx7MTdzdDV0dDVvc30xN3N7Mmt3Y2x2Y212Y252Y292Y3B2NGx2NHd3Y2t2fTVvezJrdWNsdGNtdGNudGNvdGNwdDRsdDR3dGNrdH01cXsya3NjbHNjbXNjbnNjb3NjcHM0bHM0d3Zja3N9NXJ7MmtzNHdzfTV0ezJrd2NsdmNtdmNudmNvdmNwdjRsdjR3d2Nrdn1lb3sxN3N0NXR0NW9zfWZ1ezE3c3U1dHU1b3R9NnB7MTdzczV0c31la3sxN3N0NXR0NW9zfWVsezE3c3Q1dHQ1b3N9ZW17MTdzdDV0dDVvc31lbnsxN3N0NXR0NW9zfTZvezIwMXRzfWVwezE3c3Q1dHQ1b3N9ZXN7MTdzczV0c31ldHsxN3NzNXRzfWV1ezE3c3M1dHN9ZXZ7MTdzczV0c302ensxN3N1NXR1NW9zNXF0fWZtezE3c3U1dHU1b3M1cXR9Zm57MTdzdTV0dTVvczVxdH1mb3sxN3N1NXR1NW9zNXF0fWZwezE3c3U1dHU1b3M1cXR9ZnF7MTdzdTV0dTVvczVxdH1mc3sxN3N1NXR1NW9zNXF0fWZ0ezE3c3U1dHU1b3R9N217NW9zfWZ2ezE3c3U1dHU1b3R9Znd7MTdzdTV0dTVvdH19fVwiKSxaYXBmRGluZ2JhdHM6YyhcInsnd2lkdGhzJ3trNHUyazF3J2ZvZic2b30na2VybmluZyd7J2ZvZictNm99fVwiKSxcIkNvdXJpZXItQm9sZFwiOmMoXCJ7J3dpZHRocyd7azN3J2ZvZic2b30na2VybmluZyd7J2ZvZictNm99fVwiKSxcIlRpbWVzLUl0YWxpY1wiOmMoXCJ7J3dpZHRocyd7azNuMnE0eWN4MmwyMDFuM20yMDFvNXQyMDFzMmwyMDF0MmwyMDF1MmwyMDF3M3IyMDF4M3IyMDF5M3IyazF0MmwybDIwMm0ybjJuM20ybzNtMnA1bjIwMnE1dDJyMXAyczJsMnQybDJ1M20ydjRuMncxdDJ4MmwyeTF0MnoxdzNrM20zbDNtM20zbTNuM20zbzNtM3AzbTNxM20zcjNtM3MzbTIwM3QybDIwM3UybDN2MmwzdzRuM3g0bjN5NG4zejNtNGs1dzRsM3g0bTN4NG40bTRvNHM0cDN4NHEzeDRyNHM0czRzNHQybDR1Mnc0djRtNHczcjR4NW40eTRtNHo0czVrM3g1bDRzNW0zeDVuM201bzNyNXA0czVxM3g1cjVuNXMzeDV0M3I1dTNyNXYycjV3MXc1eDJyNXkydTV6M202azJsNmwzbTZtM202bjJ3Nm8zbTZwMnc2cTF3NnIzbTZzM202dDF3NnUxdzZ2Mnc2dzF3Nng0czZ5M202ejNtN2szbTdsM203bTJyN24ycjdvMXc3cDNtN3EydzdyNG03czJ3N3Qydzd1MnI3djJzN3cxdjd4MnM3eTNxMjAybDNtY2wzeGFsMnJhbTNtYW4zbWFvM21hcDNtYXIzbWFzMmxhdDR3YXUxdmF2M21hdzRuYXk0d2F6MmxiazJzYmw0bidmb2YnNm9ibzJsYnAzbWJxM29icjF0YnMybGJ1MXpidjNtYnozbWNrM3gyMDJrM21jbTN4Y24zeGNvM3hjcDN4Y3E1dGNyNG1jczN4Y3QzeGN1M3hjdjN4Y3cybDJtMnVjeTJsY3oybGRsNG1kbTRzZG40c2RvNHNkcDRzZHE0c2RzNHNkdDRzZHU0c2R2NHNkdzRzZHozbWVrM21lbDNtZW0zbWVuM21lbzNtZXAzbWVxNG1lcjJ3ZXMyd2V0MndldTJ3ZXYyd2V3MXdleDF3ZXkxd2V6MXdmbDNtZm0zbWZuM21mbzNtZnAzbWZxM21mcjRuZnMzbWZ0M21mdTNtZnYzbWZ3M21mejJ3MjAzazZvMjEybTZtMmR3MmwyY3EybDN0M20zdTJsMTdzM3IxOW0zbX0na2VybmluZyd7Y2x7NWt0NHF3fTIwMXN7MjAxc3d9MjAxdHsyMDF0dzJ3eTJ5eTZxLXR9MjAxeHsyd3kyeXl9Mmt7MjAxdHd9Mnd7N3FzNHF5N3JzNWt5N213NW9zNXF4NXJ1MTdzdTV0dX0yeHsxN3NzNXRzNW9zfTJ5ezdxczRxeTdyczVreTdtdzVvczVxeDVydTE3c3U1dHV9J2ZvZictNm82dHsxN3NzNXRzNXFzfTd0ezVvc30zdns1cXN9N3B7MTdzdTV0dTVxc31ja3s1a3Q0cXd9NGx7NWt0NHF3fWNtezVrdDRxd31jbns1a3Q0cXd9Y297NWt0NHF3fWNwezVrdDRxd302bHs0cXM1a3M1b3U1cXc1cnUxN3N1NXR1fTE3c3sya3N9NXF7Y2t2Y2x2Y212Y252Y292Y3B2NGx2fTVye2NrdWNsdWNtdWNudWNvdWNwdTRsdX01dHsya3N9NnB7NHFzNWtzNW91NXF3NXJ1MTdzdTV0dX1la3s0cXM1a3M1b3U1cXc1cnUxN3N1NXR1fWVsezRxczVrczVvdTVxdzVydTE3c3U1dHV9ZW17NHFzNWtzNW91NXF3NXJ1MTdzdTV0dX1lbns0cXM1a3M1b3U1cXc1cnUxN3N1NXR1fWVvezRxczVrczVvdTVxdzVydTE3c3U1dHV9ZXB7NHFzNWtzNW91NXF3NXJ1MTdzdTV0dX1lc3s1a3M1cXM0cXN9ZXR7NHFzNWtzNW91NXF3NXJ1MTdzdTV0dX1ldXs0cXM1a3M1cXc1cnUxN3N1NXR1fWV2ezVrczVxczRxc31leHsxN3NzNXRzNXFzfTZ6ezRxdjVrczVvdTVxdzVydTE3c3U1dHV9Zm17NHF2NWtzNW91NXF3NXJ1MTdzdTV0dX1mbns0cXY1a3M1b3U1cXc1cnUxN3N1NXR1fWZvezRxdjVrczVvdTVxdzVydTE3c3U1dHV9ZnB7NHF2NWtzNW91NXF3NXJ1MTdzdTV0dX1mcXs0cXY1a3M1b3U1cXc1cnUxN3N1NXR1fTdyezVvc31mc3s0cXY1a3M1b3U1cXc1cnUxN3N1NXR1fWZ0ezE3c3U1dHU1cXN9ZnV7MTdzdTV0dTVxc31mdnsxN3N1NXR1NXFzfWZ3ezE3c3U1dHU1cXN9fX1cIiksXCJUaW1lcy1Sb21hblwiOmMoXCJ7J3dpZHRocyd7azNuMnE0eWN4MmwyMDFuM20yMDFvNm8yMDFzMmwyMDF0MmwyMDF1MmwyMDF3MncyMDF4MncyMDF5MncyazF0MmwybDIwMm0ybjJuM20ybzNtMnA1bjIwMnE2bzJyMW0yczJsMnQybDJ1M20ydjNzMncxdDJ4MmwyeTF0MnoxdzNrM20zbDNtM20zbTNuM20zbzNtM3AzbTNxM20zcjNtM3MzbTIwM3QybDIwM3UybDN2MXczdzNzM3gzczN5M3MzejJ3NGs1dzRsNHM0bTRtNG40bTRvNHM0cDN4NHEzcjRyNHM0czRzNHQybDR1MnI0djRzNHczeDR4NXQ0eTRzNHo0czVrM3I1bDRzNW00bTVuM3I1bzN4NXA0czVxNHM1cjV5NXM0czV0NHM1dTN4NXYybDV3MXc1eDJsNXkyejV6M202azJsNmwydzZtM202bjJ3Nm8zbTZwMnc2cTJsNnIzbTZzM202dDF3NnUxdzZ2M202dzF3Nng0eTZ5M202ejNtN2szbTdsM203bTJsN24ycjdvMXc3cDNtN3EzbTdyNHM3czNtN3QzbTd1Mnc3djNrN3cxbzd4M2s3eTNxMjAybDNtY2w0c2FsMmxhbTNtYW4zbWFvM21hcDNtYXIzbWFzMmxhdDR3YXUxdmF2M21hdzNzYXk0d2F6MmxiazJzYmwzcydmb2YnNm9ibzJsYnAzbWJxMnhicjF0YnMybGJ1MXpidjNtYnoyd2NrNHMyMDJrM21jbTRzY240c2NvNHNjcDRzY3E1dGNyNG1jczN4Y3QzeGN1M3hjdjN4Y3cybDJtMnRjeTJsY3oybGRsNHNkbTRzZG40c2RvNHNkcDRzZHE0c2RzNHNkdDRzZHU0c2R2NHNkdzRzZHozbWVrMndlbDJ3ZW0yd2VuMndlbzJ3ZXAyd2VxNG1lcjJ3ZXMyd2V0MndldTJ3ZXYyd2V3MXdleDF3ZXkxd2V6MXdmbDNtZm0zbWZuM21mbzNtZnAzbWZxM21mcjNzZnMzbWZ0M21mdTNtZnYzbWZ3M21mejNtMjAzazZvMjEybTZtMmR3MmwyY3EybDN0M20zdTF3MTdzNHMxOW0zbX0na2VybmluZyd7Y2x7NHFzNWt1MTdzdzVvdTVxeTVydzIwMXNzNXR3MjAxd3N9MjAxc3syMDFzc30yMDF0e2NrdzRsd2Ntd2Nud2Nvd2Nwd2NsdzR3dTIwMXRzfTJrezIwMXRzfTJ3ezRxczVrdzVvczVxeDVydTE3c3g1dHh9Mnh7MTdzdzV0dzVvdTVxdX0yeXs0cXM1a3c1b3M1cXg1cnUxN3N4NXR4fSdmb2YnLTZvN3R7Y2t1Y2x1Y211Y251Y291Y3B1NGx1NW9zNXJzfTN1ezE3c3U1dHU1cXN9M3Z7MTdzdTV0dTVxc303cHsxN3N3NXR3NXFzfWNrezRxczVrdTE3c3c1b3U1cXk1cncyMDFzczV0dzIwMXdzfTRsezRxczVrdTE3c3c1b3U1cXk1cncyMDFzczV0dzIwMXdzfWNtezRxczVrdTE3c3c1b3U1cXk1cncyMDFzczV0dzIwMXdzfWNuezRxczVrdTE3c3c1b3U1cXk1cncyMDFzczV0dzIwMXdzfWNvezRxczVrdTE3c3c1b3U1cXk1cncyMDFzczV0dzIwMXdzfWNwezRxczVrdTE3c3c1b3U1cXk1cncyMDFzczV0dzIwMXdzfTZsezE3c3U1dHU1b3M1cXc1cnN9MTdzezJrdGNsdmNtdmNudmNvdmNwdjRsdjR3dWNrdn01b3tja3djbHdjbXdjbndjb3djcHc0bHc0d3V9NXF7Y2t5Y2x5Y215Y255Y295Y3B5NGx5NHd1NW1zfTVye2NrdGNsdGNtdGNudGNvdGNwdDRsdDR3c301dHsya3RjbHZjbXZjbnZjb3ZjcHY0bHY0d3Vja3Z9N3F7Y2tzY2xzY21zY25zY29zY3BzNGxzfTZwezE3c3U1dHU1cXc1cnN9ZWt7NXFzNXJzfWVsezE3c3U1dHU1b3M1cXc1cnN9ZW17MTdzdTV0dTVvczVxczVyc31lbnsxN3N1NXFzNXJzfWVvezVxczVyc31lcHsxN3N1NXR1NW9zNXF3NXJzfWVzezVxc31ldHsxN3N1NXR1NXF3NXJzfWV1ezE3c3U1dHU1cXM1cnN9ZXZ7NXFzfTZ6ezE3c3Y1dHY1b3M1cXg1cnN9Zm17NW9zNXF0NXJzfWZuezE3c3Y1dHY1b3M1cXg1cnN9Zm97MTdzdjV0djVvczVxeDVyc31mcHs1b3M1cXQ1cnN9ZnF7NW9zNXF0NXJzfTdye2NrdWNsdWNtdWNudWNvdWNwdTRsdTVvc31mc3sxN3N2NXR2NW9zNXF4NXJzfWZ0ezE3c3M1dHM1cXN9ZnV7MTdzdzV0dzVxc31mdnsxN3N3NXR3NXFzfWZ3ezE3c3M1dHM1cXN9Znp7Y2t1Y2x1Y211Y251Y291Y3B1NGx1NW9zNXJzfX19XCIpLFwiSGVsdmV0aWNhLU9ibGlxdWVcIjpjKFwieyd3aWR0aHMne2szcDJxNG1jeDF3MjAxbjNyMjAxbzZvMjAxczFxMjAxdDFxMjAxdTFxMjAxdzJsMjAxeDJsMjAxeTJsMmsxdzJsMXcyMDJtMm4ybjNyMm8zcjJwNXQyMDJxNm8ycjFuMnMybDJ0MmwydTJyMnYzdTJ3MXcyeDJsMnkxdzJ6MXczazNyM2wzcjNtM3IzbjNyM28zcjNwM3IzcTNyM3IzcjNzM3IyMDN0MmwyMDN1MmwzdjF3M3czdTN4M3UzeTN1M3ozcjRrNnA0bDRtNG00bTRuNHM0bzRzNHA0bTRxM3g0cjR5NHM0czR0MXc0dTNtNHY0bTR3M3I0eDVuNHk0czR6NHk1azRtNWw0eTVtNHM1bjRtNW8zeDVwNHM1cTRtNXI1eTVzNG01dDRtNXUzeDV2MXc1dzF3NXgxdzV5Mno1ejNyNmsybDZsM3I2bTNyNm4zbTZvM3I2cDNyNnExdzZyM3I2czNyNnQxcTZ1MXE2djNtNncxcTZ4NW42eTNyNnozcjdrM3I3bDNyN20ybDduM203bzF3N3AzcjdxM203cjRzN3MzbTd0M203dTNtN3YybDd3MXU3eDJsN3kzdTIwMmwzcmNsNG1hbDJsYW0zcmFuM3JhbzNyYXAzcmFyM3JhczJsYXQ0dGF1MnBhdjNyYXczdWF5NHRhejJsYmsyc2JsM3UnZm9mJzZvYm8ybGJwM3JicjF3YnMybGJ1Mm9idjNyYnozeGNrNG0yMDJrM3JjbTRtY240bWNvNG1jcDRtY3E2b2NyNHNjczRtY3Q0bWN1NG1jdjRtY3cxdzJtMm5jeTF3Y3oxd2RsNHNkbTR5ZG40eWRvNHlkcDR5ZHE0eWRzNHlkdDRzZHU0c2R2NHNkdzRzZHozeGVrM3JlbDNyZW0zcmVuM3JlbzNyZXAzcmVxNXRlcjNtZXMzcmV0M3JldTNyZXYzcmV3MXdleDF3ZXkxd2V6MXdmbDNyZm0zcmZuM3JmbzNyZnAzcmZxM3JmcjN1ZnMzeGZ0M3JmdTNyZnYzcmZ3M3JmejNtMjAzazZvMjEybTZvMmR3MmwyY3EybDN0M3IzdTF3MTdzNG0xOW0zcn0na2VybmluZyd7NXF7NHd2fWNsezRxczVrdzVvdzVxczE3c3Y1dHZ9MjAxdHsyd3U0dzFrMnl1fTIwMXh7Mnd1NHd5Mnl1fTE3c3sya3RjbHVjbXVjbnU0b3RjcHU0bHU0d3ljb3Vja3V9Mnd7N3FzNHF6NWsxbTE3c3k1b3c1cXg1cnNmc3U1dHk3dHVmenV9Mnh7MTdzeTV0eTVveTVxc30yeXs3cXM0cXo1azFtMTdzeTVvdzVxeDVyc2ZzdTV0eTd0dWZ6dX0nZm9mJy02bzdwezE3c3Y1dHY1b3d9Y2t7NHFzNWt3NW93NXFzMTdzdjV0dn00bHs0cXM1a3c1b3c1cXMxN3N2NXR2fWNtezRxczVrdzVvdzVxczE3c3Y1dHZ9Y257NHFzNWt3NW93NXFzMTdzdjV0dn1jb3s0cXM1a3c1b3c1cXMxN3N2NXR2fWNwezRxczVrdzVvdzVxczE3c3Y1dHZ9Nmx7MTdzeTV0eTVvd31kb3sxN3N0NXR0fTR6ezE3c3Q1dHR9N3N7ZnN0fWRtezE3c3Q1dHR9ZG57MTdzdDV0dH01b3tja3djbHdjbXdjbndjb3djcHc0bHc0d3Z9ZHB7MTdzdDV0dH1kcXsxN3N0NXR0fTd0ezVvd31kc3sxN3N0NXR0fTV0ezJrdGNsdWNtdWNudTRvdGNwdTRsdTR3eWNvdWNrdX1mdXsxN3N2NXR2NW93fTZwezE3c3k1dHk1b3c1cXN9ZWt7MTdzeTV0eTVvd31lbHsxN3N5NXR5NW93fWVtezE3c3k1dHk1b3d9ZW57NXR5fWVvezE3c3k1dHk1b3d9ZXB7MTdzeTV0eTVvd31lc3sxN3N5NXR5NXFzfWV0ezE3c3k1dHk1b3c1cXN9ZXV7MTdzeTV0eTVvdzVxc31ldnsxN3N5NXR5NW93NXFzfTZ6ezE3c3k1dHk1b3c1cXN9Zm17MTdzeTV0eTVvdzVxc31mbnsxN3N5NXR5NW93NXFzfWZvezE3c3k1dHk1b3c1cXN9ZnB7MTdzeTV0eTVxc31mcXsxN3N5NXR5NW93NXFzfTdyezVvd31mc3sxN3N5NXR5NW93NXFzfWZ0ezE3c3Y1dHY1b3d9N217NW93fWZ2ezE3c3Y1dHY1b3d9Znd7MTdzdjV0djVvd319fVwiKX19O2UuZXZlbnRzLnB1c2goW1wiYWRkRm9udFwiLGZ1bmN0aW9uKHQpe3ZhciBlPXQuZm9udCxyPWYuVW5pY29kZVtlLnBvc3RTY3JpcHROYW1lXTtyJiYoZS5tZXRhZGF0YS5Vbmljb2RlPXt9LGUubWV0YWRhdGEuVW5pY29kZS53aWR0aHM9ci53aWR0aHMsZS5tZXRhZGF0YS5Vbmljb2RlLmtlcm5pbmc9ci5rZXJuaW5nKTt2YXIgbj1oLlVuaWNvZGVbZS5wb3N0U2NyaXB0TmFtZV07biYmKGUubWV0YWRhdGEuVW5pY29kZS5lbmNvZGluZz1uLGUuZW5jb2Rpbmc9bi5jb2RlUGFnZXNbMF0pfV0pfShFLkFQSSksXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2VcbiAqL1xuZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IFVpbnQ4QXJyYXkoZSksbj0wO248ZTtuKyspcltuXT10LmNoYXJDb2RlQXQobik7cmV0dXJuIHJ9O3QuQVBJLmV2ZW50cy5wdXNoKFtcImFkZEZvbnRcIixmdW5jdGlvbihyKXt2YXIgbj12b2lkIDAsaT1yLmZvbnQsYT1yLmluc3RhbmNlO2lmKCFpLmlzU3RhbmRhcmRGb250KXtpZih2b2lkIDA9PT1hKXRocm93IG5ldyBFcnJvcihcIkZvbnQgZG9lcyBub3QgZXhpc3QgaW4gdkZTLCBpbXBvcnQgZm9udHMgb3IgcmVtb3ZlIGRlY2xhcmF0aW9uIGRvYy5hZGRGb250KCdcIitpLnBvc3RTY3JpcHROYW1lK1wiJykuXCIpO2lmKFwic3RyaW5nXCIhPXR5cGVvZihuPSExPT09YS5leGlzdHNGaWxlSW5WRlMoaS5wb3N0U2NyaXB0TmFtZSk/YS5sb2FkRmlsZShpLnBvc3RTY3JpcHROYW1lKTphLmdldEZpbGVGcm9tVkZTKGkucG9zdFNjcmlwdE5hbWUpKSl0aHJvdyBuZXcgRXJyb3IoXCJGb250IGlzIG5vdCBzdG9yZWQgYXMgc3RyaW5nLWRhdGEgaW4gdkZTLCBpbXBvcnQgZm9udHMgb3IgcmVtb3ZlIGRlY2xhcmF0aW9uIGRvYy5hZGRGb250KCdcIitpLnBvc3RTY3JpcHROYW1lK1wiJykuXCIpOyFmdW5jdGlvbihyLG4pe249L15cXHgwMFxceDAxXFx4MDBcXHgwMC8udGVzdChuKT9lKG4pOmUoZihuKSksci5tZXRhZGF0YT10LkFQSS5UVEZGb250Lm9wZW4obiksci5tZXRhZGF0YS5Vbmljb2RlPXIubWV0YWRhdGEuVW5pY29kZXx8e2VuY29kaW5nOnt9LGtlcm5pbmc6e30sd2lkdGhzOltdfSxyLm1ldGFkYXRhLmdseUlkc1VzZWQ9WzBdfShpLG4pfX1dKX0oRSksRS5BUEkuYWRkU3ZnQXNJbWFnZT1mdW5jdGlvbih0LGUscixuLGEscyx1LGMpe2lmKGlzTmFOKGUpfHxpc05hTihyKSl0aHJvdyBvLmVycm9yKFwianNQREYuYWRkU3ZnQXNJbWFnZTogSW52YWxpZCBjb29yZGluYXRlc1wiLGFyZ3VtZW50cyksbmV3IEVycm9yKFwiSW52YWxpZCBjb29yZGluYXRlcyBwYXNzZWQgdG8ganNQREYuYWRkU3ZnQXNJbWFnZVwiKTtpZihpc05hTihuKXx8aXNOYU4oYSkpdGhyb3cgby5lcnJvcihcImpzUERGLmFkZFN2Z0FzSW1hZ2U6IEludmFsaWQgbWVhc3VyZW1lbnRzXCIsYXJndW1lbnRzKSxuZXcgRXJyb3IoXCJJbnZhbGlkIG1lYXN1cmVtZW50cyAod2lkdGggYW5kL29yIGhlaWdodCkgcGFzc2VkIHRvIGpzUERGLmFkZFN2Z0FzSW1hZ2VcIik7dmFyIGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtsLndpZHRoPW4sbC5oZWlnaHQ9YTt2YXIgaD1sLmdldENvbnRleHQoXCIyZFwiKTtoLmZpbGxTdHlsZT1cIiNmZmZcIixoLmZpbGxSZWN0KDAsMCxsLndpZHRoLGwuaGVpZ2h0KTt2YXIgZj17aWdub3JlTW91c2U6ITAsaWdub3JlQW5pbWF0aW9uOiEwLGlnbm9yZURpbWVuc2lvbnM6ITB9LGQ9dGhpcztyZXR1cm4oaS5jYW52Zz9Qcm9taXNlLnJlc29sdmUoaS5jYW52Zyk6aW1wb3J0KFwiY2FudmdcIikpLmNhdGNoKGZ1bmN0aW9uKHQpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJDb3VsZCBub3QgbG9hZCBjYW52ZzogXCIrdCkpfSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gdC5kZWZhdWx0P3QuZGVmYXVsdDp0fSkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gZS5mcm9tU3RyaW5nKGgsdCxmKX0sZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQ291bGQgbm90IGxvYWQgY2FudmcuXCIpKX0pLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIHQucmVuZGVyKGYpfSkudGhlbihmdW5jdGlvbigpe2QuYWRkSW1hZ2UobC50b0RhdGFVUkwoXCJpbWFnZS9qcGVnXCIsMSksZSxyLG4sYSx1LGMpfSl9LEUuQVBJLnB1dFRvdGFsUGFnZXM9ZnVuY3Rpb24odCl7dmFyIGUscj0wO3BhcnNlSW50KHRoaXMuaW50ZXJuYWwuZ2V0Rm9udCgpLmlkLnN1YnN0cigxKSwxMCk8MTU/KGU9bmV3IFJlZ0V4cCh0LFwiZ1wiKSxyPXRoaXMuaW50ZXJuYWwuZ2V0TnVtYmVyT2ZQYWdlcygpKTooZT1uZXcgUmVnRXhwKHRoaXMucGRmRXNjYXBlMTYodCx0aGlzLmludGVybmFsLmdldEZvbnQoKSksXCJnXCIpLHI9dGhpcy5wZGZFc2NhcGUxNih0aGlzLmludGVybmFsLmdldE51bWJlck9mUGFnZXMoKStcIlwiLHRoaXMuaW50ZXJuYWwuZ2V0Rm9udCgpKSk7Zm9yKHZhciBuPTE7bjw9dGhpcy5pbnRlcm5hbC5nZXROdW1iZXJPZlBhZ2VzKCk7bisrKWZvcih2YXIgaT0wO2k8dGhpcy5pbnRlcm5hbC5wYWdlc1tuXS5sZW5ndGg7aSsrKXRoaXMuaW50ZXJuYWwucGFnZXNbbl1baV09dGhpcy5pbnRlcm5hbC5wYWdlc1tuXVtpXS5yZXBsYWNlKGUscik7cmV0dXJuIHRoaXN9LEUuQVBJLnZpZXdlclByZWZlcmVuY2VzPWZ1bmN0aW9uKGUscil7dmFyIG47ZT1lfHx7fSxyPXJ8fCExO3ZhciBpLGEsbyxzPXtIaWRlVG9vbGJhcjp7ZGVmYXVsdFZhbHVlOiExLHZhbHVlOiExLHR5cGU6XCJib29sZWFuXCIsZXhwbGljaXRTZXQ6ITEsdmFsdWVTZXQ6WyEwLCExXSxwZGZWZXJzaW9uOjEuM30sSGlkZU1lbnViYXI6e2RlZmF1bHRWYWx1ZTohMSx2YWx1ZTohMSx0eXBlOlwiYm9vbGVhblwiLGV4cGxpY2l0U2V0OiExLHZhbHVlU2V0OlshMCwhMV0scGRmVmVyc2lvbjoxLjN9LEhpZGVXaW5kb3dVSTp7ZGVmYXVsdFZhbHVlOiExLHZhbHVlOiExLHR5cGU6XCJib29sZWFuXCIsZXhwbGljaXRTZXQ6ITEsdmFsdWVTZXQ6WyEwLCExXSxwZGZWZXJzaW9uOjEuM30sRml0V2luZG93OntkZWZhdWx0VmFsdWU6ITEsdmFsdWU6ITEsdHlwZTpcImJvb2xlYW5cIixleHBsaWNpdFNldDohMSx2YWx1ZVNldDpbITAsITFdLHBkZlZlcnNpb246MS4zfSxDZW50ZXJXaW5kb3c6e2RlZmF1bHRWYWx1ZTohMSx2YWx1ZTohMSx0eXBlOlwiYm9vbGVhblwiLGV4cGxpY2l0U2V0OiExLHZhbHVlU2V0OlshMCwhMV0scGRmVmVyc2lvbjoxLjN9LERpc3BsYXlEb2NUaXRsZTp7ZGVmYXVsdFZhbHVlOiExLHZhbHVlOiExLHR5cGU6XCJib29sZWFuXCIsZXhwbGljaXRTZXQ6ITEsdmFsdWVTZXQ6WyEwLCExXSxwZGZWZXJzaW9uOjEuNH0sTm9uRnVsbFNjcmVlblBhZ2VNb2RlOntkZWZhdWx0VmFsdWU6XCJVc2VOb25lXCIsdmFsdWU6XCJVc2VOb25lXCIsdHlwZTpcIm5hbWVcIixleHBsaWNpdFNldDohMSx2YWx1ZVNldDpbXCJVc2VOb25lXCIsXCJVc2VPdXRsaW5lc1wiLFwiVXNlVGh1bWJzXCIsXCJVc2VPQ1wiXSxwZGZWZXJzaW9uOjEuM30sRGlyZWN0aW9uOntkZWZhdWx0VmFsdWU6XCJMMlJcIix2YWx1ZTpcIkwyUlwiLHR5cGU6XCJuYW1lXCIsZXhwbGljaXRTZXQ6ITEsdmFsdWVTZXQ6W1wiTDJSXCIsXCJSMkxcIl0scGRmVmVyc2lvbjoxLjN9LFZpZXdBcmVhOntkZWZhdWx0VmFsdWU6XCJDcm9wQm94XCIsdmFsdWU6XCJDcm9wQm94XCIsdHlwZTpcIm5hbWVcIixleHBsaWNpdFNldDohMSx2YWx1ZVNldDpbXCJNZWRpYUJveFwiLFwiQ3JvcEJveFwiLFwiVHJpbUJveFwiLFwiQmxlZWRCb3hcIixcIkFydEJveFwiXSxwZGZWZXJzaW9uOjEuNH0sVmlld0NsaXA6e2RlZmF1bHRWYWx1ZTpcIkNyb3BCb3hcIix2YWx1ZTpcIkNyb3BCb3hcIix0eXBlOlwibmFtZVwiLGV4cGxpY2l0U2V0OiExLHZhbHVlU2V0OltcIk1lZGlhQm94XCIsXCJDcm9wQm94XCIsXCJUcmltQm94XCIsXCJCbGVlZEJveFwiLFwiQXJ0Qm94XCJdLHBkZlZlcnNpb246MS40fSxQcmludEFyZWE6e2RlZmF1bHRWYWx1ZTpcIkNyb3BCb3hcIix2YWx1ZTpcIkNyb3BCb3hcIix0eXBlOlwibmFtZVwiLGV4cGxpY2l0U2V0OiExLHZhbHVlU2V0OltcIk1lZGlhQm94XCIsXCJDcm9wQm94XCIsXCJUcmltQm94XCIsXCJCbGVlZEJveFwiLFwiQXJ0Qm94XCJdLHBkZlZlcnNpb246MS40fSxQcmludENsaXA6e2RlZmF1bHRWYWx1ZTpcIkNyb3BCb3hcIix2YWx1ZTpcIkNyb3BCb3hcIix0eXBlOlwibmFtZVwiLGV4cGxpY2l0U2V0OiExLHZhbHVlU2V0OltcIk1lZGlhQm94XCIsXCJDcm9wQm94XCIsXCJUcmltQm94XCIsXCJCbGVlZEJveFwiLFwiQXJ0Qm94XCJdLHBkZlZlcnNpb246MS40fSxQcmludFNjYWxpbmc6e2RlZmF1bHRWYWx1ZTpcIkFwcERlZmF1bHRcIix2YWx1ZTpcIkFwcERlZmF1bHRcIix0eXBlOlwibmFtZVwiLGV4cGxpY2l0U2V0OiExLHZhbHVlU2V0OltcIkFwcERlZmF1bHRcIixcIk5vbmVcIl0scGRmVmVyc2lvbjoxLjZ9LER1cGxleDp7ZGVmYXVsdFZhbHVlOlwiXCIsdmFsdWU6XCJub25lXCIsdHlwZTpcIm5hbWVcIixleHBsaWNpdFNldDohMSx2YWx1ZVNldDpbXCJTaW1wbGV4XCIsXCJEdXBsZXhGbGlwU2hvcnRFZGdlXCIsXCJEdXBsZXhGbGlwTG9uZ0VkZ2VcIixcIm5vbmVcIl0scGRmVmVyc2lvbjoxLjd9LFBpY2tUcmF5QnlQREZTaXplOntkZWZhdWx0VmFsdWU6ITEsdmFsdWU6ITEsdHlwZTpcImJvb2xlYW5cIixleHBsaWNpdFNldDohMSx2YWx1ZVNldDpbITAsITFdLHBkZlZlcnNpb246MS43fSxQcmludFBhZ2VSYW5nZTp7ZGVmYXVsdFZhbHVlOlwiXCIsdmFsdWU6XCJcIix0eXBlOlwiYXJyYXlcIixleHBsaWNpdFNldDohMSx2YWx1ZVNldDpudWxsLHBkZlZlcnNpb246MS43fSxOdW1Db3BpZXM6e2RlZmF1bHRWYWx1ZToxLHZhbHVlOjEsdHlwZTpcImludGVnZXJcIixleHBsaWNpdFNldDohMSx2YWx1ZVNldDpudWxsLHBkZlZlcnNpb246MS43fX0sdT1PYmplY3Qua2V5cyhzKSxjPVtdLGw9MCxoPTAsZj0wO2Z1bmN0aW9uIGQodCxlKXt2YXIgcixuPSExO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKz0xKXRbcl09PT1lJiYobj0hMCk7cmV0dXJuIG59aWYodm9pZCAwPT09dGhpcy5pbnRlcm5hbC52aWV3ZXJwcmVmZXJlbmNlcyYmKHRoaXMuaW50ZXJuYWwudmlld2VycHJlZmVyZW5jZXM9e30sdGhpcy5pbnRlcm5hbC52aWV3ZXJwcmVmZXJlbmNlcy5jb25maWd1cmF0aW9uPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocykpLHRoaXMuaW50ZXJuYWwudmlld2VycHJlZmVyZW5jZXMuaXNTdWJzY3JpYmVkPSExKSxuPXRoaXMuaW50ZXJuYWwudmlld2VycHJlZmVyZW5jZXMuY29uZmlndXJhdGlvbixcInJlc2V0XCI9PT1lfHwhMD09PXIpe3ZhciBwPXUubGVuZ3RoO2ZvcihmPTA7ZjxwO2YrPTEpblt1W2ZdXS52YWx1ZT1uW3VbZl1dLmRlZmF1bHRWYWx1ZSxuW3VbZl1dLmV4cGxpY2l0U2V0PSExfWlmKFwib2JqZWN0XCI9PT10KGUpKWZvcihhIGluIGUpaWYobz1lW2FdLGQodSxhKSYmdm9pZCAwIT09byl7aWYoXCJib29sZWFuXCI9PT1uW2FdLnR5cGUmJlwiYm9vbGVhblwiPT10eXBlb2YgbyluW2FdLnZhbHVlPW87ZWxzZSBpZihcIm5hbWVcIj09PW5bYV0udHlwZSYmZChuW2FdLnZhbHVlU2V0LG8pKW5bYV0udmFsdWU9bztlbHNlIGlmKFwiaW50ZWdlclwiPT09blthXS50eXBlJiZOdW1iZXIuaXNJbnRlZ2VyKG8pKW5bYV0udmFsdWU9bztlbHNlIGlmKFwiYXJyYXlcIj09PW5bYV0udHlwZSl7Zm9yKGw9MDtsPG8ubGVuZ3RoO2wrPTEpaWYoaT0hMCwxPT09b1tsXS5sZW5ndGgmJlwibnVtYmVyXCI9PXR5cGVvZiBvW2xdWzBdKWMucHVzaChTdHJpbmcob1tsXS0xKSk7ZWxzZSBpZihvW2xdLmxlbmd0aD4xKXtmb3IoaD0wO2g8b1tsXS5sZW5ndGg7aCs9MSlcIm51bWJlclwiIT10eXBlb2Ygb1tsXVtoXSYmKGk9ITEpOyEwPT09aSYmYy5wdXNoKFtvW2xdWzBdLTEsb1tsXVsxXS0xXS5qb2luKFwiIFwiKSl9blthXS52YWx1ZT1cIltcIitjLmpvaW4oXCIgXCIpK1wiXVwifWVsc2UgblthXS52YWx1ZT1uW2FdLmRlZmF1bHRWYWx1ZTtuW2FdLmV4cGxpY2l0U2V0PSEwfXJldHVybiExPT09dGhpcy5pbnRlcm5hbC52aWV3ZXJwcmVmZXJlbmNlcy5pc1N1YnNjcmliZWQmJih0aGlzLmludGVybmFsLmV2ZW50cy5zdWJzY3JpYmUoXCJwdXRDYXRhbG9nXCIsZnVuY3Rpb24oKXt2YXIgdCxlPVtdO2Zvcih0IGluIG4pITA9PT1uW3RdLmV4cGxpY2l0U2V0JiYoXCJuYW1lXCI9PT1uW3RdLnR5cGU/ZS5wdXNoKFwiL1wiK3QrXCIgL1wiK25bdF0udmFsdWUpOmUucHVzaChcIi9cIit0K1wiIFwiK25bdF0udmFsdWUpKTswIT09ZS5sZW5ndGgmJnRoaXMuaW50ZXJuYWwud3JpdGUoXCIvVmlld2VyUHJlZmVyZW5jZXNcXG48PFxcblwiK2Uuam9pbihcIlxcblwiKStcIlxcbj4+XCIpfSksdGhpcy5pbnRlcm5hbC52aWV3ZXJwcmVmZXJlbmNlcy5pc1N1YnNjcmliZWQ9ITApLHRoaXMuaW50ZXJuYWwudmlld2VycHJlZmVyZW5jZXMuY29uZmlndXJhdGlvbj1uLHRoaXN9LEUuQVBJLmFkZE1ldGFkYXRhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PXRoaXMuaW50ZXJuYWwuX19tZXRhZGF0YV9fJiYodGhpcy5pbnRlcm5hbC5fX21ldGFkYXRhX189e21ldGFkYXRhOnQsbmFtZXNwYWNlVXJpOm51bGwhPWU/ZTpcImh0dHA6Ly9qc3BkZi5kZWZhdWx0Lm5hbWVzcGFjZXVyaS9cIixyYXdYbWw6XCJib29sZWFuXCI9PXR5cGVvZiBlJiZlfSx0aGlzLmludGVybmFsLmV2ZW50cy5zdWJzY3JpYmUoXCJwdXRDYXRhbG9nXCIsbGUpLHRoaXMuaW50ZXJuYWwuZXZlbnRzLnN1YnNjcmliZShcInBvc3RQdXRSZXNvdXJjZXNcIixjZSkpLHRoaXN9LGZ1bmN0aW9uKHQpe3ZhciBlPXQuQVBJLHI9ZS5wZGZFc2NhcGUxNj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuPWUubWV0YWRhdGEuVW5pY29kZS53aWR0aHMsaT1bXCJcIixcIjBcIixcIjAwXCIsXCIwMDBcIixcIjAwMDBcIl0sYT1bXCJcIl0sbz0wLHM9dC5sZW5ndGg7bzxzOysrbyl7aWYocj1lLm1ldGFkYXRhLmNoYXJhY3RlclRvR2x5cGgodC5jaGFyQ29kZUF0KG8pKSxlLm1ldGFkYXRhLmdseUlkc1VzZWQucHVzaChyKSxlLm1ldGFkYXRhLnRvVW5pY29kZVtyXT10LmNoYXJDb2RlQXQobyksLTE9PW4uaW5kZXhPZihyKSYmKG4ucHVzaChyKSxuLnB1c2goW3BhcnNlSW50KGUubWV0YWRhdGEud2lkdGhPZkdseXBoKHIpLDEwKV0pKSxcIjBcIj09cilyZXR1cm4gYS5qb2luKFwiXCIpO3I9ci50b1N0cmluZygxNiksYS5wdXNoKGlbNC1yLmxlbmd0aF0scil9cmV0dXJuIGEuam9pbihcIlwiKX0sbj1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scztmb3IoYT1cIi9DSURJbml0IC9Qcm9jU2V0IGZpbmRyZXNvdXJjZSBiZWdpblxcbjEyIGRpY3QgYmVnaW5cXG5iZWdpbmNtYXBcXG4vQ0lEU3lzdGVtSW5mbyA8PFxcbiAgL1JlZ2lzdHJ5IChBZG9iZSlcXG4gIC9PcmRlcmluZyAoVUNTKVxcbiAgL1N1cHBsZW1lbnQgMFxcbj4+IGRlZlxcbi9DTWFwTmFtZSAvQWRvYmUtSWRlbnRpdHktVUNTIGRlZlxcbi9DTWFwVHlwZSAyIGRlZlxcbjEgYmVnaW5jb2Rlc3BhY2VyYW5nZVxcbjwwMDAwPjxmZmZmPlxcbmVuZGNvZGVzcGFjZXJhbmdlXCIsbj1bXSxvPTAscz0ocj1PYmplY3Qua2V5cyh0KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKS5sZW5ndGg7bzxzO28rKyllPXJbb10sbi5sZW5ndGg+PTEwMCYmKGErPVwiXFxuXCIrbi5sZW5ndGgrXCIgYmVnaW5iZmNoYXJcXG5cIituLmpvaW4oXCJcXG5cIikrXCJcXG5lbmRiZmNoYXJcIixuPVtdKSx2b2lkIDAhPT10W2VdJiZudWxsIT09dFtlXSYmXCJmdW5jdGlvblwiPT10eXBlb2YgdFtlXS50b1N0cmluZyYmKGk9KFwiMDAwMFwiK3RbZV0udG9TdHJpbmcoMTYpKS5zbGljZSgtNCksZT0oXCIwMDAwXCIrKCtlKS50b1N0cmluZygxNikpLnNsaWNlKC00KSxuLnB1c2goXCI8XCIrZStcIj48XCIraStcIj5cIikpO3JldHVybiBuLmxlbmd0aCYmKGErPVwiXFxuXCIrbi5sZW5ndGgrXCIgYmVnaW5iZmNoYXJcXG5cIituLmpvaW4oXCJcXG5cIikrXCJcXG5lbmRiZmNoYXJcXG5cIiksYStcImVuZGNtYXBcXG5DTWFwTmFtZSBjdXJyZW50ZGljdCAvQ01hcCBkZWZpbmVyZXNvdXJjZSBwb3BcXG5lbmRcXG5lbmRcIn07ZS5ldmVudHMucHVzaChbXCJwdXRGb250XCIsZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe3ZhciByPWUuZm9udCxpPWUub3V0LGE9ZS5uZXdPYmplY3Qsbz1lLnB1dFN0cmVhbTtpZihyLm1ldGFkYXRhIGluc3RhbmNlb2YgdC5BUEkuVFRGRm9udCYmXCJJZGVudGl0eS1IXCI9PT1yLmVuY29kaW5nKXtmb3IodmFyIHM9ci5tZXRhZGF0YS5Vbmljb2RlLndpZHRocyx1PXIubWV0YWRhdGEuc3Vic2V0LmVuY29kZShyLm1ldGFkYXRhLmdseUlkc1VzZWQsMSksYz1cIlwiLGw9MDtsPHUubGVuZ3RoO2wrKyljKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHVbbF0pO3ZhciBoPWEoKTtvKHtkYXRhOmMsYWRkTGVuZ3RoMTohMCxvYmplY3RJZDpofSksaShcImVuZG9ialwiKTt2YXIgZj1hKCk7byh7ZGF0YTpuKHIubWV0YWRhdGEudG9Vbmljb2RlKSxhZGRMZW5ndGgxOiEwLG9iamVjdElkOmZ9KSxpKFwiZW5kb2JqXCIpO3ZhciBkPWEoKTtpKFwiPDxcIiksaShcIi9UeXBlIC9Gb250RGVzY3JpcHRvclwiKSxpKFwiL0ZvbnROYW1lIC9cIitDKHIuZm9udE5hbWUpKSxpKFwiL0ZvbnRGaWxlMiBcIitoK1wiIDAgUlwiKSxpKFwiL0ZvbnRCQm94IFwiK3QuQVBJLlBERk9iamVjdC5jb252ZXJ0KHIubWV0YWRhdGEuYmJveCkpLGkoXCIvRmxhZ3MgXCIrci5tZXRhZGF0YS5mbGFncyksaShcIi9TdGVtViBcIityLm1ldGFkYXRhLnN0ZW1WKSxpKFwiL0l0YWxpY0FuZ2xlIFwiK3IubWV0YWRhdGEuaXRhbGljQW5nbGUpLGkoXCIvQXNjZW50IFwiK3IubWV0YWRhdGEuYXNjZW5kZXIpLGkoXCIvRGVzY2VudCBcIityLm1ldGFkYXRhLmRlY2VuZGVyKSxpKFwiL0NhcEhlaWdodCBcIityLm1ldGFkYXRhLmNhcEhlaWdodCksaShcIj4+XCIpLGkoXCJlbmRvYmpcIik7dmFyIHA9YSgpO2koXCI8PFwiKSxpKFwiL1R5cGUgL0ZvbnRcIiksaShcIi9CYXNlRm9udCAvXCIrQyhyLmZvbnROYW1lKSksaShcIi9Gb250RGVzY3JpcHRvciBcIitkK1wiIDAgUlwiKSxpKFwiL1cgXCIrdC5BUEkuUERGT2JqZWN0LmNvbnZlcnQocykpLGkoXCIvQ0lEVG9HSURNYXAgL0lkZW50aXR5XCIpLGkoXCIvRFcgMTAwMFwiKSxpKFwiL1N1YnR5cGUgL0NJREZvbnRUeXBlMlwiKSxpKFwiL0NJRFN5c3RlbUluZm9cIiksaShcIjw8XCIpLGkoXCIvU3VwcGxlbWVudCAwXCIpLGkoXCIvUmVnaXN0cnkgKEFkb2JlKVwiKSxpKFwiL09yZGVyaW5nIChcIityLmVuY29kaW5nK1wiKVwiKSxpKFwiPj5cIiksaShcIj4+XCIpLGkoXCJlbmRvYmpcIiksci5vYmplY3ROdW1iZXI9YSgpLGkoXCI8PFwiKSxpKFwiL1R5cGUgL0ZvbnRcIiksaShcIi9TdWJ0eXBlIC9UeXBlMFwiKSxpKFwiL1RvVW5pY29kZSBcIitmK1wiIDAgUlwiKSxpKFwiL0Jhc2VGb250IC9cIitDKHIuZm9udE5hbWUpKSxpKFwiL0VuY29kaW5nIC9cIityLmVuY29kaW5nKSxpKFwiL0Rlc2NlbmRhbnRGb250cyBbXCIrcCtcIiAwIFJdXCIpLGkoXCI+PlwiKSxpKFwiZW5kb2JqXCIpLHIuaXNBbHJlYWR5UHV0dGVkPSEwfX0oZSl9XSksZS5ldmVudHMucHVzaChbXCJwdXRGb250XCIsZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUpe3ZhciByPWUuZm9udCxpPWUub3V0LGE9ZS5uZXdPYmplY3Qsbz1lLnB1dFN0cmVhbTtpZihyLm1ldGFkYXRhIGluc3RhbmNlb2YgdC5BUEkuVFRGRm9udCYmXCJXaW5BbnNpRW5jb2RpbmdcIj09PXIuZW5jb2Rpbmcpe2Zvcih2YXIgcz1yLm1ldGFkYXRhLnJhd0RhdGEsdT1cIlwiLGM9MDtjPHMubGVuZ3RoO2MrKyl1Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHNbY10pO3ZhciBsPWEoKTtvKHtkYXRhOnUsYWRkTGVuZ3RoMTohMCxvYmplY3RJZDpsfSksaShcImVuZG9ialwiKTt2YXIgaD1hKCk7byh7ZGF0YTpuKHIubWV0YWRhdGEudG9Vbmljb2RlKSxhZGRMZW5ndGgxOiEwLG9iamVjdElkOmh9KSxpKFwiZW5kb2JqXCIpO3ZhciBmPWEoKTtpKFwiPDxcIiksaShcIi9EZXNjZW50IFwiK3IubWV0YWRhdGEuZGVjZW5kZXIpLGkoXCIvQ2FwSGVpZ2h0IFwiK3IubWV0YWRhdGEuY2FwSGVpZ2h0KSxpKFwiL1N0ZW1WIFwiK3IubWV0YWRhdGEuc3RlbVYpLGkoXCIvVHlwZSAvRm9udERlc2NyaXB0b3JcIiksaShcIi9Gb250RmlsZTIgXCIrbCtcIiAwIFJcIiksaShcIi9GbGFncyA5NlwiKSxpKFwiL0ZvbnRCQm94IFwiK3QuQVBJLlBERk9iamVjdC5jb252ZXJ0KHIubWV0YWRhdGEuYmJveCkpLGkoXCIvRm9udE5hbWUgL1wiK0Moci5mb250TmFtZSkpLGkoXCIvSXRhbGljQW5nbGUgXCIrci5tZXRhZGF0YS5pdGFsaWNBbmdsZSksaShcIi9Bc2NlbnQgXCIrci5tZXRhZGF0YS5hc2NlbmRlciksaShcIj4+XCIpLGkoXCJlbmRvYmpcIiksci5vYmplY3ROdW1iZXI9YSgpO2Zvcih2YXIgZD0wO2Q8ci5tZXRhZGF0YS5obXR4LndpZHRocy5sZW5ndGg7ZCsrKXIubWV0YWRhdGEuaG10eC53aWR0aHNbZF09cGFyc2VJbnQoci5tZXRhZGF0YS5obXR4LndpZHRoc1tkXSooMWUzL3IubWV0YWRhdGEuaGVhZC51bml0c1BlckVtKSk7aShcIjw8L1N1YnR5cGUvVHJ1ZVR5cGUvVHlwZS9Gb250L1RvVW5pY29kZSBcIitoK1wiIDAgUi9CYXNlRm9udC9cIitDKHIuZm9udE5hbWUpK1wiL0ZvbnREZXNjcmlwdG9yIFwiK2YrXCIgMCBSL0VuY29kaW5nL1wiK3IuZW5jb2RpbmcrXCIgL0ZpcnN0Q2hhciAyOSAvTGFzdENoYXIgMjU1IC9XaWR0aHMgXCIrdC5BUEkuUERGT2JqZWN0LmNvbnZlcnQoci5tZXRhZGF0YS5obXR4LndpZHRocykrXCI+PlwiKSxpKFwiZW5kb2JqXCIpLHIuaXNBbHJlYWR5UHV0dGVkPSEwfX0oZSl9XSk7dmFyIGk9ZnVuY3Rpb24odCl7dmFyIGUsbj10LnRleHR8fFwiXCIsaT10LngsYT10Lnksbz10Lm9wdGlvbnN8fHt9LHM9dC5tdXRleHx8e30sdT1zLnBkZkVzY2FwZSxjPXMuYWN0aXZlRm9udEtleSxsPXMuZm9udHMsaD1jLGY9XCJcIixkPTAscD1cIlwiLGc9bFtoXS5lbmNvZGluZztpZihcIklkZW50aXR5LUhcIiE9PWxbaF0uZW5jb2RpbmcpcmV0dXJue3RleHQ6bix4OmkseTphLG9wdGlvbnM6byxtdXRleDpzfTtmb3IocD1uLGg9YyxBcnJheS5pc0FycmF5KG4pJiYocD1uWzBdKSxkPTA7ZDxwLmxlbmd0aDtkKz0xKWxbaF0ubWV0YWRhdGEuaGFzT3duUHJvcGVydHkoXCJjbWFwXCIpJiYoZT1sW2hdLm1ldGFkYXRhLmNtYXAudW5pY29kZS5jb2RlTWFwW3BbZF0uY2hhckNvZGVBdCgwKV0pLGV8fHBbZF0uY2hhckNvZGVBdCgwKTwyNTYmJmxbaF0ubWV0YWRhdGEuaGFzT3duUHJvcGVydHkoXCJVbmljb2RlXCIpP2YrPXBbZF06Zis9XCJcIjt2YXIgbT1cIlwiO3JldHVybiBwYXJzZUludChoLnNsaWNlKDEpKTwxNHx8XCJXaW5BbnNpRW5jb2RpbmdcIj09PWc/bT11KGYsaCkuc3BsaXQoXCJcIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpfSkuam9pbihcIlwiKTpcIklkZW50aXR5LUhcIj09PWcmJihtPXIoZixsW2hdKSkscy5pc0hleD0hMCx7dGV4dDptLHg6aSx5OmEsb3B0aW9uczpvLG11dGV4OnN9fTtlLmV2ZW50cy5wdXNoKFtcInBvc3RQcm9jZXNzVGV4dFwiLGZ1bmN0aW9uKHQpe3ZhciBlPXQudGV4dHx8XCJcIixyPVtdLG49e3RleHQ6ZSx4OnQueCx5OnQueSxvcHRpb25zOnQub3B0aW9ucyxtdXRleDp0Lm11dGV4fTtpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgYT0wO2ZvcihhPTA7YTxlLmxlbmd0aDthKz0xKUFycmF5LmlzQXJyYXkoZVthXSkmJjM9PT1lW2FdLmxlbmd0aD9yLnB1c2goW2koT2JqZWN0LmFzc2lnbih7fSxuLHt0ZXh0OmVbYV1bMF19KSkudGV4dCxlW2FdWzFdLGVbYV1bMl1dKTpyLnB1c2goaShPYmplY3QuYXNzaWduKHt9LG4se3RleHQ6ZVthXX0pKS50ZXh0KTt0LnRleHQ9cn1lbHNlIHQudGV4dD1pKE9iamVjdC5hc3NpZ24oe30sbix7dGV4dDplfSkpLnRleHR9XSl9KEUpLFxuLyoqXG4gKiBAbGljZW5zZVxuICoganNQREYgdmlydHVhbCBGaWxlU3lzdGVtIGZ1bmN0aW9uYWxpdHlcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2VcbiAqL1xuZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5pbnRlcm5hbC52RlMmJih0aGlzLmludGVybmFsLnZGUz17fSksITB9O3QuZXhpc3RzRmlsZUluVkZTPWZ1bmN0aW9uKHQpe3JldHVybiBlLmNhbGwodGhpcyksdm9pZCAwIT09dGhpcy5pbnRlcm5hbC52RlNbdF19LHQuYWRkRmlsZVRvVkZTPWZ1bmN0aW9uKHQscil7cmV0dXJuIGUuY2FsbCh0aGlzKSx0aGlzLmludGVybmFsLnZGU1t0XT1yLHRoaXN9LHQuZ2V0RmlsZUZyb21WRlM9ZnVuY3Rpb24odCl7cmV0dXJuIGUuY2FsbCh0aGlzKSx2b2lkIDAhPT10aGlzLmludGVybmFsLnZGU1t0XT90aGlzLmludGVybmFsLnZGU1t0XTpudWxsfX0oRS5BUEkpLFxuLyoqXG4gKiBAbGljZW5zZVxuICogVW5pY29kZSBCaWRpIEVuZ2luZSBiYXNlZCBvbiB0aGUgd29yayBvZiBBbGV4IFNoZW5zaXMgKEBhc3RoZW5zaXMpXG4gKiBNSVQgTGljZW5zZVxuICovXG5mdW5jdGlvbih0KXt0Ll9fYmlkaUVuZ2luZV9fPXQucHJvdG90eXBlLl9fYmlkaUVuZ2luZV9fPWZ1bmN0aW9uKHQpe3ZhciByLG4saSxhLG8scyx1LGM9ZSxsPVtbMCwzLDAsMSwwLDAsMF0sWzAsMywwLDEsMiwyLDBdLFswLDMsMCwxNywyLDAsMV0sWzAsMyw1LDUsNCwxLDBdLFswLDMsMjEsMjEsNCwwLDFdLFswLDMsNSw1LDQsMiwwXV0saD1bWzIsMCwxLDEsMCwxLDBdLFsyLDAsMSwxLDAsMiwwXSxbMiwwLDIsMSwzLDIsMF0sWzIsMCwyLDMzLDMsMSwxXV0sZj17TDowLFI6MSxFTjoyLEFOOjMsTjo0LEI6NSxTOjZ9LGQ9ezA6MCw1OjEsNjoyLDc6MywzMjo0LDI1MTo1LDI1NDo2LDI1NTo3fSxwPVtcIihcIixcIilcIixcIihcIixcIjxcIixcIj5cIixcIjxcIixcIltcIixcIl1cIixcIltcIixcIntcIixcIn1cIixcIntcIixcIsKrXCIsXCLCu1wiLFwiwqtcIixcIuKAuVwiLFwi4oC6XCIsXCLigLlcIixcIuKBhVwiLFwi4oGGXCIsXCLigYVcIixcIuKBvVwiLFwi4oG+XCIsXCLigb1cIixcIuKCjVwiLFwi4oKOXCIsXCLigo1cIixcIuKJpFwiLFwi4omlXCIsXCLiiaRcIixcIuKMqVwiLFwi4oyqXCIsXCLijKlcIixcIu+5mVwiLFwi77maXCIsXCLvuZlcIixcIu+5m1wiLFwi77mcXCIsXCLvuZtcIixcIu+5nVwiLFwi77meXCIsXCLvuZ1cIixcIu+5pFwiLFwi77mlXCIsXCLvuaRcIl0sZz1uZXcgUmVnRXhwKC9eKFsxLTR8OV18MVswLTldfDJbMC05XXwzWzAxNjhdfDRbMDQ1ODldfDVbMDEyXXw3Wzc4XXwxNTl8MTZbMC05XXwxN1swLTJdfDIxWzU2OV18MjJbMDM0ODldfDI1MCkkLyksbT0hMSx2PTA7dGhpcy5fX2JpZGlFbmdpbmVfXz17fTt2YXIgYj1mdW5jdGlvbih0KXt2YXIgZT10LmNoYXJDb2RlQXQoKSxyPWU+Pjgsbj1kW3JdO3JldHVybiB2b2lkIDAhPT1uP2NbMjU2Km4rKDI1NSZlKV06MjUyPT09cnx8MjUzPT09cj9cIkFMXCI6Zy50ZXN0KHIpP1wiTFwiOjg9PT1yP1wiUlwiOlwiTlwifSx5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPTA7cjx0Lmxlbmd0aDtyKyspe2lmKFwiTFwiPT09KGU9Yih0LmNoYXJBdChyKSkpKXJldHVybiExO2lmKFwiUlwiPT09ZSlyZXR1cm4hMH1yZXR1cm4hMX0sdz1mdW5jdGlvbih0LGUsbyxzKXt2YXIgdSxjLGwsaCxmPWVbc107c3dpdGNoKGYpe2Nhc2VcIkxcIjpjYXNlXCJSXCI6Y2FzZVwiTFJFXCI6Y2FzZVwiUkxFXCI6Y2FzZVwiTFJPXCI6Y2FzZVwiUkxPXCI6Y2FzZVwiUERGXCI6bT0hMTticmVhaztjYXNlXCJOXCI6Y2FzZVwiQU5cIjpicmVhaztjYXNlXCJFTlwiOm0mJihmPVwiQU5cIik7YnJlYWs7Y2FzZVwiQUxcIjptPSEwLGY9XCJSXCI7YnJlYWs7Y2FzZVwiV1NcIjpjYXNlXCJCTlwiOmY9XCJOXCI7YnJlYWs7Y2FzZVwiQ1NcIjpzPDF8fHMrMT49ZS5sZW5ndGh8fFwiRU5cIiE9PSh1PW9bcy0xXSkmJlwiQU5cIiE9PXV8fFwiRU5cIiE9PShjPWVbcysxXSkmJlwiQU5cIiE9PWM/Zj1cIk5cIjptJiYoYz1cIkFOXCIpLGY9Yz09PXU/YzpcIk5cIjticmVhaztjYXNlXCJFU1wiOmY9XCJFTlwiPT09KHU9cz4wP29bcy0xXTpcIkJcIikmJnMrMTxlLmxlbmd0aCYmXCJFTlwiPT09ZVtzKzFdP1wiRU5cIjpcIk5cIjticmVhaztjYXNlXCJFVFwiOmlmKHM+MCYmXCJFTlwiPT09b1tzLTFdKXtmPVwiRU5cIjticmVha31pZihtKXtmPVwiTlwiO2JyZWFrfWZvcihsPXMrMSxoPWUubGVuZ3RoO2w8aCYmXCJFVFwiPT09ZVtsXTspbCsrO2Y9bDxoJiZcIkVOXCI9PT1lW2xdP1wiRU5cIjpcIk5cIjticmVhaztjYXNlXCJOU01cIjppZihpJiYhYSl7Zm9yKGg9ZS5sZW5ndGgsbD1zKzE7bDxoJiZcIk5TTVwiPT09ZVtsXTspbCsrO2lmKGw8aCl7dmFyIGQ9dFtzXSxwPWQ+PTE0MjUmJmQ8PTIzMDN8fDY0Mjg2PT09ZDtpZih1PWVbbF0scCYmKFwiUlwiPT09dXx8XCJBTFwiPT09dSkpe2Y9XCJSXCI7YnJlYWt9fX1mPXM8MXx8XCJCXCI9PT0odT1lW3MtMV0pP1wiTlwiOm9bcy0xXTticmVhaztjYXNlXCJCXCI6bT0hMSxyPSEwLGY9djticmVhaztjYXNlXCJTXCI6bj0hMCxmPVwiTlwifXJldHVybiBmfSxOPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LnNwbGl0KFwiXCIpO3JldHVybiByJiZMKG4scix7aGlMZXZlbDp2fSksbi5yZXZlcnNlKCksZSYmZS5yZXZlcnNlKCksbi5qb2luKFwiXCIpfSxMPWZ1bmN0aW9uKHQsZSxpKXt2YXIgYSxvLHMsdSxjLGQ9LTEscD10Lmxlbmd0aCxnPTAseT1bXSxOPXY/aDpsLEw9W107Zm9yKG09ITEscj0hMSxuPSExLG89MDtvPHA7bysrKUxbb109Yih0W29dKTtmb3Iocz0wO3M8cDtzKyspe2lmKGM9Zyx5W3NdPXcodCxMLHkscyksYT0yNDAmKGc9TltjXVtmW3lbc11dXSksZyY9MTUsZVtzXT11PU5bZ11bNV0sYT4wKWlmKDE2PT09YSl7Zm9yKG89ZDtvPHM7bysrKWVbb109MTtkPS0xfWVsc2UgZD0tMTtpZihOW2ddWzZdKS0xPT09ZCYmKGQ9cyk7ZWxzZSBpZihkPi0xKXtmb3Iobz1kO288cztvKyspZVtvXT11O2Q9LTF9XCJCXCI9PT1MW3NdJiYoZVtzXT0wKSxpLmhpTGV2ZWx8PXV9biYmZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248cjtuKyspaWYoXCJTXCI9PT10W25dKXtlW25dPXY7Zm9yKHZhciBpPW4tMTtpPj0wJiZcIldTXCI9PT10W2ldO2ktLSllW2ldPXZ9fShMLGUscCl9LHg9ZnVuY3Rpb24odCxlLG4saSxhKXtpZighKGEuaGlMZXZlbDx0KSl7aWYoMT09PXQmJjE9PT12JiYhcilyZXR1cm4gZS5yZXZlcnNlKCksdm9pZChuJiZuLnJldmVyc2UoKSk7Zm9yKHZhciBvLHMsdSxjLGw9ZS5sZW5ndGgsaD0wO2g8bDspe2lmKGlbaF0+PXQpe2Zvcih1PWgrMTt1PGwmJmlbdV0+PXQ7KXUrKztmb3IoYz1oLHM9dS0xO2M8cztjKysscy0tKW89ZVtjXSxlW2NdPWVbc10sZVtzXT1vLG4mJihvPW5bY10sbltjXT1uW3NdLG5bc109byk7aD11fWgrK319fSxBPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LnNwbGl0KFwiXCIpLGk9e2hpTGV2ZWw6dn07cmV0dXJuIHJ8fChyPVtdKSxMKG4scixpKSxmdW5jdGlvbih0LGUscil7aWYoMCE9PXIuaGlMZXZlbCYmdSlmb3IodmFyIG4saT0wO2k8dC5sZW5ndGg7aSsrKTE9PT1lW2ldJiYobj1wLmluZGV4T2YodFtpXSkpPj0wJiYodFtpXT1wW24rMV0pfShuLHIsaSkseCgyLG4sZSxyLGkpLHgoMSxuLGUscixpKSxuLmpvaW4oXCJcIil9O3JldHVybiB0aGlzLl9fYmlkaUVuZ2luZV9fLmRvQmlkaVJlb3JkZXI9ZnVuY3Rpb24odCxlLHIpe2lmKGZ1bmN0aW9uKHQsZSl7aWYoZSlmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllW3JdPXI7dm9pZCAwPT09YSYmKGE9eSh0KSksdm9pZCAwPT09cyYmKHM9eSh0KSl9KHQsZSksaXx8IW98fHMpaWYoaSYmbyYmYV5zKXY9YT8xOjAsdD1OKHQsZSxyKTtlbHNlIGlmKCFpJiZvJiZzKXY9YT8xOjAsdD1BKHQsZSxyKSx0PU4odCxlKTtlbHNlIGlmKCFpfHxhfHxvfHxzKXtpZihpJiYhbyYmYV5zKXQ9Tih0LGUpLGE/KHY9MCx0PUEodCxlLHIpKToodj0xLHQ9QSh0LGUsciksdD1OKHQsZSkpO2Vsc2UgaWYoaSYmYSYmIW8mJnMpdj0xLHQ9QSh0LGUsciksdD1OKHQsZSk7ZWxzZSBpZighaSYmIW8mJmFecyl7dmFyIG49dTthPyh2PTEsdD1BKHQsZSxyKSx2PTAsdT0hMSx0PUEodCxlLHIpLHU9bik6KHY9MCx0PUEodCxlLHIpLHQ9Tih0LGUpLHY9MSx1PSExLHQ9QSh0LGUsciksdT1uLHQ9Tih0LGUpKX19ZWxzZSB2PTAsdD1BKHQsZSxyKTtlbHNlIHY9YT8xOjAsdD1BKHQsZSxyKTtyZXR1cm4gdH0sdGhpcy5fX2JpZGlFbmdpbmVfXy5zZXRPcHRpb25zPWZ1bmN0aW9uKHQpe3QmJihpPXQuaXNJbnB1dFZpc3VhbCxvPXQuaXNPdXRwdXRWaXN1YWwsYT10LmlzSW5wdXRSdGwscz10LmlzT3V0cHV0UnRsLHU9dC5pc1N5bW1ldHJpY1N3YXBwaW5nKX0sdGhpcy5fX2JpZGlFbmdpbmVfXy5zZXRPcHRpb25zKHQpLHRoaXMuX19iaWRpRW5naW5lX199O3ZhciBlPVtcIkJOXCIsXCJCTlwiLFwiQk5cIixcIkJOXCIsXCJCTlwiLFwiQk5cIixcIkJOXCIsXCJCTlwiLFwiQk5cIixcIlNcIixcIkJcIixcIlNcIixcIldTXCIsXCJCXCIsXCJCTlwiLFwiQk5cIixcIkJOXCIsXCJCTlwiLFwiQk5cIixcIkJOXCIsXCJCTlwiLFwiQk5cIixcIkJOXCIsXCJCTlwiLFwiQk5cIixcIkJOXCIsXCJCTlwiLFwiQk5cIixcIkJcIixcIkJcIixcIkJcIixcIlNcIixcIldTXCIsXCJOXCIsXCJOXCIsXCJFVFwiLFwiRVRcIixcIkVUXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJFU1wiLFwiQ1NcIixcIkVTXCIsXCJDU1wiLFwiQ1NcIixcIkVOXCIsXCJFTlwiLFwiRU5cIixcIkVOXCIsXCJFTlwiLFwiRU5cIixcIkVOXCIsXCJFTlwiLFwiRU5cIixcIkVOXCIsXCJDU1wiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiQk5cIixcIkJOXCIsXCJCTlwiLFwiQk5cIixcIkJOXCIsXCJCTlwiLFwiQlwiLFwiQk5cIixcIkJOXCIsXCJCTlwiLFwiQk5cIixcIkJOXCIsXCJCTlwiLFwiQk5cIixcIkJOXCIsXCJCTlwiLFwiQk5cIixcIkJOXCIsXCJCTlwiLFwiQk5cIixcIkJOXCIsXCJCTlwiLFwiQk5cIixcIkJOXCIsXCJCTlwiLFwiQk5cIixcIkJOXCIsXCJCTlwiLFwiQk5cIixcIkJOXCIsXCJCTlwiLFwiQk5cIixcIkJOXCIsXCJDU1wiLFwiTlwiLFwiRVRcIixcIkVUXCIsXCJFVFwiLFwiRVRcIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIkxcIixcIk5cIixcIk5cIixcIkJOXCIsXCJOXCIsXCJOXCIsXCJFVFwiLFwiRVRcIixcIkVOXCIsXCJFTlwiLFwiTlwiLFwiTFwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiRU5cIixcIkxcIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIk5cIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIk5cIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIk5cIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIk5cIixcIk5cIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIk5cIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIk5cIixcIkxcIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIkVUXCIsXCJOXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJSXCIsXCJOU01cIixcIlJcIixcIk5TTVwiLFwiTlNNXCIsXCJSXCIsXCJOU01cIixcIk5TTVwiLFwiUlwiLFwiTlNNXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJBTlwiLFwiQU5cIixcIkFOXCIsXCJBTlwiLFwiQU5cIixcIkFOXCIsXCJOXCIsXCJOXCIsXCJBTFwiLFwiRVRcIixcIkVUXCIsXCJBTFwiLFwiQ1NcIixcIkFMXCIsXCJOXCIsXCJOXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiQUxcIixcIkFMXCIsXCJOXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJBTlwiLFwiQU5cIixcIkFOXCIsXCJBTlwiLFwiQU5cIixcIkFOXCIsXCJBTlwiLFwiQU5cIixcIkFOXCIsXCJBTlwiLFwiRVRcIixcIkFOXCIsXCJBTlwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiTlNNXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiQU5cIixcIk5cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIkFMXCIsXCJBTFwiLFwiTlNNXCIsXCJOU01cIixcIk5cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiQUxcIixcIkFMXCIsXCJFTlwiLFwiRU5cIixcIkVOXCIsXCJFTlwiLFwiRU5cIixcIkVOXCIsXCJFTlwiLFwiRU5cIixcIkVOXCIsXCJFTlwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJOXCIsXCJBTFwiLFwiQUxcIixcIk5TTVwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlwiLFwiTlwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiQUxcIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIlJcIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIlJcIixcIlJcIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIlJcIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIldTXCIsXCJXU1wiLFwiV1NcIixcIldTXCIsXCJXU1wiLFwiV1NcIixcIldTXCIsXCJXU1wiLFwiV1NcIixcIldTXCIsXCJXU1wiLFwiQk5cIixcIkJOXCIsXCJCTlwiLFwiTFwiLFwiUlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiV1NcIixcIkJcIixcIkxSRVwiLFwiUkxFXCIsXCJQREZcIixcIkxST1wiLFwiUkxPXCIsXCJDU1wiLFwiRVRcIixcIkVUXCIsXCJFVFwiLFwiRVRcIixcIkVUXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJDU1wiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiV1NcIixcIkJOXCIsXCJCTlwiLFwiQk5cIixcIkJOXCIsXCJCTlwiLFwiTlwiLFwiTFJJXCIsXCJSTElcIixcIkZTSVwiLFwiUERJXCIsXCJCTlwiLFwiQk5cIixcIkJOXCIsXCJCTlwiLFwiQk5cIixcIkJOXCIsXCJFTlwiLFwiTFwiLFwiTlwiLFwiTlwiLFwiRU5cIixcIkVOXCIsXCJFTlwiLFwiRU5cIixcIkVOXCIsXCJFTlwiLFwiRVNcIixcIkVTXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJMXCIsXCJFTlwiLFwiRU5cIixcIkVOXCIsXCJFTlwiLFwiRU5cIixcIkVOXCIsXCJFTlwiLFwiRU5cIixcIkVOXCIsXCJFTlwiLFwiRVNcIixcIkVTXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJMXCIsXCJMXCIsXCJMXCIsXCJMXCIsXCJMXCIsXCJMXCIsXCJMXCIsXCJMXCIsXCJMXCIsXCJMXCIsXCJMXCIsXCJMXCIsXCJMXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJFVFwiLFwiRVRcIixcIkVUXCIsXCJFVFwiLFwiRVRcIixcIkVUXCIsXCJFVFwiLFwiRVRcIixcIkVUXCIsXCJFVFwiLFwiRVRcIixcIkVUXCIsXCJFVFwiLFwiRVRcIixcIkVUXCIsXCJFVFwiLFwiRVRcIixcIkVUXCIsXCJFVFwiLFwiRVRcIixcIkVUXCIsXCJFVFwiLFwiRVRcIixcIkVUXCIsXCJFVFwiLFwiRVRcIixcIkVUXCIsXCJFVFwiLFwiRVRcIixcIkVUXCIsXCJFVFwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTFwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiUlwiLFwiTlNNXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJSXCIsXCJFU1wiLFwiUlwiLFwiUlwiLFwiUlwiLFwiUlwiLFwiUlwiLFwiUlwiLFwiUlwiLFwiUlwiLFwiUlwiLFwiUlwiLFwiUlwiLFwiUlwiLFwiUlwiLFwiTlwiLFwiUlwiLFwiUlwiLFwiUlwiLFwiUlwiLFwiUlwiLFwiTlwiLFwiUlwiLFwiTlwiLFwiUlwiLFwiUlwiLFwiTlwiLFwiUlwiLFwiUlwiLFwiTlwiLFwiUlwiLFwiUlwiLFwiUlwiLFwiUlwiLFwiUlwiLFwiUlwiLFwiUlwiLFwiUlwiLFwiUlwiLFwiUlwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5TTVwiLFwiTlNNXCIsXCJOU01cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIkNTXCIsXCJOXCIsXCJDU1wiLFwiTlwiLFwiTlwiLFwiQ1NcIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIkVUXCIsXCJOXCIsXCJOXCIsXCJFU1wiLFwiRVNcIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIkVUXCIsXCJFVFwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJOXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJBTFwiLFwiQUxcIixcIkFMXCIsXCJOXCIsXCJOXCIsXCJCTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiRVRcIixcIkVUXCIsXCJFVFwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiRVNcIixcIkNTXCIsXCJFU1wiLFwiQ1NcIixcIkNTXCIsXCJFTlwiLFwiRU5cIixcIkVOXCIsXCJFTlwiLFwiRU5cIixcIkVOXCIsXCJFTlwiLFwiRU5cIixcIkVOXCIsXCJFTlwiLFwiQ1NcIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIk5cIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIk5cIixcIk5cIixcIk5cIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIk5cIixcIk5cIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIk5cIixcIk5cIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIkxcIixcIk5cIixcIk5cIixcIkxcIixcIkxcIixcIkxcIixcIk5cIixcIk5cIixcIk5cIixcIkVUXCIsXCJFVFwiLFwiTlwiLFwiTlwiLFwiTlwiLFwiRVRcIixcIkVUXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCIsXCJOXCJdLHI9bmV3IHQuX19iaWRpRW5naW5lX18oe2lzSW5wdXRWaXN1YWw6ITB9KTt0LkFQSS5ldmVudHMucHVzaChbXCJwb3N0UHJvY2Vzc1RleHRcIixmdW5jdGlvbih0KXt2YXIgZT10LnRleHQ7dC54LHQueTt2YXIgbj10Lm9wdGlvbnN8fHt9O3QubXV0ZXgsbi5sYW5nO3ZhciBpPVtdO2lmKG4uaXNJbnB1dFZpc3VhbD1cImJvb2xlYW5cIiE9dHlwZW9mIG4uaXNJbnB1dFZpc3VhbHx8bi5pc0lucHV0VmlzdWFsLHIuc2V0T3B0aW9ucyhuKSxcIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpe3ZhciBhPTA7Zm9yKGk9W10sYT0wO2E8ZS5sZW5ndGg7YSs9MSlcIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZVthXSk/aS5wdXNoKFtyLmRvQmlkaVJlb3JkZXIoZVthXVswXSksZVthXVsxXSxlW2FdWzJdXSk6aS5wdXNoKFtyLmRvQmlkaVJlb3JkZXIoZVthXSldKTt0LnRleHQ9aX1lbHNlIHQudGV4dD1yLmRvQmlkaVJlb3JkZXIoZSk7ci5zZXRPcHRpb25zKHtpc0lucHV0VmlzdWFsOiEwfSl9XSl9KEUpLEUuQVBJLlRURkZvbnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlO2lmKHRoaXMucmF3RGF0YT10LGU9dGhpcy5jb250ZW50cz1uZXcgZmUodCksdGhpcy5jb250ZW50cy5wb3M9NCxcInR0Y2ZcIj09PWUucmVhZFN0cmluZyg0KSl0aHJvdyBuZXcgRXJyb3IoXCJUVENGIG5vdCBzdXBwb3J0ZWQuXCIpO2UucG9zPTAsdGhpcy5wYXJzZSgpLHRoaXMuc3Vic2V0PW5ldyBDZSh0aGlzKSx0aGlzLnJlZ2lzdGVyVFRGKCl9cmV0dXJuIHQub3Blbj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoZSl9LHQucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlyZWN0b3J5PW5ldyBkZSh0aGlzLmNvbnRlbnRzKSx0aGlzLmhlYWQ9bmV3IG1lKHRoaXMpLHRoaXMubmFtZT1uZXcgeGUodGhpcyksdGhpcy5jbWFwPW5ldyBiZSh0aGlzKSx0aGlzLnRvVW5pY29kZT17fSx0aGlzLmhoZWE9bmV3IHllKHRoaXMpLHRoaXMubWF4cD1uZXcgQWUodGhpcyksdGhpcy5obXR4PW5ldyBTZSh0aGlzKSx0aGlzLnBvc3Q9bmV3IE5lKHRoaXMpLHRoaXMub3MyPW5ldyB3ZSh0aGlzKSx0aGlzLmxvY2E9bmV3IEllKHRoaXMpLHRoaXMuZ2x5Zj1uZXcgUGUodGhpcyksdGhpcy5hc2NlbmRlcj10aGlzLm9zMi5leGlzdHMmJnRoaXMub3MyLmFzY2VuZGVyfHx0aGlzLmhoZWEuYXNjZW5kZXIsdGhpcy5kZWNlbmRlcj10aGlzLm9zMi5leGlzdHMmJnRoaXMub3MyLmRlY2VuZGVyfHx0aGlzLmhoZWEuZGVjZW5kZXIsdGhpcy5saW5lR2FwPXRoaXMub3MyLmV4aXN0cyYmdGhpcy5vczIubGluZUdhcHx8dGhpcy5oaGVhLmxpbmVHYXAsdGhpcy5iYm94PVt0aGlzLmhlYWQueE1pbix0aGlzLmhlYWQueU1pbix0aGlzLmhlYWQueE1heCx0aGlzLmhlYWQueU1heF19LHQucHJvdG90eXBlLnJlZ2lzdGVyVFRGPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4saTtpZih0aGlzLnNjYWxlRmFjdG9yPTFlMy90aGlzLmhlYWQudW5pdHNQZXJFbSx0aGlzLmJib3g9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saTtmb3IoaT1bXSxlPTAscj0obj10aGlzLmJib3gpLmxlbmd0aDtlPHI7ZSsrKXQ9bltlXSxpLnB1c2goTWF0aC5yb3VuZCh0KnRoaXMuc2NhbGVGYWN0b3IpKTtyZXR1cm4gaX0uY2FsbCh0aGlzKSx0aGlzLnN0ZW1WPTAsdGhpcy5wb3N0LmV4aXN0cz8ocj0yNTUmKG49dGhpcy5wb3N0Lml0YWxpY19hbmdsZSksMzI3NjgmKGU9bj4+MTYpJiYoZT0tKDErKDY1NTM1XmUpKSksdGhpcy5pdGFsaWNBbmdsZT0rKGUrXCIuXCIrcikpOnRoaXMuaXRhbGljQW5nbGU9MCx0aGlzLmFzY2VuZGVyPU1hdGgucm91bmQodGhpcy5hc2NlbmRlcip0aGlzLnNjYWxlRmFjdG9yKSx0aGlzLmRlY2VuZGVyPU1hdGgucm91bmQodGhpcy5kZWNlbmRlcip0aGlzLnNjYWxlRmFjdG9yKSx0aGlzLmxpbmVHYXA9TWF0aC5yb3VuZCh0aGlzLmxpbmVHYXAqdGhpcy5zY2FsZUZhY3RvciksdGhpcy5jYXBIZWlnaHQ9dGhpcy5vczIuZXhpc3RzJiZ0aGlzLm9zMi5jYXBIZWlnaHR8fHRoaXMuYXNjZW5kZXIsdGhpcy54SGVpZ2h0PXRoaXMub3MyLmV4aXN0cyYmdGhpcy5vczIueEhlaWdodHx8MCx0aGlzLmZhbWlseUNsYXNzPSh0aGlzLm9zMi5leGlzdHMmJnRoaXMub3MyLmZhbWlseUNsYXNzfHwwKT4+OCx0aGlzLmlzU2VyaWY9MT09PShpPXRoaXMuZmFtaWx5Q2xhc3MpfHwyPT09aXx8Mz09PWl8fDQ9PT1pfHw1PT09aXx8Nz09PWksdGhpcy5pc1NjcmlwdD0xMD09PXRoaXMuZmFtaWx5Q2xhc3MsdGhpcy5mbGFncz0wLHRoaXMucG9zdC5pc0ZpeGVkUGl0Y2gmJih0aGlzLmZsYWdzfD0xKSx0aGlzLmlzU2VyaWYmJih0aGlzLmZsYWdzfD0yKSx0aGlzLmlzU2NyaXB0JiYodGhpcy5mbGFnc3w9OCksMCE9PXRoaXMuaXRhbGljQW5nbGUmJih0aGlzLmZsYWdzfD02NCksdGhpcy5mbGFnc3w9MzIsIXRoaXMuY21hcC51bmljb2RlKXRocm93IG5ldyBFcnJvcihcIk5vIHVuaWNvZGUgY21hcCBmb3IgZm9udFwiKX0sdC5wcm90b3R5cGUuY2hhcmFjdGVyVG9HbHlwaD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4obnVsbCE9KGU9dGhpcy5jbWFwLnVuaWNvZGUpP2UuY29kZU1hcFt0XTp2b2lkIDApfHwwfSx0LnByb3RvdHlwZS53aWR0aE9mR2x5cGg9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIGU9MWUzL3RoaXMuaGVhZC51bml0c1BlckVtLHRoaXMuaG10eC5mb3JHbHlwaCh0KS5hZHZhbmNlKmV9LHQucHJvdG90eXBlLndpZHRoT2ZTdHJpbmc9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvO2ZvcihhPTAsaT0wLG89KHQ9XCJcIit0KS5sZW5ndGg7MDw9bz9pPG86aT5vO2k9MDw9bz8rK2k6LS1pKW49dC5jaGFyQ29kZUF0KGkpLGErPXRoaXMud2lkdGhPZkdseXBoKHRoaXMuY2hhcmFjdGVyVG9HbHlwaChuKSkrciooMWUzL2UpfHwwO3JldHVybiBhKihlLzFlMyl9LHQucHJvdG90eXBlLmxpbmVIZWlnaHQ9ZnVuY3Rpb24odCxlKXt2YXIgcjtyZXR1cm4gbnVsbD09ZSYmKGU9ITEpLHI9ZT90aGlzLmxpbmVHYXA6MCwodGhpcy5hc2NlbmRlcityLXRoaXMuZGVjZW5kZXIpLzFlMyp0fSx0fSgpO3ZhciBoZSxmZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5kYXRhPW51bGwhPXQ/dDpbXSx0aGlzLnBvcz0wLHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGh9cmV0dXJuIHQucHJvdG90eXBlLnJlYWRCeXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YVt0aGlzLnBvcysrXX0sdC5wcm90b3R5cGUud3JpdGVCeXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRhdGFbdGhpcy5wb3MrK109dH0sdC5wcm90b3R5cGUucmVhZFVJbnQzMj1mdW5jdGlvbigpe3JldHVybiAxNjc3NzIxNip0aGlzLnJlYWRCeXRlKCkrKHRoaXMucmVhZEJ5dGUoKTw8MTYpKyh0aGlzLnJlYWRCeXRlKCk8PDgpK3RoaXMucmVhZEJ5dGUoKX0sdC5wcm90b3R5cGUud3JpdGVVSW50MzI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMud3JpdGVCeXRlKHQ+Pj4yNCYyNTUpLHRoaXMud3JpdGVCeXRlKHQ+PjE2JjI1NSksdGhpcy53cml0ZUJ5dGUodD4+OCYyNTUpLHRoaXMud3JpdGVCeXRlKDI1NSZ0KX0sdC5wcm90b3R5cGUucmVhZEludDMyPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuKHQ9dGhpcy5yZWFkVUludDMyKCkpPj0yMTQ3NDgzNjQ4P3QtNDI5NDk2NzI5Njp0fSx0LnByb3RvdHlwZS53cml0ZUludDMyPWZ1bmN0aW9uKHQpe3JldHVybiB0PDAmJih0Kz00Mjk0OTY3Mjk2KSx0aGlzLndyaXRlVUludDMyKHQpfSx0LnByb3RvdHlwZS5yZWFkVUludDE2PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZEJ5dGUoKTw8OHx0aGlzLnJlYWRCeXRlKCl9LHQucHJvdG90eXBlLndyaXRlVUludDE2PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLndyaXRlQnl0ZSh0Pj44JjI1NSksdGhpcy53cml0ZUJ5dGUoMjU1JnQpfSx0LnByb3RvdHlwZS5yZWFkSW50MTY9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4odD10aGlzLnJlYWRVSW50MTYoKSk+PTMyNzY4P3QtNjU1MzY6dH0sdC5wcm90b3R5cGUud3JpdGVJbnQxNj1mdW5jdGlvbih0KXtyZXR1cm4gdDwwJiYodCs9NjU1MzYpLHRoaXMud3JpdGVVSW50MTYodCl9LHQucHJvdG90eXBlLnJlYWRTdHJpbmc9ZnVuY3Rpb24odCl7dmFyIGUscjtmb3Iocj1bXSxlPTA7MDw9dD9lPHQ6ZT50O2U9MDw9dD8rK2U6LS1lKXJbZV09U3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLnJlYWRCeXRlKCkpO3JldHVybiByLmpvaW4oXCJcIil9LHQucHJvdG90eXBlLndyaXRlU3RyaW5nPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbjtmb3Iobj1bXSxlPTAscj10Lmxlbmd0aDswPD1yP2U8cjplPnI7ZT0wPD1yPysrZTotLWUpbi5wdXNoKHRoaXMud3JpdGVCeXRlKHQuY2hhckNvZGVBdChlKSkpO3JldHVybiBufSx0LnByb3RvdHlwZS5yZWFkU2hvcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkSW50MTYoKX0sdC5wcm90b3R5cGUud3JpdGVTaG9ydD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53cml0ZUludDE2KHQpfSx0LnByb3RvdHlwZS5yZWFkTG9uZ0xvbmc9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbixpLGEsbyxzO3JldHVybiB0PXRoaXMucmVhZEJ5dGUoKSxlPXRoaXMucmVhZEJ5dGUoKSxyPXRoaXMucmVhZEJ5dGUoKSxuPXRoaXMucmVhZEJ5dGUoKSxpPXRoaXMucmVhZEJ5dGUoKSxhPXRoaXMucmVhZEJ5dGUoKSxvPXRoaXMucmVhZEJ5dGUoKSxzPXRoaXMucmVhZEJ5dGUoKSwxMjgmdD8tMSooNzIwNTc1OTQwMzc5Mjc5NDAqKDI1NV50KSsyODE0NzQ5NzY3MTA2NTYqKDI1NV5lKSsxMDk5NTExNjI3Nzc2KigyNTVecikrNDI5NDk2NzI5NiooMjU1Xm4pKzE2Nzc3MjE2KigyNTVeaSkrNjU1MzYqKDI1NV5hKSsyNTYqKDI1NV5vKSsoMjU1XnMpKzEpOjcyMDU3NTk0MDM3OTI3OTQwKnQrMjgxNDc0OTc2NzEwNjU2KmUrMTA5OTUxMTYyNzc3NipyKzQyOTQ5NjcyOTYqbisxNjc3NzIxNippKzY1NTM2KmErMjU2Km8rc30sdC5wcm90b3R5cGUud3JpdGVMb25nTG9uZz1mdW5jdGlvbih0KXt2YXIgZSxyO3JldHVybiBlPU1hdGguZmxvb3IodC80Mjk0OTY3Mjk2KSxyPTQyOTQ5NjcyOTUmdCx0aGlzLndyaXRlQnl0ZShlPj4yNCYyNTUpLHRoaXMud3JpdGVCeXRlKGU+PjE2JjI1NSksdGhpcy53cml0ZUJ5dGUoZT4+OCYyNTUpLHRoaXMud3JpdGVCeXRlKDI1NSZlKSx0aGlzLndyaXRlQnl0ZShyPj4yNCYyNTUpLHRoaXMud3JpdGVCeXRlKHI+PjE2JjI1NSksdGhpcy53cml0ZUJ5dGUocj4+OCYyNTUpLHRoaXMud3JpdGVCeXRlKDI1NSZyKX0sdC5wcm90b3R5cGUucmVhZEludD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRJbnQzMigpfSx0LnByb3RvdHlwZS53cml0ZUludD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53cml0ZUludDMyKHQpfSx0LnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKHQpe3ZhciBlLHI7Zm9yKGU9W10scj0wOzA8PXQ/cjx0OnI+dDtyPTA8PXQ/KytyOi0tcillLnB1c2godGhpcy5yZWFkQnl0ZSgpKTtyZXR1cm4gZX0sdC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk7Zm9yKGk9W10scj0wLG49dC5sZW5ndGg7cjxuO3IrKyllPXRbcl0saS5wdXNoKHRoaXMud3JpdGVCeXRlKGUpKTtyZXR1cm4gaX0sdH0oKSxkZT1mdW5jdGlvbigpe3ZhciB0O2Z1bmN0aW9uIGUodCl7dmFyIGUscixuO2Zvcih0aGlzLnNjYWxhclR5cGU9dC5yZWFkSW50KCksdGhpcy50YWJsZUNvdW50PXQucmVhZFNob3J0KCksdGhpcy5zZWFyY2hSYW5nZT10LnJlYWRTaG9ydCgpLHRoaXMuZW50cnlTZWxlY3Rvcj10LnJlYWRTaG9ydCgpLHRoaXMucmFuZ2VTaGlmdD10LnJlYWRTaG9ydCgpLHRoaXMudGFibGVzPXt9LHI9MCxuPXRoaXMudGFibGVDb3VudDswPD1uP3I8bjpyPm47cj0wPD1uPysrcjotLXIpZT17dGFnOnQucmVhZFN0cmluZyg0KSxjaGVja3N1bTp0LnJlYWRJbnQoKSxvZmZzZXQ6dC5yZWFkSW50KCksbGVuZ3RoOnQucmVhZEludCgpfSx0aGlzLnRhYmxlc1tlLnRhZ109ZX1yZXR1cm4gZS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKGUpe3ZhciByLG4saSxhLG8scyx1LGMsbCxoLGYsZCxwO2ZvcihwIGluIGY9T2JqZWN0LmtleXMoZSkubGVuZ3RoLHM9TWF0aC5sb2coMiksbD0xNipNYXRoLmZsb29yKE1hdGgubG9nKGYpL3MpLGE9TWF0aC5mbG9vcihsL3MpLGM9MTYqZi1sLChuPW5ldyBmZSkud3JpdGVJbnQodGhpcy5zY2FsYXJUeXBlKSxuLndyaXRlU2hvcnQoZiksbi53cml0ZVNob3J0KGwpLG4ud3JpdGVTaG9ydChhKSxuLndyaXRlU2hvcnQoYyksaT0xNipmLHU9bi5wb3MraSxvPW51bGwsZD1bXSxlKWZvcihoPWVbcF0sbi53cml0ZVN0cmluZyhwKSxuLndyaXRlSW50KHQoaCkpLG4ud3JpdGVJbnQodSksbi53cml0ZUludChoLmxlbmd0aCksZD1kLmNvbmNhdChoKSxcImhlYWRcIj09PXAmJihvPXUpLHUrPWgubGVuZ3RoO3UlNDspZC5wdXNoKDApLHUrKztyZXR1cm4gbi53cml0ZShkKSxyPTI5ODExNDY1NTQtdChuLmRhdGEpLG4ucG9zPW8rOCxuLndyaXRlVUludDMyKHIpLG4uZGF0YX0sdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saTtmb3IodD1fZS5jYWxsKHQpO3QubGVuZ3RoJTQ7KXQucHVzaCgwKTtmb3Iobj1uZXcgZmUodCkscj0wLGU9MCxpPXQubGVuZ3RoO2U8aTtlPWUrPTQpcis9bi5yZWFkVUludDMyKCk7cmV0dXJuIDQyOTQ5NjcyOTUmcn0sZX0oKSxwZT17fS5oYXNPd25Qcm9wZXJ0eSxnZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiBlKXBlLmNhbGwoZSxyKSYmKHRbcl09ZVtyXSk7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9dH1yZXR1cm4gbi5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IG4sdC5fX3N1cGVyX189ZS5wcm90b3R5cGUsdH07aGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlO3RoaXMuZmlsZT10LGU9dGhpcy5maWxlLmRpcmVjdG9yeS50YWJsZXNbdGhpcy50YWddLHRoaXMuZXhpc3RzPSEhZSxlJiYodGhpcy5vZmZzZXQ9ZS5vZmZzZXQsdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5wYXJzZSh0aGlzLmZpbGUuY29udGVudHMpKX1yZXR1cm4gdC5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUucmF3PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXhpc3RzPyh0aGlzLmZpbGUuY29udGVudHMucG9zPXRoaXMub2Zmc2V0LHRoaXMuZmlsZS5jb250ZW50cy5yZWFkKHRoaXMubGVuZ3RoKSk6bnVsbH0sdH0oKTt2YXIgbWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cmV0dXJuIHQuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZ2UodCxoZSksdC5wcm90b3R5cGUudGFnPVwiaGVhZFwiLHQucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnBvcz10aGlzLm9mZnNldCx0aGlzLnZlcnNpb249dC5yZWFkSW50KCksdGhpcy5yZXZpc2lvbj10LnJlYWRJbnQoKSx0aGlzLmNoZWNrU3VtQWRqdXN0bWVudD10LnJlYWRJbnQoKSx0aGlzLm1hZ2ljTnVtYmVyPXQucmVhZEludCgpLHRoaXMuZmxhZ3M9dC5yZWFkU2hvcnQoKSx0aGlzLnVuaXRzUGVyRW09dC5yZWFkU2hvcnQoKSx0aGlzLmNyZWF0ZWQ9dC5yZWFkTG9uZ0xvbmcoKSx0aGlzLm1vZGlmaWVkPXQucmVhZExvbmdMb25nKCksdGhpcy54TWluPXQucmVhZFNob3J0KCksdGhpcy55TWluPXQucmVhZFNob3J0KCksdGhpcy54TWF4PXQucmVhZFNob3J0KCksdGhpcy55TWF4PXQucmVhZFNob3J0KCksdGhpcy5tYWNTdHlsZT10LnJlYWRTaG9ydCgpLHRoaXMubG93ZXN0UmVjUFBFTT10LnJlYWRTaG9ydCgpLHRoaXMuZm9udERpcmVjdGlvbkhpbnQ9dC5yZWFkU2hvcnQoKSx0aGlzLmluZGV4VG9Mb2NGb3JtYXQ9dC5yZWFkU2hvcnQoKSx0aGlzLmdseXBoRGF0YUZvcm1hdD10LnJlYWRTaG9ydCgpfSx0LnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuKGU9bmV3IGZlKS53cml0ZUludCh0aGlzLnZlcnNpb24pLGUud3JpdGVJbnQodGhpcy5yZXZpc2lvbiksZS53cml0ZUludCh0aGlzLmNoZWNrU3VtQWRqdXN0bWVudCksZS53cml0ZUludCh0aGlzLm1hZ2ljTnVtYmVyKSxlLndyaXRlU2hvcnQodGhpcy5mbGFncyksZS53cml0ZVNob3J0KHRoaXMudW5pdHNQZXJFbSksZS53cml0ZUxvbmdMb25nKHRoaXMuY3JlYXRlZCksZS53cml0ZUxvbmdMb25nKHRoaXMubW9kaWZpZWQpLGUud3JpdGVTaG9ydCh0aGlzLnhNaW4pLGUud3JpdGVTaG9ydCh0aGlzLnlNaW4pLGUud3JpdGVTaG9ydCh0aGlzLnhNYXgpLGUud3JpdGVTaG9ydCh0aGlzLnlNYXgpLGUud3JpdGVTaG9ydCh0aGlzLm1hY1N0eWxlKSxlLndyaXRlU2hvcnQodGhpcy5sb3dlc3RSZWNQUEVNKSxlLndyaXRlU2hvcnQodGhpcy5mb250RGlyZWN0aW9uSGludCksZS53cml0ZVNob3J0KHQpLGUud3JpdGVTaG9ydCh0aGlzLmdseXBoRGF0YUZvcm1hdCksZS5kYXRhfSx0fSgpLHZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZhciByLG4saSxhLG8scyx1LGMsbCxoLGYsZCxwLGcsbSx2LGI7c3dpdGNoKHRoaXMucGxhdGZvcm1JRD10LnJlYWRVSW50MTYoKSx0aGlzLmVuY29kaW5nSUQ9dC5yZWFkU2hvcnQoKSx0aGlzLm9mZnNldD1lK3QucmVhZEludCgpLGw9dC5wb3MsdC5wb3M9dGhpcy5vZmZzZXQsdGhpcy5mb3JtYXQ9dC5yZWFkVUludDE2KCksdGhpcy5sZW5ndGg9dC5yZWFkVUludDE2KCksdGhpcy5sYW5ndWFnZT10LnJlYWRVSW50MTYoKSx0aGlzLmlzVW5pY29kZT0zPT09dGhpcy5wbGF0Zm9ybUlEJiYxPT09dGhpcy5lbmNvZGluZ0lEJiY0PT09dGhpcy5mb3JtYXR8fDA9PT10aGlzLnBsYXRmb3JtSUQmJjQ9PT10aGlzLmZvcm1hdCx0aGlzLmNvZGVNYXA9e30sdGhpcy5mb3JtYXQpe2Nhc2UgMDpmb3Iocz0wO3M8MjU2Oysrcyl0aGlzLmNvZGVNYXBbc109dC5yZWFkQnl0ZSgpO2JyZWFrO2Nhc2UgNDpmb3IoZj10LnJlYWRVSW50MTYoKSxoPWYvMix0LnBvcys9NixpPWZ1bmN0aW9uKCl7dmFyIGUscjtmb3Iocj1bXSxzPWU9MDswPD1oP2U8aDplPmg7cz0wPD1oPysrZTotLWUpci5wdXNoKHQucmVhZFVJbnQxNigpKTtyZXR1cm4gcn0oKSx0LnBvcys9MixwPWZ1bmN0aW9uKCl7dmFyIGUscjtmb3Iocj1bXSxzPWU9MDswPD1oP2U8aDplPmg7cz0wPD1oPysrZTotLWUpci5wdXNoKHQucmVhZFVJbnQxNigpKTtyZXR1cm4gcn0oKSx1PWZ1bmN0aW9uKCl7dmFyIGUscjtmb3Iocj1bXSxzPWU9MDswPD1oP2U8aDplPmg7cz0wPD1oPysrZTotLWUpci5wdXNoKHQucmVhZFVJbnQxNigpKTtyZXR1cm4gcn0oKSxjPWZ1bmN0aW9uKCl7dmFyIGUscjtmb3Iocj1bXSxzPWU9MDswPD1oP2U8aDplPmg7cz0wPD1oPysrZTotLWUpci5wdXNoKHQucmVhZFVJbnQxNigpKTtyZXR1cm4gcn0oKSxuPSh0aGlzLmxlbmd0aC10LnBvcyt0aGlzLm9mZnNldCkvMixvPWZ1bmN0aW9uKCl7dmFyIGUscjtmb3Iocj1bXSxzPWU9MDswPD1uP2U8bjplPm47cz0wPD1uPysrZTotLWUpci5wdXNoKHQucmVhZFVJbnQxNigpKTtyZXR1cm4gcn0oKSxzPW09MCxiPWkubGVuZ3RoO208YjtzPSsrbSlmb3IoZz1pW3NdLHI9dj1kPXBbc107ZDw9Zz92PD1nOnY+PWc7cj1kPD1nPysrdjotLXYpMD09PWNbc10/YT1yK3Vbc106MCE9PShhPW9bY1tzXS8yKyhyLWQpLShoLXMpXXx8MCkmJihhKz11W3NdKSx0aGlzLmNvZGVNYXBbcl09NjU1MzUmYX10LnBvcz1sfXJldHVybiB0LmVuY29kZT1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyx1LGMsbCxoLGYsZCxwLGcsbSx2LGIseSx3LE4sTCx4LEEsUyxfLFAsayxGLEksQyxqLE8sQixNLHEsRSxSLEQsVCx6LFUsSCxXLFYsRyxZO3N3aXRjaChGPW5ldyBmZSxhPU9iamVjdC5rZXlzKHQpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSksZSl7Y2FzZVwibWFjcm9tYW5cIjpmb3IocD0wLGc9ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IoZD0wO2Q8MjU2OysrZCl0LnB1c2goMCk7cmV0dXJuIHR9KCksdj17MDowfSxpPXt9LEk9MCxCPWEubGVuZ3RoO0k8QjtJKyspbnVsbD09dltXPXRbbj1hW0ldXV0mJih2W1ddPSsrcCksaVtuXT17b2xkOnRbbl0sbmV3OnZbdFtuXV19LGdbbl09dlt0W25dXTtyZXR1cm4gRi53cml0ZVVJbnQxNigxKSxGLndyaXRlVUludDE2KDApLEYud3JpdGVVSW50MzIoMTIpLEYud3JpdGVVSW50MTYoMCksRi53cml0ZVVJbnQxNigyNjIpLEYud3JpdGVVSW50MTYoMCksRi53cml0ZShnKSx7Y2hhck1hcDppLHN1YnRhYmxlOkYuZGF0YSxtYXhHbHlwaElEOnArMX07Y2FzZVwidW5pY29kZVwiOmZvcihQPVtdLGw9W10sYj0wLHY9e30scj17fSxtPXU9bnVsbCxDPTAsTT1hLmxlbmd0aDtDPE07QysrKW51bGw9PXZbdz10W249YVtDXV1dJiYodlt3XT0rK2IpLHJbbl09e29sZDp3LG5ldzp2W3ddfSxvPXZbd10tbixudWxsIT1tJiZvPT09dXx8KG0mJmwucHVzaChtKSxQLnB1c2gobiksdT1vKSxtPW47Zm9yKG0mJmwucHVzaChtKSxsLnB1c2goNjU1MzUpLFAucHVzaCg2NTUzNSksUz0yKihBPVAubGVuZ3RoKSx4PTIqTWF0aC5wb3coTWF0aC5sb2coQSkvTWF0aC5MTjIsMiksaD1NYXRoLmxvZyh4LzIpL01hdGguTE4yLEw9MipBLXgscz1bXSxOPVtdLGY9W10sZD1qPTAscT1QLmxlbmd0aDtqPHE7ZD0rK2ope2lmKF89UFtkXSxjPWxbZF0sNjU1MzU9PT1fKXtzLnB1c2goMCksTi5wdXNoKDApO2JyZWFrfWlmKF8tKGs9cltfXS5uZXcpPj0zMjc2OClmb3Iocy5wdXNoKDApLE4ucHVzaCgyKihmLmxlbmd0aCtBLWQpKSxuPU89XztfPD1jP088PWM6Tz49YztuPV88PWM/KytPOi0tTylmLnB1c2gocltuXS5uZXcpO2Vsc2Ugcy5wdXNoKGstXyksTi5wdXNoKDApfWZvcihGLndyaXRlVUludDE2KDMpLEYud3JpdGVVSW50MTYoMSksRi53cml0ZVVJbnQzMigxMiksRi53cml0ZVVJbnQxNig0KSxGLndyaXRlVUludDE2KDE2KzgqQSsyKmYubGVuZ3RoKSxGLndyaXRlVUludDE2KDApLEYud3JpdGVVSW50MTYoUyksRi53cml0ZVVJbnQxNih4KSxGLndyaXRlVUludDE2KGgpLEYud3JpdGVVSW50MTYoTCksVT0wLEU9bC5sZW5ndGg7VTxFO1UrKyluPWxbVV0sRi53cml0ZVVJbnQxNihuKTtmb3IoRi53cml0ZVVJbnQxNigwKSxIPTAsUj1QLmxlbmd0aDtIPFI7SCsrKW49UFtIXSxGLndyaXRlVUludDE2KG4pO2ZvcihWPTAsRD1zLmxlbmd0aDtWPEQ7VisrKW89c1tWXSxGLndyaXRlVUludDE2KG8pO2ZvcihHPTAsVD1OLmxlbmd0aDtHPFQ7RysrKXk9TltHXSxGLndyaXRlVUludDE2KHkpO2ZvcihZPTAsej1mLmxlbmd0aDtZPHo7WSsrKXA9ZltZXSxGLndyaXRlVUludDE2KHApO3JldHVybntjaGFyTWFwOnIsc3VidGFibGU6Ri5kYXRhLG1heEdseXBoSUQ6YisxfX19LHR9KCksYmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cmV0dXJuIHQuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZ2UodCxoZSksdC5wcm90b3R5cGUudGFnPVwiY21hcFwiLHQucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbjtmb3IodC5wb3M9dGhpcy5vZmZzZXQsdGhpcy52ZXJzaW9uPXQucmVhZFVJbnQxNigpLG49dC5yZWFkVUludDE2KCksdGhpcy50YWJsZXM9W10sdGhpcy51bmljb2RlPW51bGwscj0wOzA8PW4/cjxuOnI+bjtyPTA8PW4/KytyOi0tcillPW5ldyB2ZSh0LHRoaXMub2Zmc2V0KSx0aGlzLnRhYmxlcy5wdXNoKGUpLGUuaXNVbmljb2RlJiZudWxsPT10aGlzLnVuaWNvZGUmJih0aGlzLnVuaWNvZGU9ZSk7cmV0dXJuITB9LHQuZW5jb2RlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbjtyZXR1cm4gbnVsbD09ZSYmKGU9XCJtYWNyb21hblwiKSxyPXZlLmVuY29kZSh0LGUpLChuPW5ldyBmZSkud3JpdGVVSW50MTYoMCksbi53cml0ZVVJbnQxNigxKSxyLnRhYmxlPW4uZGF0YS5jb25jYXQoci5zdWJ0YWJsZSkscn0sdH0oKSx5ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gdC5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBnZSh0LGhlKSx0LnByb3RvdHlwZS50YWc9XCJoaGVhXCIsdC5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQucG9zPXRoaXMub2Zmc2V0LHRoaXMudmVyc2lvbj10LnJlYWRJbnQoKSx0aGlzLmFzY2VuZGVyPXQucmVhZFNob3J0KCksdGhpcy5kZWNlbmRlcj10LnJlYWRTaG9ydCgpLHRoaXMubGluZUdhcD10LnJlYWRTaG9ydCgpLHRoaXMuYWR2YW5jZVdpZHRoTWF4PXQucmVhZFNob3J0KCksdGhpcy5taW5MZWZ0U2lkZUJlYXJpbmc9dC5yZWFkU2hvcnQoKSx0aGlzLm1pblJpZ2h0U2lkZUJlYXJpbmc9dC5yZWFkU2hvcnQoKSx0aGlzLnhNYXhFeHRlbnQ9dC5yZWFkU2hvcnQoKSx0aGlzLmNhcmV0U2xvcGVSaXNlPXQucmVhZFNob3J0KCksdGhpcy5jYXJldFNsb3BlUnVuPXQucmVhZFNob3J0KCksdGhpcy5jYXJldE9mZnNldD10LnJlYWRTaG9ydCgpLHQucG9zKz04LHRoaXMubWV0cmljRGF0YUZvcm1hdD10LnJlYWRTaG9ydCgpLHRoaXMubnVtYmVyT2ZNZXRyaWNzPXQucmVhZFVJbnQxNigpfSx0fSgpLHdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3JldHVybiB0Ll9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGdlKHQsaGUpLHQucHJvdG90eXBlLnRhZz1cIk9TLzJcIix0LnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbih0KXtpZih0LnBvcz10aGlzLm9mZnNldCx0aGlzLnZlcnNpb249dC5yZWFkVUludDE2KCksdGhpcy5hdmVyYWdlQ2hhcldpZHRoPXQucmVhZFNob3J0KCksdGhpcy53ZWlnaHRDbGFzcz10LnJlYWRVSW50MTYoKSx0aGlzLndpZHRoQ2xhc3M9dC5yZWFkVUludDE2KCksdGhpcy50eXBlPXQucmVhZFNob3J0KCksdGhpcy55U3Vic2NyaXB0WFNpemU9dC5yZWFkU2hvcnQoKSx0aGlzLnlTdWJzY3JpcHRZU2l6ZT10LnJlYWRTaG9ydCgpLHRoaXMueVN1YnNjcmlwdFhPZmZzZXQ9dC5yZWFkU2hvcnQoKSx0aGlzLnlTdWJzY3JpcHRZT2Zmc2V0PXQucmVhZFNob3J0KCksdGhpcy55U3VwZXJzY3JpcHRYU2l6ZT10LnJlYWRTaG9ydCgpLHRoaXMueVN1cGVyc2NyaXB0WVNpemU9dC5yZWFkU2hvcnQoKSx0aGlzLnlTdXBlcnNjcmlwdFhPZmZzZXQ9dC5yZWFkU2hvcnQoKSx0aGlzLnlTdXBlcnNjcmlwdFlPZmZzZXQ9dC5yZWFkU2hvcnQoKSx0aGlzLnlTdHJpa2VvdXRTaXplPXQucmVhZFNob3J0KCksdGhpcy55U3RyaWtlb3V0UG9zaXRpb249dC5yZWFkU2hvcnQoKSx0aGlzLmZhbWlseUNsYXNzPXQucmVhZFNob3J0KCksdGhpcy5wYW5vc2U9ZnVuY3Rpb24oKXt2YXIgZSxyO2ZvcihyPVtdLGU9MDtlPDEwOysrZSlyLnB1c2godC5yZWFkQnl0ZSgpKTtyZXR1cm4gcn0oKSx0aGlzLmNoYXJSYW5nZT1mdW5jdGlvbigpe3ZhciBlLHI7Zm9yKHI9W10sZT0wO2U8NDsrK2Upci5wdXNoKHQucmVhZEludCgpKTtyZXR1cm4gcn0oKSx0aGlzLnZlbmRvcklEPXQucmVhZFN0cmluZyg0KSx0aGlzLnNlbGVjdGlvbj10LnJlYWRTaG9ydCgpLHRoaXMuZmlyc3RDaGFySW5kZXg9dC5yZWFkU2hvcnQoKSx0aGlzLmxhc3RDaGFySW5kZXg9dC5yZWFkU2hvcnQoKSx0aGlzLnZlcnNpb24+MCYmKHRoaXMuYXNjZW50PXQucmVhZFNob3J0KCksdGhpcy5kZXNjZW50PXQucmVhZFNob3J0KCksdGhpcy5saW5lR2FwPXQucmVhZFNob3J0KCksdGhpcy53aW5Bc2NlbnQ9dC5yZWFkU2hvcnQoKSx0aGlzLndpbkRlc2NlbnQ9dC5yZWFkU2hvcnQoKSx0aGlzLmNvZGVQYWdlUmFuZ2U9ZnVuY3Rpb24oKXt2YXIgZSxyO2ZvcihyPVtdLGU9MDtlPDI7ZT0rK2Upci5wdXNoKHQucmVhZEludCgpKTtyZXR1cm4gcn0oKSx0aGlzLnZlcnNpb24+MSkpcmV0dXJuIHRoaXMueEhlaWdodD10LnJlYWRTaG9ydCgpLHRoaXMuY2FwSGVpZ2h0PXQucmVhZFNob3J0KCksdGhpcy5kZWZhdWx0Q2hhcj10LnJlYWRTaG9ydCgpLHRoaXMuYnJlYWtDaGFyPXQucmVhZFNob3J0KCksdGhpcy5tYXhDb250ZXh0PXQucmVhZFNob3J0KCl9LHR9KCksTmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cmV0dXJuIHQuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZ2UodCxoZSksdC5wcm90b3R5cGUudGFnPVwicG9zdFwiLHQucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbjtzd2l0Y2godC5wb3M9dGhpcy5vZmZzZXQsdGhpcy5mb3JtYXQ9dC5yZWFkSW50KCksdGhpcy5pdGFsaWNBbmdsZT10LnJlYWRJbnQoKSx0aGlzLnVuZGVybGluZVBvc2l0aW9uPXQucmVhZFNob3J0KCksdGhpcy51bmRlcmxpbmVUaGlja25lc3M9dC5yZWFkU2hvcnQoKSx0aGlzLmlzRml4ZWRQaXRjaD10LnJlYWRJbnQoKSx0aGlzLm1pbk1lbVR5cGU0Mj10LnJlYWRJbnQoKSx0aGlzLm1heE1lbVR5cGU0Mj10LnJlYWRJbnQoKSx0aGlzLm1pbk1lbVR5cGUxPXQucmVhZEludCgpLHRoaXMubWF4TWVtVHlwZTE9dC5yZWFkSW50KCksdGhpcy5mb3JtYXQpe2Nhc2UgNjU1MzY6Y2FzZSAxOTY2MDg6YnJlYWs7Y2FzZSAxMzEwNzI6dmFyIGk7Zm9yKHI9dC5yZWFkVUludDE2KCksdGhpcy5nbHlwaE5hbWVJbmRleD1bXSxpPTA7MDw9cj9pPHI6aT5yO2k9MDw9cj8rK2k6LS1pKXRoaXMuZ2x5cGhOYW1lSW5kZXgucHVzaCh0LnJlYWRVSW50MTYoKSk7Zm9yKHRoaXMubmFtZXM9W10sbj1bXTt0LnBvczx0aGlzLm9mZnNldCt0aGlzLmxlbmd0aDspZT10LnJlYWRCeXRlKCksbi5wdXNoKHRoaXMubmFtZXMucHVzaCh0LnJlYWRTdHJpbmcoZSkpKTtyZXR1cm4gbjtjYXNlIDE1MTU1MjpyZXR1cm4gcj10LnJlYWRVSW50MTYoKSx0aGlzLm9mZnNldHM9dC5yZWFkKHIpO2Nhc2UgMjYyMTQ0OnJldHVybiB0aGlzLm1hcD1mdW5jdGlvbigpe3ZhciBlLHIsbjtmb3Iobj1bXSxpPWU9MCxyPXRoaXMuZmlsZS5tYXhwLm51bUdseXBoczswPD1yP2U8cjplPnI7aT0wPD1yPysrZTotLWUpbi5wdXNoKHQucmVhZFVJbnQzMigpKTtyZXR1cm4gbn0uY2FsbCh0aGlzKX19LHR9KCksTGU9ZnVuY3Rpb24odCxlKXt0aGlzLnJhdz10LHRoaXMubGVuZ3RoPXQubGVuZ3RoLHRoaXMucGxhdGZvcm1JRD1lLnBsYXRmb3JtSUQsdGhpcy5lbmNvZGluZ0lEPWUuZW5jb2RpbmdJRCx0aGlzLmxhbmd1YWdlSUQ9ZS5sYW5ndWFnZUlEfSx4ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gdC5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBnZSh0LGhlKSx0LnByb3RvdHlwZS50YWc9XCJuYW1lXCIsdC5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHMsdSxjLGwsaDtmb3IodC5wb3M9dGhpcy5vZmZzZXQsdC5yZWFkU2hvcnQoKSxlPXQucmVhZFNob3J0KCksbz10LnJlYWRTaG9ydCgpLHI9W10saT0wOzA8PWU/aTxlOmk+ZTtpPTA8PWU/KytpOi0taSlyLnB1c2goe3BsYXRmb3JtSUQ6dC5yZWFkU2hvcnQoKSxlbmNvZGluZ0lEOnQucmVhZFNob3J0KCksbGFuZ3VhZ2VJRDp0LnJlYWRTaG9ydCgpLG5hbWVJRDp0LnJlYWRTaG9ydCgpLGxlbmd0aDp0LnJlYWRTaG9ydCgpLG9mZnNldDp0aGlzLm9mZnNldCtvK3QucmVhZFNob3J0KCl9KTtmb3Iocz17fSxpPWM9MCxsPXIubGVuZ3RoO2M8bDtpPSsrYyluPXJbaV0sdC5wb3M9bi5vZmZzZXQsdT10LnJlYWRTdHJpbmcobi5sZW5ndGgpLGE9bmV3IExlKHUsbiksbnVsbD09c1toPW4ubmFtZUlEXSYmKHNbaF09W10pLHNbbi5uYW1lSURdLnB1c2goYSk7dGhpcy5zdHJpbmdzPXMsdGhpcy5jb3B5cmlnaHQ9c1swXSx0aGlzLmZvbnRGYW1pbHk9c1sxXSx0aGlzLmZvbnRTdWJmYW1pbHk9c1syXSx0aGlzLnVuaXF1ZVN1YmZhbWlseT1zWzNdLHRoaXMuZm9udE5hbWU9c1s0XSx0aGlzLnZlcnNpb249c1s1XTt0cnl7dGhpcy5wb3N0c2NyaXB0TmFtZT1zWzZdWzBdLnJhdy5yZXBsYWNlKC9bXFx4MDAtXFx4MTlcXHg4MC1cXHhmZl0vZyxcIlwiKX1jYXRjaChmKXt0aGlzLnBvc3RzY3JpcHROYW1lPXNbNF1bMF0ucmF3LnJlcGxhY2UoL1tcXHgwMC1cXHgxOVxceDgwLVxceGZmXS9nLFwiXCIpfXJldHVybiB0aGlzLnRyYWRlbWFyaz1zWzddLHRoaXMubWFudWZhY3R1cmVyPXNbOF0sdGhpcy5kZXNpZ25lcj1zWzldLHRoaXMuZGVzY3JpcHRpb249c1sxMF0sdGhpcy52ZW5kb3JVcmw9c1sxMV0sdGhpcy5kZXNpZ25lclVybD1zWzEyXSx0aGlzLmxpY2Vuc2U9c1sxM10sdGhpcy5saWNlbnNlVXJsPXNbMTRdLHRoaXMucHJlZmVycmVkRmFtaWx5PXNbMTVdLHRoaXMucHJlZmVycmVkU3ViZmFtaWx5PXNbMTddLHRoaXMuY29tcGF0aWJsZUZ1bGw9c1sxOF0sdGhpcy5zYW1wbGVUZXh0PXNbMTldfSx0fSgpLEFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3JldHVybiB0Ll9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGdlKHQsaGUpLHQucHJvdG90eXBlLnRhZz1cIm1heHBcIix0LnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5wb3M9dGhpcy5vZmZzZXQsdGhpcy52ZXJzaW9uPXQucmVhZEludCgpLHRoaXMubnVtR2x5cGhzPXQucmVhZFVJbnQxNigpLHRoaXMubWF4UG9pbnRzPXQucmVhZFVJbnQxNigpLHRoaXMubWF4Q29udG91cnM9dC5yZWFkVUludDE2KCksdGhpcy5tYXhDb21wb3NpdGVQb2ludHM9dC5yZWFkVUludDE2KCksdGhpcy5tYXhDb21wb25lbnRDb250b3Vycz10LnJlYWRVSW50MTYoKSx0aGlzLm1heFpvbmVzPXQucmVhZFVJbnQxNigpLHRoaXMubWF4VHdpbGlnaHRQb2ludHM9dC5yZWFkVUludDE2KCksdGhpcy5tYXhTdG9yYWdlPXQucmVhZFVJbnQxNigpLHRoaXMubWF4RnVuY3Rpb25EZWZzPXQucmVhZFVJbnQxNigpLHRoaXMubWF4SW5zdHJ1Y3Rpb25EZWZzPXQucmVhZFVJbnQxNigpLHRoaXMubWF4U3RhY2tFbGVtZW50cz10LnJlYWRVSW50MTYoKSx0aGlzLm1heFNpemVPZkluc3RydWN0aW9ucz10LnJlYWRVSW50MTYoKSx0aGlzLm1heENvbXBvbmVudEVsZW1lbnRzPXQucmVhZFVJbnQxNigpLHRoaXMubWF4Q29tcG9uZW50RGVwdGg9dC5yZWFkVUludDE2KCl9LHR9KCksU2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cmV0dXJuIHQuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZ2UodCxoZSksdC5wcm90b3R5cGUudGFnPVwiaG10eFwiLHQucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbyxzO2Zvcih0LnBvcz10aGlzLm9mZnNldCx0aGlzLm1ldHJpY3M9W10sZT0wLG89dGhpcy5maWxlLmhoZWEubnVtYmVyT2ZNZXRyaWNzOzA8PW8/ZTxvOmU+bztlPTA8PW8/KytlOi0tZSl0aGlzLm1ldHJpY3MucHVzaCh7YWR2YW5jZTp0LnJlYWRVSW50MTYoKSxsc2I6dC5yZWFkSW50MTYoKX0pO2ZvcihuPXRoaXMuZmlsZS5tYXhwLm51bUdseXBocy10aGlzLmZpbGUuaGhlYS5udW1iZXJPZk1ldHJpY3MsdGhpcy5sZWZ0U2lkZUJlYXJpbmdzPWZ1bmN0aW9uKCl7dmFyIHIsaTtmb3IoaT1bXSxlPXI9MDswPD1uP3I8bjpyPm47ZT0wPD1uPysrcjotLXIpaS5wdXNoKHQucmVhZEludDE2KCkpO3JldHVybiBpfSgpLHRoaXMud2lkdGhzPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG47Zm9yKG49W10sdD0wLGU9KHI9dGhpcy5tZXRyaWNzKS5sZW5ndGg7dDxlO3QrKylpPXJbdF0sbi5wdXNoKGkuYWR2YW5jZSk7cmV0dXJuIG59LmNhbGwodGhpcykscj10aGlzLndpZHRoc1t0aGlzLndpZHRocy5sZW5ndGgtMV0scz1bXSxlPWE9MDswPD1uP2E8bjphPm47ZT0wPD1uPysrYTotLWEpcy5wdXNoKHRoaXMud2lkdGhzLnB1c2gocikpO3JldHVybiBzfSx0LnByb3RvdHlwZS5mb3JHbHlwaD1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbiB0aGlzLm1ldHJpY3M/dGhpcy5tZXRyaWNzW3RdOnthZHZhbmNlOnRoaXMubWV0cmljc1t0aGlzLm1ldHJpY3MubGVuZ3RoLTFdLmFkdmFuY2UsbHNiOnRoaXMubGVmdFNpZGVCZWFyaW5nc1t0LXRoaXMubWV0cmljcy5sZW5ndGhdfX0sdH0oKSxfZT1bXS5zbGljZSxQZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gdC5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBnZSh0LGhlKSx0LnByb3RvdHlwZS50YWc9XCJnbHlmXCIsdC5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYWNoZT17fX0sdC5wcm90b3R5cGUuZ2x5cGhGb3I9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHMsdSxjLGw7cmV0dXJuIHQgaW4gdGhpcy5jYWNoZT90aGlzLmNhY2hlW3RdOihpPXRoaXMuZmlsZS5sb2NhLGU9dGhpcy5maWxlLmNvbnRlbnRzLHI9aS5pbmRleE9mKHQpLDA9PT0obj1pLmxlbmd0aE9mKHQpKT90aGlzLmNhY2hlW3RdPW51bGw6KGUucG9zPXRoaXMub2Zmc2V0K3IsYT0obz1uZXcgZmUoZS5yZWFkKG4pKSkucmVhZFNob3J0KCksdT1vLnJlYWRTaG9ydCgpLGw9by5yZWFkU2hvcnQoKSxzPW8ucmVhZFNob3J0KCksYz1vLnJlYWRTaG9ydCgpLHRoaXMuY2FjaGVbdF09LTE9PT1hP25ldyBGZShvLHUsbCxzLGMpOm5ldyBrZShvLGEsdSxsLHMsYyksdGhpcy5jYWNoZVt0XSkpfSx0LnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHM7Zm9yKGE9W10saT1bXSxvPTAscz1lLmxlbmd0aDtvPHM7bysrKW49dFtlW29dXSxpLnB1c2goYS5sZW5ndGgpLG4mJihhPWEuY29uY2F0KG4uZW5jb2RlKHIpKSk7cmV0dXJuIGkucHVzaChhLmxlbmd0aCkse3RhYmxlOmEsb2Zmc2V0czppfX0sdH0oKSxrZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLHIsbixpLGEpe3RoaXMucmF3PXQsdGhpcy5udW1iZXJPZkNvbnRvdXJzPWUsdGhpcy54TWluPXIsdGhpcy55TWluPW4sdGhpcy54TWF4PWksdGhpcy55TWF4PWEsdGhpcy5jb21wb3VuZD0hMX1yZXR1cm4gdC5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmF3LmRhdGF9LHR9KCksRmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxyLG4saSl7dmFyIGEsbztmb3IodGhpcy5yYXc9dCx0aGlzLnhNaW49ZSx0aGlzLnlNaW49cix0aGlzLnhNYXg9bix0aGlzLnlNYXg9aSx0aGlzLmNvbXBvdW5kPSEwLHRoaXMuZ2x5cGhJRHM9W10sdGhpcy5nbHlwaE9mZnNldHM9W10sYT10aGlzLnJhdztvPWEucmVhZFNob3J0KCksdGhpcy5nbHlwaE9mZnNldHMucHVzaChhLnBvcyksdGhpcy5nbHlwaElEcy5wdXNoKGEucmVhZFVJbnQxNigpKSwzMiZvOylhLnBvcys9MSZvPzQ6MiwxMjgmbz9hLnBvcys9ODo2NCZvP2EucG9zKz00OjgmbyYmKGEucG9zKz0yKX1yZXR1cm4gdC5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKCl7dmFyIHQsZSxyO2ZvcihlPW5ldyBmZShfZS5jYWxsKHRoaXMucmF3LmRhdGEpKSx0PTAscj10aGlzLmdseXBoSURzLmxlbmd0aDt0PHI7Kyt0KWUucG9zPXRoaXMuZ2x5cGhPZmZzZXRzW3RdO3JldHVybiBlLmRhdGF9LHR9KCksSWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cmV0dXJuIHQuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZ2UodCxoZSksdC5wcm90b3R5cGUudGFnPVwibG9jYVwiLHQucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHQpe3ZhciBlLHI7cmV0dXJuIHQucG9zPXRoaXMub2Zmc2V0LGU9dGhpcy5maWxlLmhlYWQuaW5kZXhUb0xvY0Zvcm1hdCx0aGlzLm9mZnNldHM9MD09PWU/ZnVuY3Rpb24oKXt2YXIgZSxuO2ZvcihuPVtdLHI9MCxlPXRoaXMubGVuZ3RoO3I8ZTtyKz0yKW4ucHVzaCgyKnQucmVhZFVJbnQxNigpKTtyZXR1cm4gbn0uY2FsbCh0aGlzKTpmdW5jdGlvbigpe3ZhciBlLG47Zm9yKG49W10scj0wLGU9dGhpcy5sZW5ndGg7cjxlO3IrPTQpbi5wdXNoKHQucmVhZFVJbnQzMigpKTtyZXR1cm4gbn0uY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vZmZzZXRzW3RdfSx0LnByb3RvdHlwZS5sZW5ndGhPZj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vZmZzZXRzW3QrMV0tdGhpcy5vZmZzZXRzW3RdfSx0LnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IFVpbnQzMkFycmF5KHRoaXMub2Zmc2V0cy5sZW5ndGgpLG49MCxpPTAsYT0wO2E8ci5sZW5ndGg7KythKWlmKHJbYV09bixpPGUubGVuZ3RoJiZlW2ldPT1hKXsrK2ksclthXT1uO3ZhciBvPXRoaXMub2Zmc2V0c1thXSxzPXRoaXMub2Zmc2V0c1thKzFdLW87cz4wJiYobis9cyl9Zm9yKHZhciB1PW5ldyBBcnJheSg0KnIubGVuZ3RoKSxjPTA7YzxyLmxlbmd0aDsrK2MpdVs0KmMrM109MjU1JnJbY10sdVs0KmMrMl09KDY1MjgwJnJbY10pPj44LHVbNCpjKzFdPSgxNjcxMTY4MCZyW2NdKT4+MTYsdVs0KmNdPSg0Mjc4MTkwMDgwJnJbY10pPj4yNDtyZXR1cm4gdX0sdH0oKSxDZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5mb250PXQsdGhpcy5zdWJzZXQ9e30sdGhpcy51bmljb2Rlcz17fSx0aGlzLm5leHQ9MzN9cmV0dXJuIHQucHJvdG90eXBlLmdlbmVyYXRlQ21hcD1mdW5jdGlvbigpe3ZhciB0LGUscixuLGk7Zm9yKGUgaW4gbj10aGlzLmZvbnQuY21hcC50YWJsZXNbMF0uY29kZU1hcCx0PXt9LGk9dGhpcy5zdWJzZXQpcj1pW2VdLHRbZV09bltyXTtyZXR1cm4gdH0sdC5wcm90b3R5cGUuZ2x5cGhzRm9yPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbyxzO2ZvcihuPXt9LGE9MCxvPXQubGVuZ3RoO2E8bzthKyspbltpPXRbYV1dPXRoaXMuZm9udC5nbHlmLmdseXBoRm9yKGkpO2ZvcihpIGluIGU9W10sbikobnVsbCE9KHI9bltpXSk/ci5jb21wb3VuZDp2b2lkIDApJiZlLnB1c2guYXBwbHkoZSxyLmdseXBoSURzKTtpZihlLmxlbmd0aD4wKWZvcihpIGluIHM9dGhpcy5nbHlwaHNGb3IoZSkpcj1zW2ldLG5baV09cjtyZXR1cm4gbn0sdC5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzLHUsYyxsLGgsZixkLHAsZyxtO2ZvcihuIGluIHI9YmUuZW5jb2RlKHRoaXMuZ2VuZXJhdGVDbWFwKCksXCJ1bmljb2RlXCIpLGE9dGhpcy5nbHlwaHNGb3IodCksZj17MDowfSxtPXIuY2hhck1hcClmWyhzPW1bbl0pLm9sZF09cy5uZXc7Zm9yKGQgaW4gaD1yLm1heEdseXBoSUQsYSlkIGluIGZ8fChmW2RdPWgrKyk7cmV0dXJuIGM9ZnVuY3Rpb24odCl7dmFyIGUscjtmb3IoZSBpbiByPXt9LHQpclt0W2VdXT1lO3JldHVybiByfShmKSxsPU9iamVjdC5rZXlzKGMpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkscD1mdW5jdGlvbigpe3ZhciB0LGUscjtmb3Iocj1bXSx0PTAsZT1sLmxlbmd0aDt0PGU7dCsrKW89bFt0XSxyLnB1c2goY1tvXSk7cmV0dXJuIHJ9KCksaT10aGlzLmZvbnQuZ2x5Zi5lbmNvZGUoYSxwLGYpLHU9dGhpcy5mb250LmxvY2EuZW5jb2RlKGkub2Zmc2V0cyxwKSxnPXtjbWFwOnRoaXMuZm9udC5jbWFwLnJhdygpLGdseWY6aS50YWJsZSxsb2NhOnUsaG10eDp0aGlzLmZvbnQuaG10eC5yYXcoKSxoaGVhOnRoaXMuZm9udC5oaGVhLnJhdygpLG1heHA6dGhpcy5mb250Lm1heHAucmF3KCkscG9zdDp0aGlzLmZvbnQucG9zdC5yYXcoKSxuYW1lOnRoaXMuZm9udC5uYW1lLnJhdygpLGhlYWQ6dGhpcy5mb250LmhlYWQuZW5jb2RlKGUpfSx0aGlzLmZvbnQub3MyLmV4aXN0cyYmKGdbXCJPUy8yXCJdPXRoaXMuZm9udC5vczIucmF3KCkpLHRoaXMuZm9udC5kaXJlY3RvcnkuZW5jb2RlKGcpfSx0fSgpO0UuQVBJLlBERk9iamVjdD1mdW5jdGlvbigpe3ZhciB0O2Z1bmN0aW9uIGUoKXt9cmV0dXJuIHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4oQXJyYXkoZSsxKS5qb2luKFwiMFwiKSt0KS5zbGljZSgtZSl9LGUuY29udmVydD1mdW5jdGlvbihyKXt2YXIgbixpLGEsbztpZihBcnJheS5pc0FycmF5KHIpKXJldHVyblwiW1wiK2Z1bmN0aW9uKCl7dmFyIHQsaSxhO2ZvcihhPVtdLHQ9MCxpPXIubGVuZ3RoO3Q8aTt0Kyspbj1yW3RdLGEucHVzaChlLmNvbnZlcnQobikpO3JldHVybiBhfSgpLmpvaW4oXCIgXCIpK1wiXVwiO2lmKFwic3RyaW5nXCI9PXR5cGVvZiByKXJldHVyblwiL1wiK3I7aWYobnVsbCE9cj9yLmlzU3RyaW5nOnZvaWQgMClyZXR1cm5cIihcIityK1wiKVwiO2lmKHIgaW5zdGFuY2VvZiBEYXRlKXJldHVyblwiKEQ6XCIrdChyLmdldFVUQ0Z1bGxZZWFyKCksNCkrdChyLmdldFVUQ01vbnRoKCksMikrdChyLmdldFVUQ0RhdGUoKSwyKSt0KHIuZ2V0VVRDSG91cnMoKSwyKSt0KHIuZ2V0VVRDTWludXRlcygpLDIpK3Qoci5nZXRVVENTZWNvbmRzKCksMikrXCJaKVwiO2lmKFwiW29iamVjdCBPYmplY3RdXCI9PT17fS50b1N0cmluZy5jYWxsKHIpKXtmb3IoaSBpbiBhPVtcIjw8XCJdLHIpbz1yW2ldLGEucHVzaChcIi9cIitpK1wiIFwiK2UuY29udmVydChvKSk7cmV0dXJuIGEucHVzaChcIj4+XCIpLGEuam9pbihcIlxcblwiKX1yZXR1cm5cIlwiK3J9LGV9KCk7ZXhwb3J0e190IGFzIEFjcm9Gb3JtLEF0IGFzIEFjcm9Gb3JtQXBwZWFyYW5jZSx2dCBhcyBBY3JvRm9ybUJ1dHRvbixOdCBhcyBBY3JvRm9ybUNoZWNrQm94LGR0IGFzIEFjcm9Gb3JtQ2hvaWNlRmllbGQsZ3QgYXMgQWNyb0Zvcm1Db21ib0JveCxtdCBhcyBBY3JvRm9ybUVkaXRCb3gscHQgYXMgQWNyb0Zvcm1MaXN0Qm94LHh0IGFzIEFjcm9Gb3JtUGFzc3dvcmRGaWVsZCxidCBhcyBBY3JvRm9ybVB1c2hCdXR0b24seXQgYXMgQWNyb0Zvcm1SYWRpb0J1dHRvbixMdCBhcyBBY3JvRm9ybVRleHRGaWVsZCxPIGFzIEdTdGF0ZSxNIGFzIFNoYWRpbmdQYXR0ZXJuLHEgYXMgVGlsaW5nUGF0dGVybixFIGFzIGRlZmF1bHQsRSBhcyBqc1BERn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1qc3BkZi5lcy5taW4uanMubWFwXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/jspdf/dist/jspdf.es.min.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/Icon.js":
/*!****************************************************!*\
!*** ./node_modules/lucide-react/dist/esm/Icon.js ***!
\****************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ Icon; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _defaultAttributes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./defaultAttributes.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/defaultAttributes.js\");\n/* harmony import */ var _shared_src_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./shared/src/utils.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/shared/src/utils.js\");\n/**\n * @license lucide-react v0.408.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \n\n\nconst Icon = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(_c = (param, ref)=>{\n let { color = \"currentColor\", size = 24, strokeWidth = 2, absoluteStrokeWidth, className = \"\", children, iconNode, ...rest } = param;\n return /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(\"svg\", {\n ref,\n ..._defaultAttributes_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: (0,_shared_src_utils_js__WEBPACK_IMPORTED_MODULE_2__.mergeClasses)(\"lucide\", className),\n ...rest\n }, [\n ...iconNode.map((param)=>{\n let [tag, attrs] = param;\n return /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(tag, attrs);\n }),\n ...Array.isArray(children) ? children : [\n children\n ]\n ]);\n});\n_c1 = Icon;\n //# sourceMappingURL=Icon.js.map\nvar _c, _c1;\n$RefreshReg$(_c, \"Icon$forwardRef\");\n$RefreshReg$(_c1, \"Icon\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vSWNvbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBd0JBLE1BQU1BLHFCQUFPQyxpREFBVUEsTUFDckIsUUFXRUM7UUFWQSxFQUNFQyxRQUFRLGdCQUNSQyxPQUFPLElBQ1BDLGNBQWMsR0FDZEMsbUJBQUEsRUFDQUMsWUFBWSxJQUNaQyxRQUFBLEVBQ0FDLFFBQUEsRUFDQSxHQUFHQyxNQUFBO0lBSUUscUJBQUFDLG9EQUFhQSxDQUNsQixPQUNBO1FBQ0VUO1FBQ0EsR0FBR1UsNkRBQUE7UUFDSEMsT0FBT1Q7UUFDUFUsUUFBUVY7UUFDUlcsUUFBUVo7UUFDUkUsYUFBYUMsc0JBQXVCVSxPQUFPWCxlQUFlLEtBQU1XLE9BQU9aLFFBQVFDO1FBQy9FRSxXQUFXVSxrRUFBWUEsQ0FBQyxVQUFVVjtRQUNsQyxHQUFHRyxJQUFBO0lBQ0wsR0FDQTtXQUNLRCxTQUFTUyxHQUFBLENBQUk7Z0JBQUMsQ0FBQ0MsS0FBS0MsTUFBVztpQ0FBQVQsb0RBQWFBLENBQUNRLEtBQUtDOztXQUNqREMsTUFBTUMsT0FBQSxDQUFRZCxZQUFZQSxXQUFXO1lBQUNBO1NBQVE7S0FDcEQ7QUFFSiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL0ljb24udHM/YWRhYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVFbGVtZW50LCBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGRlZmF1bHRBdHRyaWJ1dGVzIGZyb20gJy4vZGVmYXVsdEF0dHJpYnV0ZXMnO1xuaW1wb3J0IHsgSWNvbk5vZGUsIEx1Y2lkZVByb3BzIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBtZXJnZUNsYXNzZXMgfSBmcm9tICdAbHVjaWRlL3NoYXJlZCc7XG5cbmludGVyZmFjZSBJY29uQ29tcG9uZW50UHJvcHMgZXh0ZW5kcyBMdWNpZGVQcm9wcyB7XG4gIGljb25Ob2RlOiBJY29uTm9kZTtcbn1cblxuLyoqXG4gKiBMdWNpZGUgaWNvbiBjb21wb25lbnRcbiAqXG4gKiBAY29tcG9uZW50IEljb25cbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BzLmNvbG9yIC0gVGhlIGNvbG9yIG9mIHRoZSBpY29uXG4gKiBAcGFyYW0ge251bWJlcn0gcHJvcHMuc2l6ZSAtIFRoZSBzaXplIG9mIHRoZSBpY29uXG4gKiBAcGFyYW0ge251bWJlcn0gcHJvcHMuc3Ryb2tlV2lkdGggLSBUaGUgc3Ryb2tlIHdpZHRoIG9mIHRoZSBpY29uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHByb3BzLmFic29sdXRlU3Ryb2tlV2lkdGggLSBXaGV0aGVyIHRvIHVzZSBhYnNvbHV0ZSBzdHJva2Ugd2lkdGhcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wcy5jbGFzc05hbWUgLSBUaGUgY2xhc3MgbmFtZSBvZiB0aGUgaWNvblxuICogQHBhcmFtIHtJY29uTm9kZX0gcHJvcHMuY2hpbGRyZW4gLSBUaGUgY2hpbGRyZW4gb2YgdGhlIGljb25cbiAqIEBwYXJhbSB7SWNvbk5vZGV9IHByb3BzLmljb25Ob2RlIC0gVGhlIGljb24gbm9kZSBvZiB0aGUgaWNvblxuICpcbiAqIEByZXR1cm5zIHtGb3J3YXJkUmVmRXhvdGljQ29tcG9uZW50fSBMdWNpZGVJY29uXG4gKi9cbmNvbnN0IEljb24gPSBmb3J3YXJkUmVmPFNWR1NWR0VsZW1lbnQsIEljb25Db21wb25lbnRQcm9wcz4oXG4gIChcbiAgICB7XG4gICAgICBjb2xvciA9ICdjdXJyZW50Q29sb3InLFxuICAgICAgc2l6ZSA9IDI0LFxuICAgICAgc3Ryb2tlV2lkdGggPSAyLFxuICAgICAgYWJzb2x1dGVTdHJva2VXaWR0aCxcbiAgICAgIGNsYXNzTmFtZSA9ICcnLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBpY29uTm9kZSxcbiAgICAgIC4uLnJlc3RcbiAgICB9LFxuICAgIHJlZixcbiAgKSA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAnc3ZnJyxcbiAgICAgIHtcbiAgICAgICAgcmVmLFxuICAgICAgICAuLi5kZWZhdWx0QXR0cmlidXRlcyxcbiAgICAgICAgd2lkdGg6IHNpemUsXG4gICAgICAgIGhlaWdodDogc2l6ZSxcbiAgICAgICAgc3Ryb2tlOiBjb2xvcixcbiAgICAgICAgc3Ryb2tlV2lkdGg6IGFic29sdXRlU3Ryb2tlV2lkdGggPyAoTnVtYmVyKHN0cm9rZVdpZHRoKSAqIDI0KSAvIE51bWJlcihzaXplKSA6IHN0cm9rZVdpZHRoLFxuICAgICAgICBjbGFzc05hbWU6IG1lcmdlQ2xhc3NlcygnbHVjaWRlJywgY2xhc3NOYW1lKSxcbiAgICAgICAgLi4ucmVzdCxcbiAgICAgIH0sXG4gICAgICBbXG4gICAgICAgIC4uLmljb25Ob2RlLm1hcCgoW3RhZywgYXR0cnNdKSA9PiBjcmVhdGVFbGVtZW50KHRhZywgYXR0cnMpKSxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pID8gY2hpbGRyZW4gOiBbY2hpbGRyZW5dKSxcbiAgICAgIF0sXG4gICAgKTtcbiAgfSxcbik7XG5cbmV4cG9ydCBkZWZhdWx0IEljb247XG4iXSwibmFtZXMiOlsiSWNvbiIsImZvcndhcmRSZWYiLCJyZWYiLCJjb2xvciIsInNpemUiLCJzdHJva2VXaWR0aCIsImFic29sdXRlU3Ryb2tlV2lkdGgiLCJjbGFzc05hbWUiLCJjaGlsZHJlbiIsImljb25Ob2RlIiwicmVzdCIsImNyZWF0ZUVsZW1lbnQiLCJkZWZhdWx0QXR0cmlidXRlcyIsIndpZHRoIiwiaGVpZ2h0Iiwic3Ryb2tlIiwiTnVtYmVyIiwibWVyZ2VDbGFzc2VzIiwibWFwIiwidGFnIiwiYXR0cnMiLCJBcnJheSIsImlzQXJyYXkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/Icon.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js":
/*!****************************************************************!*\
!*** ./node_modules/lucide-react/dist/esm/createLucideIcon.js ***!
\****************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ createLucideIcon; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _shared_src_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./shared/src/utils.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/shared/src/utils.js\");\n/* harmony import */ var _Icon_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Icon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/Icon.js\");\n/**\n * @license lucide-react v0.408.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \n\n\nconst createLucideIcon = (iconName, iconNode)=>{\n const Component = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)((param, ref)=>{\n let { className, ...props } = param;\n return /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_Icon_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n ref,\n iconNode,\n className: (0,_shared_src_utils_js__WEBPACK_IMPORTED_MODULE_2__.mergeClasses)(\"lucide-\".concat((0,_shared_src_utils_js__WEBPACK_IMPORTED_MODULE_2__.toKebabCase)(iconName)), className),\n ...props\n });\n });\n Component.displayName = \"\".concat(iconName);\n return Component;\n};\n //# sourceMappingURL=createLucideIcon.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vY3JlYXRlTHVjaWRlSWNvbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBV00sTUFBQUEsbUJBQW1CLENBQUNDLFVBQWtCQztJQUMxQyxNQUFNQywwQkFBWUMsaURBQVVBLENBQTZCLFFBQTBCQztZQUF6QixFQUFFQyxTQUFXLEtBQUdDLE9BQVM7NkJBQ2pGQyxvREFBYUEsQ0FBQ0MsZ0RBQUlBLEVBQUU7WUFDbEJKO1lBQ0FIO1lBQ0FJLFdBQVdJLGtFQUFZQSxDQUFDLFVBQStCLE9BQXJCQyxpRUFBV0EsQ0FBQ1YsWUFBYUs7WUFDM0QsR0FBR0MsS0FBQTtRQUFBOztJQUlHSixVQUFBUyxXQUFBLEdBQWMsR0FBVyxPQUFSWDtJQUVwQixPQUFBRTtBQUNUIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi9zcmMvY3JlYXRlTHVjaWRlSWNvbi50cz8wNDg4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBtZXJnZUNsYXNzZXMsIHRvS2ViYWJDYXNlIH0gZnJvbSAnQGx1Y2lkZS9zaGFyZWQnO1xuaW1wb3J0IHsgSWNvbk5vZGUsIEx1Y2lkZVByb3BzIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgSWNvbiBmcm9tICcuL0ljb24nO1xuXG4vKipcbiAqIENyZWF0ZSBhIEx1Y2lkZSBpY29uIGNvbXBvbmVudFxuICogQHBhcmFtIHtzdHJpbmd9IGljb25OYW1lXG4gKiBAcGFyYW0ge2FycmF5fSBpY29uTm9kZVxuICogQHJldHVybnMge0ZvcndhcmRSZWZFeG90aWNDb21wb25lbnR9IEx1Y2lkZUljb25cbiAqL1xuY29uc3QgY3JlYXRlTHVjaWRlSWNvbiA9IChpY29uTmFtZTogc3RyaW5nLCBpY29uTm9kZTogSWNvbk5vZGUpID0+IHtcbiAgY29uc3QgQ29tcG9uZW50ID0gZm9yd2FyZFJlZjxTVkdTVkdFbGVtZW50LCBMdWNpZGVQcm9wcz4oKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9LCByZWYpID0+XG4gICAgY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgICByZWYsXG4gICAgICBpY29uTm9kZSxcbiAgICAgIGNsYXNzTmFtZTogbWVyZ2VDbGFzc2VzKGBsdWNpZGUtJHt0b0tlYmFiQ2FzZShpY29uTmFtZSl9YCwgY2xhc3NOYW1lKSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pLFxuICApO1xuXG4gIENvbXBvbmVudC5kaXNwbGF5TmFtZSA9IGAke2ljb25OYW1lfWA7XG5cbiAgcmV0dXJuIENvbXBvbmVudDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUx1Y2lkZUljb247XG4iXSwibmFtZXMiOlsiY3JlYXRlTHVjaWRlSWNvbiIsImljb25OYW1lIiwiaWNvbk5vZGUiLCJDb21wb25lbnQiLCJmb3J3YXJkUmVmIiwicmVmIiwiY2xhc3NOYW1lIiwicHJvcHMiLCJjcmVhdGVFbGVtZW50IiwiSWNvbiIsIm1lcmdlQ2xhc3NlcyIsInRvS2ViYWJDYXNlIiwiZGlzcGxheU5hbWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/defaultAttributes.js":
/*!*****************************************************************!*\
!*** ./node_modules/lucide-react/dist/esm/defaultAttributes.js ***!
\*****************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ defaultAttributes; }\n/* harmony export */ });\n/**\n * @license lucide-react v0.408.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ var defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n //# sourceMappingURL=defaultAttributes.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vZGVmYXVsdEF0dHJpYnV0ZXMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0lBQUEsSUFBZUEsb0JBQUE7SUFDYkMsT0FBTztJQUNQQyxPQUFPO0lBQ1BDLFFBQVE7SUFDUkMsU0FBUztJQUNUQyxNQUFNO0lBQ05DLFFBQVE7SUFDUkMsYUFBYTtJQUNiQyxlQUFlO0lBQ2ZDLGdCQUFnQjtBQUNsQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vc3JjL2RlZmF1bHRBdHRyaWJ1dGVzLnRzPzM3MGMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQge1xuICB4bWxuczogJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyxcbiAgd2lkdGg6IDI0LFxuICBoZWlnaHQ6IDI0LFxuICB2aWV3Qm94OiAnMCAwIDI0IDI0JyxcbiAgZmlsbDogJ25vbmUnLFxuICBzdHJva2U6ICdjdXJyZW50Q29sb3InLFxuICBzdHJva2VXaWR0aDogMixcbiAgc3Ryb2tlTGluZWNhcDogJ3JvdW5kJyxcbiAgc3Ryb2tlTGluZWpvaW46ICdyb3VuZCcsXG59O1xuIl0sIm5hbWVzIjpbImRlZmF1bHRBdHRyaWJ1dGVzIiwieG1sbnMiLCJ3aWR0aCIsImhlaWdodCIsInZpZXdCb3giLCJmaWxsIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/defaultAttributes.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/calendar.js":
/*!**************************************************************!*\
!*** ./node_modules/lucide-react/dist/esm/icons/calendar.js ***!
\**************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ Calendar; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\n * @license lucide-react v0.408.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst Calendar = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"Calendar\", [\n [\n \"path\",\n {\n d: \"M8 2v4\",\n key: \"1cmpym\"\n }\n ],\n [\n \"path\",\n {\n d: \"M16 2v4\",\n key: \"4m81vk\"\n }\n ],\n [\n \"rect\",\n {\n width: \"18\",\n height: \"18\",\n x: \"3\",\n y: \"4\",\n rx: \"2\",\n key: \"1hopcy\"\n }\n ],\n [\n \"path\",\n {\n d: \"M3 10h18\",\n key: \"8toen8\"\n }\n ]\n]);\n //# sourceMappingURL=calendar.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFhTSxNQUFBQSxXQUFXQyxnRUFBZ0JBLENBQUMsWUFBWTtJQUM1QztRQUFDO1FBQVE7WUFBRUMsR0FBRztZQUFVQyxLQUFLO1FBQUE7S0FBVTtJQUN2QztRQUFDO1FBQVE7WUFBRUQsR0FBRztZQUFXQyxLQUFLO1FBQUE7S0FBVTtJQUN4QztRQUFDO1FBQVE7WUFBRUMsT0FBTztZQUFNQyxRQUFRO1lBQU1DLEdBQUc7WUFBS0MsR0FBRztZQUFLQyxJQUFJO1lBQUtMLEtBQUs7UUFBQTtLQUFVO0lBQzlFO1FBQUM7UUFBUTtZQUFFRCxHQUFHO1lBQVlDLEtBQUs7UUFBQTtLQUFVO0NBQzFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi8uLi9zcmMvaWNvbnMvY2FsZW5kYXIudHM/ZjM3ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3JlYXRlTHVjaWRlSWNvbiBmcm9tICcuLi9jcmVhdGVMdWNpZGVJY29uJztcblxuLyoqXG4gKiBAY29tcG9uZW50IEBuYW1lIENhbGVuZGFyXG4gKiBAZGVzY3JpcHRpb24gTHVjaWRlIFNWRyBpY29uIGNvbXBvbmVudCwgcmVuZGVycyBTVkcgRWxlbWVudCB3aXRoIGNoaWxkcmVuLlxuICpcbiAqIEBwcmV2aWV3ICFbaW1nXShkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUFnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JZ29nSUhkcFpIUm9QU0l5TkNJS0lDQm9aV2xuYUhROUlqSTBJZ29nSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJS0lDQm1hV3hzUFNKdWIyNWxJZ29nSUhOMGNtOXJaVDBpSXpBd01DSWdjM1I1YkdVOUltSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1abVk3SUdKdmNtUmxjaTF5WVdScGRYTTZJREp3ZUNJS0lDQnpkSEp2YTJVdGQybGtkR2c5SWpJaUNpQWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWdvZ0lITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpQ2o0S0lDQThjR0YwYUNCa1BTSk5PQ0F5ZGpRaUlDOCtDaUFnUEhCaGRHZ2daRDBpVFRFMklESjJOQ0lnTHo0S0lDQThjbVZqZENCM2FXUjBhRDBpTVRnaUlHaGxhV2RvZEQwaU1UZ2lJSGc5SWpNaUlIazlJalFpSUhKNFBTSXlJaUF2UGdvZ0lEeHdZWFJvSUdROUlrMHpJREV3YURFNElpQXZQZ284TDNOMlp6NEspIC0gaHR0cHM6Ly9sdWNpZGUuZGV2L2ljb25zL2NhbGVuZGFyXG4gKiBAc2VlIGh0dHBzOi8vbHVjaWRlLmRldi9ndWlkZS9wYWNrYWdlcy9sdWNpZGUtcmVhY3QgLSBEb2N1bWVudGF0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gTHVjaWRlIGljb25zIHByb3BzIGFuZCBhbnkgdmFsaWQgU1ZHIGF0dHJpYnV0ZVxuICogQHJldHVybnMge0pTWC5FbGVtZW50fSBKU1ggRWxlbWVudFxuICpcbiAqL1xuY29uc3QgQ2FsZW5kYXIgPSBjcmVhdGVMdWNpZGVJY29uKCdDYWxlbmRhcicsIFtcbiAgWydwYXRoJywgeyBkOiAnTTggMnY0Jywga2V5OiAnMWNtcHltJyB9XSxcbiAgWydwYXRoJywgeyBkOiAnTTE2IDJ2NCcsIGtleTogJzRtODF2aycgfV0sXG4gIFsncmVjdCcsIHsgd2lkdGg6ICcxOCcsIGhlaWdodDogJzE4JywgeDogJzMnLCB5OiAnNCcsIHJ4OiAnMicsIGtleTogJzFob3BjeScgfV0sXG4gIFsncGF0aCcsIHsgZDogJ00zIDEwaDE4Jywga2V5OiAnOHRvZW44JyB9XSxcbl0pO1xuXG5leHBvcnQgZGVmYXVsdCBDYWxlbmRhcjtcbiJdLCJuYW1lcyI6WyJDYWxlbmRhciIsImNyZWF0ZUx1Y2lkZUljb24iLCJkIiwia2V5Iiwid2lkdGgiLCJoZWlnaHQiLCJ4IiwieSIsInJ4Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/calendar.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/circle-check.js":
/*!******************************************************************!*\
!*** ./node_modules/lucide-react/dist/esm/icons/circle-check.js ***!
\******************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ CircleCheck; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\n * @license lucide-react v0.408.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst CircleCheck = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"CircleCheck\", [\n [\n \"circle\",\n {\n cx: \"12\",\n cy: \"12\",\n r: \"10\",\n key: \"1mglay\"\n }\n ],\n [\n \"path\",\n {\n d: \"m9 12 2 2 4-4\",\n key: \"dzmm74\"\n }\n ]\n]);\n //# sourceMappingURL=circle-check.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWNoZWNrLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBYU0sTUFBQUEsY0FBY0MsZ0VBQWdCQSxDQUFDLGVBQWU7SUFDbEQ7UUFBQztRQUFVO1lBQUVDLElBQUk7WUFBTUMsSUFBSTtZQUFNQyxHQUFHO1lBQU1DLEtBQUs7UUFBQTtLQUFVO0lBQ3pEO1FBQUM7UUFBUTtZQUFFQyxHQUFHO1lBQWlCRCxLQUFLO1FBQUE7S0FBVTtDQUMvQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vLi4vc3JjL2ljb25zL2NpcmNsZS1jaGVjay50cz80YWQ2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVMdWNpZGVJY29uIGZyb20gJy4uL2NyZWF0ZUx1Y2lkZUljb24nO1xuXG4vKipcbiAqIEBjb21wb25lbnQgQG5hbWUgQ2lyY2xlQ2hlY2tcbiAqIEBkZXNjcmlwdGlvbiBMdWNpZGUgU1ZHIGljb24gY29tcG9uZW50LCByZW5kZXJzIFNWRyBFbGVtZW50IHdpdGggY2hpbGRyZW4uXG4gKlxuICogQHByZXZpZXcgIVtpbWddKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklnb2dJSGRwWkhSb1BTSXlOQ0lLSUNCb1pXbG5hSFE5SWpJMElnb2dJSFpwWlhkQ2IzZzlJakFnTUNBeU5DQXlOQ0lLSUNCbWFXeHNQU0p1YjI1bElnb2dJSE4wY205clpUMGlJekF3TUNJZ2MzUjViR1U5SW1KaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNObVptWTdJR0p2Y21SbGNpMXlZV1JwZFhNNklESndlQ0lLSUNCemRISnZhMlV0ZDJsa2RHZzlJaklpQ2lBZ2MzUnliMnRsTFd4cGJtVmpZWEE5SW5KdmRXNWtJZ29nSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpY205MWJtUWlDajRLSUNBOFkybHlZMnhsSUdONFBTSXhNaUlnWTNrOUlqRXlJaUJ5UFNJeE1DSWdMejRLSUNBOGNHRjBhQ0JrUFNKdE9TQXhNaUF5SURJZ05DMDBJaUF2UGdvOEwzTjJaejRLKSAtIGh0dHBzOi8vbHVjaWRlLmRldi9pY29ucy9jaXJjbGUtY2hlY2tcbiAqIEBzZWUgaHR0cHM6Ly9sdWNpZGUuZGV2L2d1aWRlL3BhY2thZ2VzL2x1Y2lkZS1yZWFjdCAtIERvY3VtZW50YXRpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBMdWNpZGUgaWNvbnMgcHJvcHMgYW5kIGFueSB2YWxpZCBTVkcgYXR0cmlidXRlXG4gKiBAcmV0dXJucyB7SlNYLkVsZW1lbnR9IEpTWCBFbGVtZW50XG4gKlxuICovXG5jb25zdCBDaXJjbGVDaGVjayA9IGNyZWF0ZUx1Y2lkZUljb24oJ0NpcmNsZUNoZWNrJywgW1xuICBbJ2NpcmNsZScsIHsgY3g6ICcxMicsIGN5OiAnMTInLCByOiAnMTAnLCBrZXk6ICcxbWdsYXknIH1dLFxuICBbJ3BhdGgnLCB7IGQ6ICdtOSAxMiAyIDIgNC00Jywga2V5OiAnZHptbTc0JyB9XSxcbl0pO1xuXG5leHBvcnQgZGVmYXVsdCBDaXJjbGVDaGVjaztcbiJdLCJuYW1lcyI6WyJDaXJjbGVDaGVjayIsImNyZWF0ZUx1Y2lkZUljb24iLCJjeCIsImN5IiwiciIsImtleSIsImQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/circle-check.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/clock.js":
/*!***********************************************************!*\
!*** ./node_modules/lucide-react/dist/esm/icons/clock.js ***!
\***********************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ Clock; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\n * @license lucide-react v0.408.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst Clock = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"Clock\", [\n [\n \"circle\",\n {\n cx: \"12\",\n cy: \"12\",\n r: \"10\",\n key: \"1mglay\"\n }\n ],\n [\n \"polyline\",\n {\n points: \"12 6 12 12 16 14\",\n key: \"68esgv\"\n }\n ]\n]);\n //# sourceMappingURL=clock.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvY2xvY2suanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFhTSxNQUFBQSxRQUFRQyxnRUFBZ0JBLENBQUMsU0FBUztJQUN0QztRQUFDO1FBQVU7WUFBRUMsSUFBSTtZQUFNQyxJQUFJO1lBQU1DLEdBQUc7WUFBTUMsS0FBSztRQUFBO0tBQVU7SUFDekQ7UUFBQztRQUFZO1lBQUVDLFFBQVE7WUFBb0JELEtBQUs7UUFBQTtLQUFVO0NBQzNEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi8uLi9zcmMvaWNvbnMvY2xvY2sudHM/ZjViYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3JlYXRlTHVjaWRlSWNvbiBmcm9tICcuLi9jcmVhdGVMdWNpZGVJY29uJztcblxuLyoqXG4gKiBAY29tcG9uZW50IEBuYW1lIENsb2NrXG4gKiBAZGVzY3JpcHRpb24gTHVjaWRlIFNWRyBpY29uIGNvbXBvbmVudCwgcmVuZGVycyBTVkcgRWxlbWVudCB3aXRoIGNoaWxkcmVuLlxuICpcbiAqIEBwcmV2aWV3ICFbaW1nXShkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUFnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JZ29nSUhkcFpIUm9QU0l5TkNJS0lDQm9aV2xuYUhROUlqSTBJZ29nSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJS0lDQm1hV3hzUFNKdWIyNWxJZ29nSUhOMGNtOXJaVDBpSXpBd01DSWdjM1I1YkdVOUltSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1abVk3SUdKdmNtUmxjaTF5WVdScGRYTTZJREp3ZUNJS0lDQnpkSEp2YTJVdGQybGtkR2c5SWpJaUNpQWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWdvZ0lITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpQ2o0S0lDQThZMmx5WTJ4bElHTjRQU0l4TWlJZ1kzazlJakV5SWlCeVBTSXhNQ0lnTHo0S0lDQThjRzlzZVd4cGJtVWdjRzlwYm5SelBTSXhNaUEySURFeUlERXlJREUySURFMElpQXZQZ284TDNOMlp6NEspIC0gaHR0cHM6Ly9sdWNpZGUuZGV2L2ljb25zL2Nsb2NrXG4gKiBAc2VlIGh0dHBzOi8vbHVjaWRlLmRldi9ndWlkZS9wYWNrYWdlcy9sdWNpZGUtcmVhY3QgLSBEb2N1bWVudGF0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gTHVjaWRlIGljb25zIHByb3BzIGFuZCBhbnkgdmFsaWQgU1ZHIGF0dHJpYnV0ZVxuICogQHJldHVybnMge0pTWC5FbGVtZW50fSBKU1ggRWxlbWVudFxuICpcbiAqL1xuY29uc3QgQ2xvY2sgPSBjcmVhdGVMdWNpZGVJY29uKCdDbG9jaycsIFtcbiAgWydjaXJjbGUnLCB7IGN4OiAnMTInLCBjeTogJzEyJywgcjogJzEwJywga2V5OiAnMW1nbGF5JyB9XSxcbiAgWydwb2x5bGluZScsIHsgcG9pbnRzOiAnMTIgNiAxMiAxMiAxNiAxNCcsIGtleTogJzY4ZXNndicgfV0sXG5dKTtcblxuZXhwb3J0IGRlZmF1bHQgQ2xvY2s7XG4iXSwibmFtZXMiOlsiQ2xvY2siLCJjcmVhdGVMdWNpZGVJY29uIiwiY3giLCJjeSIsInIiLCJrZXkiLCJwb2ludHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/clock.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/download.js":
/*!**************************************************************!*\
!*** ./node_modules/lucide-react/dist/esm/icons/download.js ***!
\**************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ Download; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\n * @license lucide-react v0.408.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst Download = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"Download\", [\n [\n \"path\",\n {\n d: \"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\",\n key: \"ih7n3h\"\n }\n ],\n [\n \"polyline\",\n {\n points: \"7 10 12 15 17 10\",\n key: \"2ggqvy\"\n }\n ],\n [\n \"line\",\n {\n x1: \"12\",\n x2: \"12\",\n y1: \"15\",\n y2: \"3\",\n key: \"1vk2je\"\n }\n ]\n]);\n //# sourceMappingURL=download.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvZG93bmxvYWQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFhTSxNQUFBQSxXQUFXQyxnRUFBZ0JBLENBQUMsWUFBWTtJQUM1QztRQUFDO1FBQVE7WUFBRUMsR0FBRztZQUE2Q0MsS0FBSztRQUFBO0tBQVU7SUFDMUU7UUFBQztRQUFZO1lBQUVDLFFBQVE7WUFBb0JELEtBQUs7UUFBQTtLQUFVO0lBQzFEO1FBQUM7UUFBUTtZQUFFRSxJQUFJO1lBQU1DLElBQUk7WUFBTUMsSUFBSTtZQUFNQyxJQUFJO1lBQUtMLEtBQUs7UUFBQTtLQUFVO0NBQ2xFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi8uLi9zcmMvaWNvbnMvZG93bmxvYWQudHM/N2EzZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3JlYXRlTHVjaWRlSWNvbiBmcm9tICcuLi9jcmVhdGVMdWNpZGVJY29uJztcblxuLyoqXG4gKiBAY29tcG9uZW50IEBuYW1lIERvd25sb2FkXG4gKiBAZGVzY3JpcHRpb24gTHVjaWRlIFNWRyBpY29uIGNvbXBvbmVudCwgcmVuZGVycyBTVkcgRWxlbWVudCB3aXRoIGNoaWxkcmVuLlxuICpcbiAqIEBwcmV2aWV3ICFbaW1nXShkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUFnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JZ29nSUhkcFpIUm9QU0l5TkNJS0lDQm9aV2xuYUhROUlqSTBJZ29nSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJS0lDQm1hV3hzUFNKdWIyNWxJZ29nSUhOMGNtOXJaVDBpSXpBd01DSWdjM1I1YkdVOUltSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1abVk3SUdKdmNtUmxjaTF5WVdScGRYTTZJREp3ZUNJS0lDQnpkSEp2YTJVdGQybGtkR2c5SWpJaUNpQWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWdvZ0lITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpQ2o0S0lDQThjR0YwYUNCa1BTSk5NakVnTVRWMk5HRXlJRElnTUNBd0lERXRNaUF5U0RWaE1pQXlJREFnTUNBeExUSXRNbll0TkNJZ0x6NEtJQ0E4Y0c5c2VXeHBibVVnY0c5cGJuUnpQU0kzSURFd0lERXlJREUxSURFM0lERXdJaUF2UGdvZ0lEeHNhVzVsSUhneFBTSXhNaUlnZURJOUlqRXlJaUI1TVQwaU1UVWlJSGt5UFNJeklpQXZQZ284TDNOMlp6NEspIC0gaHR0cHM6Ly9sdWNpZGUuZGV2L2ljb25zL2Rvd25sb2FkXG4gKiBAc2VlIGh0dHBzOi8vbHVjaWRlLmRldi9ndWlkZS9wYWNrYWdlcy9sdWNpZGUtcmVhY3QgLSBEb2N1bWVudGF0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gTHVjaWRlIGljb25zIHByb3BzIGFuZCBhbnkgdmFsaWQgU1ZHIGF0dHJpYnV0ZVxuICogQHJldHVybnMge0pTWC5FbGVtZW50fSBKU1ggRWxlbWVudFxuICpcbiAqL1xuY29uc3QgRG93bmxvYWQgPSBjcmVhdGVMdWNpZGVJY29uKCdEb3dubG9hZCcsIFtcbiAgWydwYXRoJywgeyBkOiAnTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQnLCBrZXk6ICdpaDduM2gnIH1dLFxuICBbJ3BvbHlsaW5lJywgeyBwb2ludHM6ICc3IDEwIDEyIDE1IDE3IDEwJywga2V5OiAnMmdncXZ5JyB9XSxcbiAgWydsaW5lJywgeyB4MTogJzEyJywgeDI6ICcxMicsIHkxOiAnMTUnLCB5MjogJzMnLCBrZXk6ICcxdmsyamUnIH1dLFxuXSk7XG5cbmV4cG9ydCBkZWZhdWx0IERvd25sb2FkO1xuIl0sIm5hbWVzIjpbIkRvd25sb2FkIiwiY3JlYXRlTHVjaWRlSWNvbiIsImQiLCJrZXkiLCJwb2ludHMiLCJ4MSIsIngyIiwieTEiLCJ5MiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/download.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/ellipsis-vertical.js":
/*!***********************************************************************!*\
!*** ./node_modules/lucide-react/dist/esm/icons/ellipsis-vertical.js ***!
\***********************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ EllipsisVertical; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\n * @license lucide-react v0.408.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst EllipsisVertical = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"EllipsisVertical\", [\n [\n \"circle\",\n {\n cx: \"12\",\n cy: \"12\",\n r: \"1\",\n key: \"41hilf\"\n }\n ],\n [\n \"circle\",\n {\n cx: \"12\",\n cy: \"5\",\n r: \"1\",\n key: \"gxeob9\"\n }\n ],\n [\n \"circle\",\n {\n cx: \"12\",\n cy: \"19\",\n r: \"1\",\n key: \"lyex9k\"\n }\n ]\n]);\n //# sourceMappingURL=ellipsis-vertical.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvZWxsaXBzaXMtdmVydGljYWwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFhTSxNQUFBQSxtQkFBbUJDLGdFQUFnQkEsQ0FBQyxvQkFBb0I7SUFDNUQ7UUFBQztRQUFVO1lBQUVDLElBQUk7WUFBTUMsSUFBSTtZQUFNQyxHQUFHO1lBQUtDLEtBQUs7UUFBQTtLQUFVO0lBQ3hEO1FBQUM7UUFBVTtZQUFFSCxJQUFJO1lBQU1DLElBQUk7WUFBS0MsR0FBRztZQUFLQyxLQUFLO1FBQUE7S0FBVTtJQUN2RDtRQUFDO1FBQVU7WUFBRUgsSUFBSTtZQUFNQyxJQUFJO1lBQU1DLEdBQUc7WUFBS0MsS0FBSztRQUFBO0tBQVU7Q0FDekQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uL3NyYy9pY29ucy9lbGxpcHNpcy12ZXJ0aWNhbC50cz9hMTI3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVMdWNpZGVJY29uIGZyb20gJy4uL2NyZWF0ZUx1Y2lkZUljb24nO1xuXG4vKipcbiAqIEBjb21wb25lbnQgQG5hbWUgRWxsaXBzaXNWZXJ0aWNhbFxuICogQGRlc2NyaXB0aW9uIEx1Y2lkZSBTVkcgaWNvbiBjb21wb25lbnQsIHJlbmRlcnMgU1ZHIEVsZW1lbnQgd2l0aCBjaGlsZHJlbi5cbiAqXG4gKiBAcHJldmlldyAhW2ltZ10oZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlBZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWdvZ0lIZHBaSFJvUFNJeU5DSUtJQ0JvWldsbmFIUTlJakkwSWdvZ0lIWnBaWGRDYjNnOUlqQWdNQ0F5TkNBeU5DSUtJQ0JtYVd4c1BTSnViMjVsSWdvZ0lITjBjbTlyWlQwaUl6QXdNQ0lnYzNSNWJHVTlJbUpoWTJ0bmNtOTFibVF0WTI5c2IzSTZJQ05tWm1ZN0lHSnZjbVJsY2kxeVlXUnBkWE02SURKd2VDSUtJQ0J6ZEhKdmEyVXRkMmxrZEdnOUlqSWlDaUFnYzNSeWIydGxMV3hwYm1WallYQTlJbkp2ZFc1a0lnb2dJSE4wY205clpTMXNhVzVsYW05cGJqMGljbTkxYm1RaUNqNEtJQ0E4WTJseVkyeGxJR040UFNJeE1pSWdZM2s5SWpFeUlpQnlQU0l4SWlBdlBnb2dJRHhqYVhKamJHVWdZM2c5SWpFeUlpQmplVDBpTlNJZ2NqMGlNU0lnTHo0S0lDQThZMmx5WTJ4bElHTjRQU0l4TWlJZ1kzazlJakU1SWlCeVBTSXhJaUF2UGdvOEwzTjJaejRLKSAtIGh0dHBzOi8vbHVjaWRlLmRldi9pY29ucy9lbGxpcHNpcy12ZXJ0aWNhbFxuICogQHNlZSBodHRwczovL2x1Y2lkZS5kZXYvZ3VpZGUvcGFja2FnZXMvbHVjaWRlLXJlYWN0IC0gRG9jdW1lbnRhdGlvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIEx1Y2lkZSBpY29ucyBwcm9wcyBhbmQgYW55IHZhbGlkIFNWRyBhdHRyaWJ1dGVcbiAqIEByZXR1cm5zIHtKU1guRWxlbWVudH0gSlNYIEVsZW1lbnRcbiAqXG4gKi9cbmNvbnN0IEVsbGlwc2lzVmVydGljYWwgPSBjcmVhdGVMdWNpZGVJY29uKCdFbGxpcHNpc1ZlcnRpY2FsJywgW1xuICBbJ2NpcmNsZScsIHsgY3g6ICcxMicsIGN5OiAnMTInLCByOiAnMScsIGtleTogJzQxaGlsZicgfV0sXG4gIFsnY2lyY2xlJywgeyBjeDogJzEyJywgY3k6ICc1JywgcjogJzEnLCBrZXk6ICdneGVvYjknIH1dLFxuICBbJ2NpcmNsZScsIHsgY3g6ICcxMicsIGN5OiAnMTknLCByOiAnMScsIGtleTogJ2x5ZXg5aycgfV0sXG5dKTtcblxuZXhwb3J0IGRlZmF1bHQgRWxsaXBzaXNWZXJ0aWNhbDtcbiJdLCJuYW1lcyI6WyJFbGxpcHNpc1ZlcnRpY2FsIiwiY3JlYXRlTHVjaWRlSWNvbiIsImN4IiwiY3kiLCJyIiwia2V5Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/ellipsis-vertical.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/external-link.js":
/*!*******************************************************************!*\
!*** ./node_modules/lucide-react/dist/esm/icons/external-link.js ***!
\*******************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ ExternalLink; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\n * @license lucide-react v0.408.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst ExternalLink = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"ExternalLink\", [\n [\n \"path\",\n {\n d: \"M15 3h6v6\",\n key: \"1q9fwt\"\n }\n ],\n [\n \"path\",\n {\n d: \"M10 14 21 3\",\n key: \"gplh6r\"\n }\n ],\n [\n \"path\",\n {\n d: \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\",\n key: \"a6xqqp\"\n }\n ]\n]);\n //# sourceMappingURL=external-link.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvZXh0ZXJuYWwtbGluay5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQWFNLE1BQUFBLGVBQWVDLGdFQUFnQkEsQ0FBQyxnQkFBZ0I7SUFDcEQ7UUFBQztRQUFRO1lBQUVDLEdBQUc7WUFBYUMsS0FBSztRQUFBO0tBQVU7SUFDMUM7UUFBQztRQUFRO1lBQUVELEdBQUc7WUFBZUMsS0FBSztRQUFBO0tBQVU7SUFDNUM7UUFBQztRQUFRO1lBQUVELEdBQUc7WUFBNERDLEtBQUs7UUFBQTtLQUFVO0NBQzFGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi8uLi9zcmMvaWNvbnMvZXh0ZXJuYWwtbGluay50cz85ZGFjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVMdWNpZGVJY29uIGZyb20gJy4uL2NyZWF0ZUx1Y2lkZUljb24nO1xuXG4vKipcbiAqIEBjb21wb25lbnQgQG5hbWUgRXh0ZXJuYWxMaW5rXG4gKiBAZGVzY3JpcHRpb24gTHVjaWRlIFNWRyBpY29uIGNvbXBvbmVudCwgcmVuZGVycyBTVkcgRWxlbWVudCB3aXRoIGNoaWxkcmVuLlxuICpcbiAqIEBwcmV2aWV3ICFbaW1nXShkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUFnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JZ29nSUhkcFpIUm9QU0l5TkNJS0lDQm9aV2xuYUhROUlqSTBJZ29nSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJS0lDQm1hV3hzUFNKdWIyNWxJZ29nSUhOMGNtOXJaVDBpSXpBd01DSWdjM1I1YkdVOUltSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1abVk3SUdKdmNtUmxjaTF5WVdScGRYTTZJREp3ZUNJS0lDQnpkSEp2YTJVdGQybGtkR2c5SWpJaUNpQWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWdvZ0lITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpQ2o0S0lDQThjR0YwYUNCa1BTSk5NVFVnTTJnMmRqWWlJQzgrQ2lBZ1BIQmhkR2dnWkQwaVRURXdJREUwSURJeElETWlJQzgrQ2lBZ1BIQmhkR2dnWkQwaVRURTRJREV6ZGpaaE1pQXlJREFnTUNBeExUSWdNa2cxWVRJZ01pQXdJREFnTVMweUxUSldPR0V5SURJZ01DQXdJREVnTWkweWFEWWlJQzgrQ2p3dmMzWm5QZ289KSAtIGh0dHBzOi8vbHVjaWRlLmRldi9pY29ucy9leHRlcm5hbC1saW5rXG4gKiBAc2VlIGh0dHBzOi8vbHVjaWRlLmRldi9ndWlkZS9wYWNrYWdlcy9sdWNpZGUtcmVhY3QgLSBEb2N1bWVudGF0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gTHVjaWRlIGljb25zIHByb3BzIGFuZCBhbnkgdmFsaWQgU1ZHIGF0dHJpYnV0ZVxuICogQHJldHVybnMge0pTWC5FbGVtZW50fSBKU1ggRWxlbWVudFxuICpcbiAqL1xuY29uc3QgRXh0ZXJuYWxMaW5rID0gY3JlYXRlTHVjaWRlSWNvbignRXh0ZXJuYWxMaW5rJywgW1xuICBbJ3BhdGgnLCB7IGQ6ICdNMTUgM2g2djYnLCBrZXk6ICcxcTlmd3QnIH1dLFxuICBbJ3BhdGgnLCB7IGQ6ICdNMTAgMTQgMjEgMycsIGtleTogJ2dwbGg2cicgfV0sXG4gIFsncGF0aCcsIHsgZDogJ00xOCAxM3Y2YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmg2Jywga2V5OiAnYTZ4cXFwJyB9XSxcbl0pO1xuXG5leHBvcnQgZGVmYXVsdCBFeHRlcm5hbExpbms7XG4iXSwibmFtZXMiOlsiRXh0ZXJuYWxMaW5rIiwiY3JlYXRlTHVjaWRlSWNvbiIsImQiLCJrZXkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/external-link.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/eye.js":
/*!*********************************************************!*\
!*** ./node_modules/lucide-react/dist/esm/icons/eye.js ***!
\*********************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ Eye; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\n * @license lucide-react v0.408.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst Eye = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"Eye\", [\n [\n \"path\",\n {\n d: \"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z\",\n key: \"rwhkz3\"\n }\n ],\n [\n \"circle\",\n {\n cx: \"12\",\n cy: \"12\",\n r: \"3\",\n key: \"1v7zrd\"\n }\n ]\n]);\n //# sourceMappingURL=eye.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvZXllLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBYU0sTUFBQUEsTUFBTUMsZ0VBQWdCQSxDQUFDLE9BQU87SUFDbEM7UUFBQztRQUFRO1lBQUVDLEdBQUc7WUFBZ0RDLEtBQUs7UUFBQTtLQUFVO0lBQzdFO1FBQUM7UUFBVTtZQUFFQyxJQUFJO1lBQU1DLElBQUk7WUFBTUMsR0FBRztZQUFLSCxLQUFLO1FBQUE7S0FBVTtDQUN6RCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vLi4vc3JjL2ljb25zL2V5ZS50cz84Y2I4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVMdWNpZGVJY29uIGZyb20gJy4uL2NyZWF0ZUx1Y2lkZUljb24nO1xuXG4vKipcbiAqIEBjb21wb25lbnQgQG5hbWUgRXllXG4gKiBAZGVzY3JpcHRpb24gTHVjaWRlIFNWRyBpY29uIGNvbXBvbmVudCwgcmVuZGVycyBTVkcgRWxlbWVudCB3aXRoIGNoaWxkcmVuLlxuICpcbiAqIEBwcmV2aWV3ICFbaW1nXShkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUFnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JZ29nSUhkcFpIUm9QU0l5TkNJS0lDQm9aV2xuYUhROUlqSTBJZ29nSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJS0lDQm1hV3hzUFNKdWIyNWxJZ29nSUhOMGNtOXJaVDBpSXpBd01DSWdjM1I1YkdVOUltSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1abVk3SUdKdmNtUmxjaTF5WVdScGRYTTZJREp3ZUNJS0lDQnpkSEp2YTJVdGQybGtkR2c5SWpJaUNpQWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWdvZ0lITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpQ2o0S0lDQThjR0YwYUNCa1BTSk5NaUF4TW5NekxUY2dNVEF0TnlBeE1DQTNJREV3SURjdE15QTNMVEV3SURjdE1UQXROeTB4TUMwM1dpSWdMejRLSUNBOFkybHlZMnhsSUdONFBTSXhNaUlnWTNrOUlqRXlJaUJ5UFNJeklpQXZQZ284TDNOMlp6NEspIC0gaHR0cHM6Ly9sdWNpZGUuZGV2L2ljb25zL2V5ZVxuICogQHNlZSBodHRwczovL2x1Y2lkZS5kZXYvZ3VpZGUvcGFja2FnZXMvbHVjaWRlLXJlYWN0IC0gRG9jdW1lbnRhdGlvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIEx1Y2lkZSBpY29ucyBwcm9wcyBhbmQgYW55IHZhbGlkIFNWRyBhdHRyaWJ1dGVcbiAqIEByZXR1cm5zIHtKU1guRWxlbWVudH0gSlNYIEVsZW1lbnRcbiAqXG4gKi9cbmNvbnN0IEV5ZSA9IGNyZWF0ZUx1Y2lkZUljb24oJ0V5ZScsIFtcbiAgWydwYXRoJywgeyBkOiAnTTIgMTJzMy03IDEwLTcgMTAgNyAxMCA3LTMgNy0xMCA3LTEwLTctMTAtN1onLCBrZXk6ICdyd2hrejMnIH1dLFxuICBbJ2NpcmNsZScsIHsgY3g6ICcxMicsIGN5OiAnMTInLCByOiAnMycsIGtleTogJzF2N3pyZCcgfV0sXG5dKTtcblxuZXhwb3J0IGRlZmF1bHQgRXllO1xuIl0sIm5hbWVzIjpbIkV5ZSIsImNyZWF0ZUx1Y2lkZUljb24iLCJkIiwia2V5IiwiY3giLCJjeSIsInIiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/eye.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/file-text.js":
/*!***************************************************************!*\
!*** ./node_modules/lucide-react/dist/esm/icons/file-text.js ***!
\***************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ FileText; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\n * @license lucide-react v0.408.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst FileText = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"FileText\", [\n [\n \"path\",\n {\n d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\",\n key: \"1rqfz7\"\n }\n ],\n [\n \"path\",\n {\n d: \"M14 2v4a2 2 0 0 0 2 2h4\",\n key: \"tnqrlb\"\n }\n ],\n [\n \"path\",\n {\n d: \"M10 9H8\",\n key: \"b1mrlr\"\n }\n ],\n [\n \"path\",\n {\n d: \"M16 13H8\",\n key: \"t4e002\"\n }\n ],\n [\n \"path\",\n {\n d: \"M16 17H8\",\n key: \"z1uh3a\"\n }\n ]\n]);\n //# sourceMappingURL=file-text.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvZmlsZS10ZXh0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBYU0sTUFBQUEsV0FBV0MsZ0VBQWdCQSxDQUFDLFlBQVk7SUFDNUM7UUFBQztRQUFRO1lBQUVDLEdBQUc7WUFBOERDLEtBQUs7UUFBQTtLQUFVO0lBQzNGO1FBQUM7UUFBUTtZQUFFRCxHQUFHO1lBQTJCQyxLQUFLO1FBQUE7S0FBVTtJQUN4RDtRQUFDO1FBQVE7WUFBRUQsR0FBRztZQUFXQyxLQUFLO1FBQUE7S0FBVTtJQUN4QztRQUFDO1FBQVE7WUFBRUQsR0FBRztZQUFZQyxLQUFLO1FBQUE7S0FBVTtJQUN6QztRQUFDO1FBQVE7WUFBRUQsR0FBRztZQUFZQyxLQUFLO1FBQUE7S0FBVTtDQUMxQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vLi4vc3JjL2ljb25zL2ZpbGUtdGV4dC50cz9mZjNlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVMdWNpZGVJY29uIGZyb20gJy4uL2NyZWF0ZUx1Y2lkZUljb24nO1xuXG4vKipcbiAqIEBjb21wb25lbnQgQG5hbWUgRmlsZVRleHRcbiAqIEBkZXNjcmlwdGlvbiBMdWNpZGUgU1ZHIGljb24gY29tcG9uZW50LCByZW5kZXJzIFNWRyBFbGVtZW50IHdpdGggY2hpbGRyZW4uXG4gKlxuICogQHByZXZpZXcgIVtpbWddKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklnb2dJSGRwWkhSb1BTSXlOQ0lLSUNCb1pXbG5hSFE5SWpJMElnb2dJSFpwWlhkQ2IzZzlJakFnTUNBeU5DQXlOQ0lLSUNCbWFXeHNQU0p1YjI1bElnb2dJSE4wY205clpUMGlJekF3TUNJZ2MzUjViR1U5SW1KaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNObVptWTdJR0p2Y21SbGNpMXlZV1JwZFhNNklESndlQ0lLSUNCemRISnZhMlV0ZDJsa2RHZzlJaklpQ2lBZ2MzUnliMnRsTFd4cGJtVmpZWEE5SW5KdmRXNWtJZ29nSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpY205MWJtUWlDajRLSUNBOGNHRjBhQ0JrUFNKTk1UVWdNa2cyWVRJZ01pQXdJREFnTUMweUlESjJNVFpoTWlBeUlEQWdNQ0F3SURJZ01tZ3hNbUV5SURJZ01DQXdJREFnTWkweVZqZGFJaUF2UGdvZ0lEeHdZWFJvSUdROUlrMHhOQ0F5ZGpSaE1pQXlJREFnTUNBd0lESWdNbWcwSWlBdlBnb2dJRHh3WVhSb0lHUTlJazB4TUNBNVNEZ2lJQzgrQ2lBZ1BIQmhkR2dnWkQwaVRURTJJREV6U0RnaUlDOCtDaUFnUEhCaGRHZ2daRDBpVFRFMklERTNTRGdpSUM4K0Nqd3ZjM1puUGdvPSkgLSBodHRwczovL2x1Y2lkZS5kZXYvaWNvbnMvZmlsZS10ZXh0XG4gKiBAc2VlIGh0dHBzOi8vbHVjaWRlLmRldi9ndWlkZS9wYWNrYWdlcy9sdWNpZGUtcmVhY3QgLSBEb2N1bWVudGF0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gTHVjaWRlIGljb25zIHByb3BzIGFuZCBhbnkgdmFsaWQgU1ZHIGF0dHJpYnV0ZVxuICogQHJldHVybnMge0pTWC5FbGVtZW50fSBKU1ggRWxlbWVudFxuICpcbiAqL1xuY29uc3QgRmlsZVRleHQgPSBjcmVhdGVMdWNpZGVJY29uKCdGaWxlVGV4dCcsIFtcbiAgWydwYXRoJywgeyBkOiAnTTE1IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY3WicsIGtleTogJzFycWZ6NycgfV0sXG4gIFsncGF0aCcsIHsgZDogJ00xNCAydjRhMiAyIDAgMCAwIDIgMmg0Jywga2V5OiAndG5xcmxiJyB9XSxcbiAgWydwYXRoJywgeyBkOiAnTTEwIDlIOCcsIGtleTogJ2IxbXJscicgfV0sXG4gIFsncGF0aCcsIHsgZDogJ00xNiAxM0g4Jywga2V5OiAndDRlMDAyJyB9XSxcbiAgWydwYXRoJywgeyBkOiAnTTE2IDE3SDgnLCBrZXk6ICd6MXVoM2EnIH1dLFxuXSk7XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGVUZXh0O1xuIl0sIm5hbWVzIjpbIkZpbGVUZXh0IiwiY3JlYXRlTHVjaWRlSWNvbiIsImQiLCJrZXkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/file-text.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/package.js":
/*!*************************************************************!*\
!*** ./node_modules/lucide-react/dist/esm/icons/package.js ***!
\*************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ Package; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\n * @license lucide-react v0.408.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst Package = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"Package\", [\n [\n \"path\",\n {\n d: \"m7.5 4.27 9 5.15\",\n key: \"1c824w\"\n }\n ],\n [\n \"path\",\n {\n d: \"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z\",\n key: \"hh9hay\"\n }\n ],\n [\n \"path\",\n {\n d: \"m3.3 7 8.7 5 8.7-5\",\n key: \"g66t2b\"\n }\n ],\n [\n \"path\",\n {\n d: \"M12 22V12\",\n key: \"d0xqtd\"\n }\n ]\n]);\n //# sourceMappingURL=package.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvcGFja2FnZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQWFNLE1BQUFBLFVBQVVDLGdFQUFnQkEsQ0FBQyxXQUFXO0lBQzFDO1FBQUM7UUFBUTtZQUFFQyxHQUFHO1lBQW9CQyxLQUFLO1FBQUE7S0FBVTtJQUNqRDtRQUNFO1FBQ0E7WUFDRUQsR0FBRztZQUNIQyxLQUFLO1FBQ1A7S0FDRjtJQUNBO1FBQUM7UUFBUTtZQUFFRCxHQUFHO1lBQXNCQyxLQUFLO1FBQUE7S0FBVTtJQUNuRDtRQUFDO1FBQVE7WUFBRUQsR0FBRztZQUFhQyxLQUFLO1FBQUE7S0FBVTtDQUMzQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vLi4vc3JjL2ljb25zL3BhY2thZ2UudHM/NDM3NiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3JlYXRlTHVjaWRlSWNvbiBmcm9tICcuLi9jcmVhdGVMdWNpZGVJY29uJztcblxuLyoqXG4gKiBAY29tcG9uZW50IEBuYW1lIFBhY2thZ2VcbiAqIEBkZXNjcmlwdGlvbiBMdWNpZGUgU1ZHIGljb24gY29tcG9uZW50LCByZW5kZXJzIFNWRyBFbGVtZW50IHdpdGggY2hpbGRyZW4uXG4gKlxuICogQHByZXZpZXcgIVtpbWddKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklnb2dJSGRwWkhSb1BTSXlOQ0lLSUNCb1pXbG5hSFE5SWpJMElnb2dJSFpwWlhkQ2IzZzlJakFnTUNBeU5DQXlOQ0lLSUNCbWFXeHNQU0p1YjI1bElnb2dJSE4wY205clpUMGlJekF3TUNJZ2MzUjViR1U5SW1KaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNObVptWTdJR0p2Y21SbGNpMXlZV1JwZFhNNklESndlQ0lLSUNCemRISnZhMlV0ZDJsa2RHZzlJaklpQ2lBZ2MzUnliMnRsTFd4cGJtVmpZWEE5SW5KdmRXNWtJZ29nSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpY205MWJtUWlDajRLSUNBOGNHRjBhQ0JrUFNKdE55NDFJRFF1TWpjZ09TQTFMakUxSWlBdlBnb2dJRHh3WVhSb0lHUTlJazB5TVNBNFlUSWdNaUF3SURBZ01DMHhMVEV1TnpOc0xUY3ROR0V5SURJZ01DQXdJREF0TWlBd2JDMDNJRFJCTWlBeUlEQWdNQ0F3SURNZ09IWTRZVElnTWlBd0lEQWdNQ0F4SURFdU56TnNOeUEwWVRJZ01pQXdJREFnTUNBeUlEQnNOeTAwUVRJZ01pQXdJREFnTUNBeU1TQXhObG9pSUM4K0NpQWdQSEJoZEdnZ1pEMGliVE11TXlBM0lEZ3VOeUExSURndU55MDFJaUF2UGdvZ0lEeHdZWFJvSUdROUlrMHhNaUF5TWxZeE1pSWdMejRLUEM5emRtYytDZz09KSAtIGh0dHBzOi8vbHVjaWRlLmRldi9pY29ucy9wYWNrYWdlXG4gKiBAc2VlIGh0dHBzOi8vbHVjaWRlLmRldi9ndWlkZS9wYWNrYWdlcy9sdWNpZGUtcmVhY3QgLSBEb2N1bWVudGF0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gTHVjaWRlIGljb25zIHByb3BzIGFuZCBhbnkgdmFsaWQgU1ZHIGF0dHJpYnV0ZVxuICogQHJldHVybnMge0pTWC5FbGVtZW50fSBKU1ggRWxlbWVudFxuICpcbiAqL1xuY29uc3QgUGFja2FnZSA9IGNyZWF0ZUx1Y2lkZUljb24oJ1BhY2thZ2UnLCBbXG4gIFsncGF0aCcsIHsgZDogJ203LjUgNC4yNyA5IDUuMTUnLCBrZXk6ICcxYzgyNHcnIH1dLFxuICBbXG4gICAgJ3BhdGgnLFxuICAgIHtcbiAgICAgIGQ6ICdNMjEgOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDctNEEyIDIgMCAwIDAgMjEgMTZaJyxcbiAgICAgIGtleTogJ2hoOWhheScsXG4gICAgfSxcbiAgXSxcbiAgWydwYXRoJywgeyBkOiAnbTMuMyA3IDguNyA1IDguNy01Jywga2V5OiAnZzY2dDJiJyB9XSxcbiAgWydwYXRoJywgeyBkOiAnTTEyIDIyVjEyJywga2V5OiAnZDB4cXRkJyB9XSxcbl0pO1xuXG5leHBvcnQgZGVmYXVsdCBQYWNrYWdlO1xuIl0sIm5hbWVzIjpbIlBhY2thZ2UiLCJjcmVhdGVMdWNpZGVJY29uIiwiZCIsImtleSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/package.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/pencil.js":
/*!************************************************************!*\
!*** ./node_modules/lucide-react/dist/esm/icons/pencil.js ***!
\************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ Pencil; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\n * @license lucide-react v0.408.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst Pencil = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"Pencil\", [\n [\n \"path\",\n {\n d: \"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\",\n key: \"1a8usu\"\n }\n ],\n [\n \"path\",\n {\n d: \"m15 5 4 4\",\n key: \"1mk7zo\"\n }\n ]\n]);\n //# sourceMappingURL=pencil.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvcGVuY2lsLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBYU0sTUFBQUEsU0FBU0MsZ0VBQWdCQSxDQUFDLFVBQVU7SUFDeEM7UUFDRTtRQUNBO1lBQ0VDLEdBQUc7WUFDSEMsS0FBSztRQUNQO0tBQ0Y7SUFDQTtRQUFDO1FBQVE7WUFBRUQsR0FBRztZQUFhQyxLQUFLO1FBQUE7S0FBVTtDQUMzQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vLi4vc3JjL2ljb25zL3BlbmNpbC50cz8zYzkxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVMdWNpZGVJY29uIGZyb20gJy4uL2NyZWF0ZUx1Y2lkZUljb24nO1xuXG4vKipcbiAqIEBjb21wb25lbnQgQG5hbWUgUGVuY2lsXG4gKiBAZGVzY3JpcHRpb24gTHVjaWRlIFNWRyBpY29uIGNvbXBvbmVudCwgcmVuZGVycyBTVkcgRWxlbWVudCB3aXRoIGNoaWxkcmVuLlxuICpcbiAqIEBwcmV2aWV3ICFbaW1nXShkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUFnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JZ29nSUhkcFpIUm9QU0l5TkNJS0lDQm9aV2xuYUhROUlqSTBJZ29nSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJS0lDQm1hV3hzUFNKdWIyNWxJZ29nSUhOMGNtOXJaVDBpSXpBd01DSWdjM1I1YkdVOUltSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1abVk3SUdKdmNtUmxjaTF5WVdScGRYTTZJREp3ZUNJS0lDQnpkSEp2YTJVdGQybGtkR2c5SWpJaUNpQWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWdvZ0lITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpQ2o0S0lDQThjR0YwYUNCa1BTSk5NakV1TVRjMElEWXVPREV5WVRFZ01TQXdJREFnTUMwekxqazROaTB6TGprNE4wd3pMamcwTWlBeE5pNHhOelJoTWlBeUlEQWdNQ0F3TFM0MUxqZ3piQzB4TGpNeU1TQTBMak0xTW1FdU5TNDFJREFnTUNBd0lDNDJNak11TmpJeWJEUXVNelV6TFRFdU16SmhNaUF5SURBZ01DQXdJQzQ0TXkwdU5EazNlaUlnTHo0S0lDQThjR0YwYUNCa1BTSnRNVFVnTlNBMElEUWlJQzgrQ2p3dmMzWm5QZ289KSAtIGh0dHBzOi8vbHVjaWRlLmRldi9pY29ucy9wZW5jaWxcbiAqIEBzZWUgaHR0cHM6Ly9sdWNpZGUuZGV2L2d1aWRlL3BhY2thZ2VzL2x1Y2lkZS1yZWFjdCAtIERvY3VtZW50YXRpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBMdWNpZGUgaWNvbnMgcHJvcHMgYW5kIGFueSB2YWxpZCBTVkcgYXR0cmlidXRlXG4gKiBAcmV0dXJucyB7SlNYLkVsZW1lbnR9IEpTWCBFbGVtZW50XG4gKlxuICovXG5jb25zdCBQZW5jaWwgPSBjcmVhdGVMdWNpZGVJY29uKCdQZW5jaWwnLCBbXG4gIFtcbiAgICAncGF0aCcsXG4gICAge1xuICAgICAgZDogJ00yMS4xNzQgNi44MTJhMSAxIDAgMCAwLTMuOTg2LTMuOTg3TDMuODQyIDE2LjE3NGEyIDIgMCAwIDAtLjUuODNsLTEuMzIxIDQuMzUyYS41LjUgMCAwIDAgLjYyMy42MjJsNC4zNTMtMS4zMmEyIDIgMCAwIDAgLjgzLS40OTd6JyxcbiAgICAgIGtleTogJzFhOHVzdScsXG4gICAgfSxcbiAgXSxcbiAgWydwYXRoJywgeyBkOiAnbTE1IDUgNCA0Jywga2V5OiAnMW1rN3pvJyB9XSxcbl0pO1xuXG5leHBvcnQgZGVmYXVsdCBQZW5jaWw7XG4iXSwibmFtZXMiOlsiUGVuY2lsIiwiY3JlYXRlTHVjaWRlSWNvbiIsImQiLCJrZXkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/pencil.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/plus.js":
/*!**********************************************************!*\
!*** ./node_modules/lucide-react/dist/esm/icons/plus.js ***!
\**********************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ Plus; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\n * @license lucide-react v0.408.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst Plus = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"Plus\", [\n [\n \"path\",\n {\n d: \"M5 12h14\",\n key: \"1ays0h\"\n }\n ],\n [\n \"path\",\n {\n d: \"M12 5v14\",\n key: \"s699le\"\n }\n ]\n]);\n //# sourceMappingURL=plus.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvcGx1cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQWFNLE1BQUFBLE9BQU9DLGdFQUFnQkEsQ0FBQyxRQUFRO0lBQ3BDO1FBQUM7UUFBUTtZQUFFQyxHQUFHO1lBQVlDLEtBQUs7UUFBQTtLQUFVO0lBQ3pDO1FBQUM7UUFBUTtZQUFFRCxHQUFHO1lBQVlDLEtBQUs7UUFBQTtLQUFVO0NBQzFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi8uLi9zcmMvaWNvbnMvcGx1cy50cz81MTk2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVMdWNpZGVJY29uIGZyb20gJy4uL2NyZWF0ZUx1Y2lkZUljb24nO1xuXG4vKipcbiAqIEBjb21wb25lbnQgQG5hbWUgUGx1c1xuICogQGRlc2NyaXB0aW9uIEx1Y2lkZSBTVkcgaWNvbiBjb21wb25lbnQsIHJlbmRlcnMgU1ZHIEVsZW1lbnQgd2l0aCBjaGlsZHJlbi5cbiAqXG4gKiBAcHJldmlldyAhW2ltZ10oZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlBZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWdvZ0lIZHBaSFJvUFNJeU5DSUtJQ0JvWldsbmFIUTlJakkwSWdvZ0lIWnBaWGRDYjNnOUlqQWdNQ0F5TkNBeU5DSUtJQ0JtYVd4c1BTSnViMjVsSWdvZ0lITjBjbTlyWlQwaUl6QXdNQ0lnYzNSNWJHVTlJbUpoWTJ0bmNtOTFibVF0WTI5c2IzSTZJQ05tWm1ZN0lHSnZjbVJsY2kxeVlXUnBkWE02SURKd2VDSUtJQ0J6ZEhKdmEyVXRkMmxrZEdnOUlqSWlDaUFnYzNSeWIydGxMV3hwYm1WallYQTlJbkp2ZFc1a0lnb2dJSE4wY205clpTMXNhVzVsYW05cGJqMGljbTkxYm1RaUNqNEtJQ0E4Y0dGMGFDQmtQU0pOTlNBeE1tZ3hOQ0lnTHo0S0lDQThjR0YwYUNCa1BTSk5NVElnTlhZeE5DSWdMejRLUEM5emRtYytDZz09KSAtIGh0dHBzOi8vbHVjaWRlLmRldi9pY29ucy9wbHVzXG4gKiBAc2VlIGh0dHBzOi8vbHVjaWRlLmRldi9ndWlkZS9wYWNrYWdlcy9sdWNpZGUtcmVhY3QgLSBEb2N1bWVudGF0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gTHVjaWRlIGljb25zIHByb3BzIGFuZCBhbnkgdmFsaWQgU1ZHIGF0dHJpYnV0ZVxuICogQHJldHVybnMge0pTWC5FbGVtZW50fSBKU1ggRWxlbWVudFxuICpcbiAqL1xuY29uc3QgUGx1cyA9IGNyZWF0ZUx1Y2lkZUljb24oJ1BsdXMnLCBbXG4gIFsncGF0aCcsIHsgZDogJ001IDEyaDE0Jywga2V5OiAnMWF5czBoJyB9XSxcbiAgWydwYXRoJywgeyBkOiAnTTEyIDV2MTQnLCBrZXk6ICdzNjk5bGUnIH1dLFxuXSk7XG5cbmV4cG9ydCBkZWZhdWx0IFBsdXM7XG4iXSwibmFtZXMiOlsiUGx1cyIsImNyZWF0ZUx1Y2lkZUljb24iLCJkIiwia2V5Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/plus.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/search.js":
/*!************************************************************!*\
!*** ./node_modules/lucide-react/dist/esm/icons/search.js ***!
\************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ Search; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\n * @license lucide-react v0.408.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst Search = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"Search\", [\n [\n \"circle\",\n {\n cx: \"11\",\n cy: \"11\",\n r: \"8\",\n key: \"4ej97u\"\n }\n ],\n [\n \"path\",\n {\n d: \"m21 21-4.3-4.3\",\n key: \"1qie3q\"\n }\n ]\n]);\n //# sourceMappingURL=search.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvc2VhcmNoLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBYU0sTUFBQUEsU0FBU0MsZ0VBQWdCQSxDQUFDLFVBQVU7SUFDeEM7UUFBQztRQUFVO1lBQUVDLElBQUk7WUFBTUMsSUFBSTtZQUFNQyxHQUFHO1lBQUtDLEtBQUs7UUFBQTtLQUFVO0lBQ3hEO1FBQUM7UUFBUTtZQUFFQyxHQUFHO1lBQWtCRCxLQUFLO1FBQUE7S0FBVTtDQUNoRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vLi4vc3JjL2ljb25zL3NlYXJjaC50cz9kMzI5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVMdWNpZGVJY29uIGZyb20gJy4uL2NyZWF0ZUx1Y2lkZUljb24nO1xuXG4vKipcbiAqIEBjb21wb25lbnQgQG5hbWUgU2VhcmNoXG4gKiBAZGVzY3JpcHRpb24gTHVjaWRlIFNWRyBpY29uIGNvbXBvbmVudCwgcmVuZGVycyBTVkcgRWxlbWVudCB3aXRoIGNoaWxkcmVuLlxuICpcbiAqIEBwcmV2aWV3ICFbaW1nXShkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUFnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JZ29nSUhkcFpIUm9QU0l5TkNJS0lDQm9aV2xuYUhROUlqSTBJZ29nSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJS0lDQm1hV3hzUFNKdWIyNWxJZ29nSUhOMGNtOXJaVDBpSXpBd01DSWdjM1I1YkdVOUltSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1abVk3SUdKdmNtUmxjaTF5WVdScGRYTTZJREp3ZUNJS0lDQnpkSEp2YTJVdGQybGtkR2c5SWpJaUNpQWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWdvZ0lITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpQ2o0S0lDQThZMmx5WTJ4bElHTjRQU0l4TVNJZ1kzazlJakV4SWlCeVBTSTRJaUF2UGdvZ0lEeHdZWFJvSUdROUltMHlNU0F5TVMwMExqTXROQzR6SWlBdlBnbzhMM04yWno0SykgLSBodHRwczovL2x1Y2lkZS5kZXYvaWNvbnMvc2VhcmNoXG4gKiBAc2VlIGh0dHBzOi8vbHVjaWRlLmRldi9ndWlkZS9wYWNrYWdlcy9sdWNpZGUtcmVhY3QgLSBEb2N1bWVudGF0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gTHVjaWRlIGljb25zIHByb3BzIGFuZCBhbnkgdmFsaWQgU1ZHIGF0dHJpYnV0ZVxuICogQHJldHVybnMge0pTWC5FbGVtZW50fSBKU1ggRWxlbWVudFxuICpcbiAqL1xuY29uc3QgU2VhcmNoID0gY3JlYXRlTHVjaWRlSWNvbignU2VhcmNoJywgW1xuICBbJ2NpcmNsZScsIHsgY3g6ICcxMScsIGN5OiAnMTEnLCByOiAnOCcsIGtleTogJzRlajk3dScgfV0sXG4gIFsncGF0aCcsIHsgZDogJ20yMSAyMS00LjMtNC4zJywga2V5OiAnMXFpZTNxJyB9XSxcbl0pO1xuXG5leHBvcnQgZGVmYXVsdCBTZWFyY2g7XG4iXSwibmFtZXMiOlsiU2VhcmNoIiwiY3JlYXRlTHVjaWRlSWNvbiIsImN4IiwiY3kiLCJyIiwia2V5IiwiZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/search.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/trash-2.js":
/*!*************************************************************!*\
!*** ./node_modules/lucide-react/dist/esm/icons/trash-2.js ***!
\*************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ Trash2; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\n * @license lucide-react v0.408.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst Trash2 = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"Trash2\", [\n [\n \"path\",\n {\n d: \"M3 6h18\",\n key: \"d0wm0j\"\n }\n ],\n [\n \"path\",\n {\n d: \"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\",\n key: \"4alrt4\"\n }\n ],\n [\n \"path\",\n {\n d: \"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\",\n key: \"v07s0e\"\n }\n ],\n [\n \"line\",\n {\n x1: \"10\",\n x2: \"10\",\n y1: \"11\",\n y2: \"17\",\n key: \"1uufr5\"\n }\n ],\n [\n \"line\",\n {\n x1: \"14\",\n x2: \"14\",\n y1: \"11\",\n y2: \"17\",\n key: \"xtxkd\"\n }\n ]\n]);\n //# sourceMappingURL=trash-2.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvdHJhc2gtMi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQWFNLE1BQUFBLFNBQVNDLGdFQUFnQkEsQ0FBQyxVQUFVO0lBQ3hDO1FBQUM7UUFBUTtZQUFFQyxHQUFHO1lBQVdDLEtBQUs7UUFBQTtLQUFVO0lBQ3hDO1FBQUM7UUFBUTtZQUFFRCxHQUFHO1lBQXlDQyxLQUFLO1FBQUE7S0FBVTtJQUN0RTtRQUFDO1FBQVE7WUFBRUQsR0FBRztZQUFzQ0MsS0FBSztRQUFBO0tBQVU7SUFDbkU7UUFBQztRQUFRO1lBQUVDLElBQUk7WUFBTUMsSUFBSTtZQUFNQyxJQUFJO1lBQU1DLElBQUk7WUFBTUosS0FBSztRQUFBO0tBQVU7SUFDbEU7UUFBQztRQUFRO1lBQUVDLElBQUk7WUFBTUMsSUFBSTtZQUFNQyxJQUFJO1lBQU1DLElBQUk7WUFBTUosS0FBSztRQUFBO0tBQVM7Q0FDbEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uL3NyYy9pY29ucy90cmFzaC0yLnRzPzg1OTUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyZWF0ZUx1Y2lkZUljb24gZnJvbSAnLi4vY3JlYXRlTHVjaWRlSWNvbic7XG5cbi8qKlxuICogQGNvbXBvbmVudCBAbmFtZSBUcmFzaDJcbiAqIEBkZXNjcmlwdGlvbiBMdWNpZGUgU1ZHIGljb24gY29tcG9uZW50LCByZW5kZXJzIFNWRyBFbGVtZW50IHdpdGggY2hpbGRyZW4uXG4gKlxuICogQHByZXZpZXcgIVtpbWddKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklnb2dJSGRwWkhSb1BTSXlOQ0lLSUNCb1pXbG5hSFE5SWpJMElnb2dJSFpwWlhkQ2IzZzlJakFnTUNBeU5DQXlOQ0lLSUNCbWFXeHNQU0p1YjI1bElnb2dJSE4wY205clpUMGlJekF3TUNJZ2MzUjViR1U5SW1KaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNObVptWTdJR0p2Y21SbGNpMXlZV1JwZFhNNklESndlQ0lLSUNCemRISnZhMlV0ZDJsa2RHZzlJaklpQ2lBZ2MzUnliMnRsTFd4cGJtVmpZWEE5SW5KdmRXNWtJZ29nSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpY205MWJtUWlDajRLSUNBOGNHRjBhQ0JrUFNKTk15QTJhREU0SWlBdlBnb2dJRHh3WVhSb0lHUTlJazB4T1NBMmRqRTBZekFnTVMweElESXRNaUF5U0RkakxURWdNQzB5TFRFdE1pMHlWallpSUM4K0NpQWdQSEJoZEdnZ1pEMGlUVGdnTmxZMFl6QXRNU0F4TFRJZ01pMHlhRFJqTVNBd0lESWdNU0F5SURKMk1pSWdMejRLSUNBOGJHbHVaU0I0TVQwaU1UQWlJSGd5UFNJeE1DSWdlVEU5SWpFeElpQjVNajBpTVRjaUlDOCtDaUFnUEd4cGJtVWdlREU5SWpFMElpQjRNajBpTVRRaUlIa3hQU0l4TVNJZ2VUSTlJakUzSWlBdlBnbzhMM04yWno0SykgLSBodHRwczovL2x1Y2lkZS5kZXYvaWNvbnMvdHJhc2gtMlxuICogQHNlZSBodHRwczovL2x1Y2lkZS5kZXYvZ3VpZGUvcGFja2FnZXMvbHVjaWRlLXJlYWN0IC0gRG9jdW1lbnRhdGlvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIEx1Y2lkZSBpY29ucyBwcm9wcyBhbmQgYW55IHZhbGlkIFNWRyBhdHRyaWJ1dGVcbiAqIEByZXR1cm5zIHtKU1guRWxlbWVudH0gSlNYIEVsZW1lbnRcbiAqXG4gKi9cbmNvbnN0IFRyYXNoMiA9IGNyZWF0ZUx1Y2lkZUljb24oJ1RyYXNoMicsIFtcbiAgWydwYXRoJywgeyBkOiAnTTMgNmgxOCcsIGtleTogJ2Qwd20waicgfV0sXG4gIFsncGF0aCcsIHsgZDogJ00xOSA2djE0YzAgMS0xIDItMiAySDdjLTEgMC0yLTEtMi0yVjYnLCBrZXk6ICc0YWxydDQnIH1dLFxuICBbJ3BhdGgnLCB7IGQ6ICdNOCA2VjRjMC0xIDEtMiAyLTJoNGMxIDAgMiAxIDIgMnYyJywga2V5OiAndjA3czBlJyB9XSxcbiAgWydsaW5lJywgeyB4MTogJzEwJywgeDI6ICcxMCcsIHkxOiAnMTEnLCB5MjogJzE3Jywga2V5OiAnMXV1ZnI1JyB9XSxcbiAgWydsaW5lJywgeyB4MTogJzE0JywgeDI6ICcxNCcsIHkxOiAnMTEnLCB5MjogJzE3Jywga2V5OiAneHR4a2QnIH1dLFxuXSk7XG5cbmV4cG9ydCBkZWZhdWx0IFRyYXNoMjtcbiJdLCJuYW1lcyI6WyJUcmFzaDIiLCJjcmVhdGVMdWNpZGVJY29uIiwiZCIsImtleSIsIngxIiwieDIiLCJ5MSIsInkyIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/trash-2.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/triangle-alert.js":
/*!********************************************************************!*\
!*** ./node_modules/lucide-react/dist/esm/icons/triangle-alert.js ***!
\********************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ TriangleAlert; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\n * @license lucide-react v0.408.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst TriangleAlert = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"TriangleAlert\", [\n [\n \"path\",\n {\n d: \"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\",\n key: \"wmoenq\"\n }\n ],\n [\n \"path\",\n {\n d: \"M12 9v4\",\n key: \"juzpu7\"\n }\n ],\n [\n \"path\",\n {\n d: \"M12 17h.01\",\n key: \"p32p05\"\n }\n ]\n]);\n //# sourceMappingURL=triangle-alert.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvdHJpYW5nbGUtYWxlcnQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFhTSxNQUFBQSxnQkFBZ0JDLGdFQUFnQkEsQ0FBQyxpQkFBaUI7SUFDdEQ7UUFDRTtRQUNBO1lBQ0VDLEdBQUc7WUFDSEMsS0FBSztRQUNQO0tBQ0Y7SUFDQTtRQUFDO1FBQVE7WUFBRUQsR0FBRztZQUFXQyxLQUFLO1FBQUE7S0FBVTtJQUN4QztRQUFDO1FBQVE7WUFBRUQsR0FBRztZQUFjQyxLQUFLO1FBQUE7S0FBVTtDQUM1QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vLi4vc3JjL2ljb25zL3RyaWFuZ2xlLWFsZXJ0LnRzPzBkYjAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyZWF0ZUx1Y2lkZUljb24gZnJvbSAnLi4vY3JlYXRlTHVjaWRlSWNvbic7XG5cbi8qKlxuICogQGNvbXBvbmVudCBAbmFtZSBUcmlhbmdsZUFsZXJ0XG4gKiBAZGVzY3JpcHRpb24gTHVjaWRlIFNWRyBpY29uIGNvbXBvbmVudCwgcmVuZGVycyBTVkcgRWxlbWVudCB3aXRoIGNoaWxkcmVuLlxuICpcbiAqIEBwcmV2aWV3ICFbaW1nXShkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUFnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JZ29nSUhkcFpIUm9QU0l5TkNJS0lDQm9aV2xuYUhROUlqSTBJZ29nSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJS0lDQm1hV3hzUFNKdWIyNWxJZ29nSUhOMGNtOXJaVDBpSXpBd01DSWdjM1I1YkdVOUltSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1abVk3SUdKdmNtUmxjaTF5WVdScGRYTTZJREp3ZUNJS0lDQnpkSEp2YTJVdGQybGtkR2c5SWpJaUNpQWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWdvZ0lITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpQ2o0S0lDQThjR0YwYUNCa1BTSnRNakV1TnpNZ01UZ3RPQzB4TkdFeUlESWdNQ0F3SURBdE15NDBPQ0F3YkMwNElERTBRVElnTWlBd0lEQWdNQ0EwSURJeGFERTJZVElnTWlBd0lEQWdNQ0F4TGpjekxUTWlJQzgrQ2lBZ1BIQmhkR2dnWkQwaVRURXlJRGwyTkNJZ0x6NEtJQ0E4Y0dGMGFDQmtQU0pOTVRJZ01UZG9MakF4SWlBdlBnbzhMM04yWno0SykgLSBodHRwczovL2x1Y2lkZS5kZXYvaWNvbnMvdHJpYW5nbGUtYWxlcnRcbiAqIEBzZWUgaHR0cHM6Ly9sdWNpZGUuZGV2L2d1aWRlL3BhY2thZ2VzL2x1Y2lkZS1yZWFjdCAtIERvY3VtZW50YXRpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBMdWNpZGUgaWNvbnMgcHJvcHMgYW5kIGFueSB2YWxpZCBTVkcgYXR0cmlidXRlXG4gKiBAcmV0dXJucyB7SlNYLkVsZW1lbnR9IEpTWCBFbGVtZW50XG4gKlxuICovXG5jb25zdCBUcmlhbmdsZUFsZXJ0ID0gY3JlYXRlTHVjaWRlSWNvbignVHJpYW5nbGVBbGVydCcsIFtcbiAgW1xuICAgICdwYXRoJyxcbiAgICB7XG4gICAgICBkOiAnbTIxLjczIDE4LTgtMTRhMiAyIDAgMCAwLTMuNDggMGwtOCAxNEEyIDIgMCAwIDAgNCAyMWgxNmEyIDIgMCAwIDAgMS43My0zJyxcbiAgICAgIGtleTogJ3dtb2VucScsXG4gICAgfSxcbiAgXSxcbiAgWydwYXRoJywgeyBkOiAnTTEyIDl2NCcsIGtleTogJ2p1enB1NycgfV0sXG4gIFsncGF0aCcsIHsgZDogJ00xMiAxN2guMDEnLCBrZXk6ICdwMzJwMDUnIH1dLFxuXSk7XG5cbmV4cG9ydCBkZWZhdWx0IFRyaWFuZ2xlQWxlcnQ7XG4iXSwibmFtZXMiOlsiVHJpYW5nbGVBbGVydCIsImNyZWF0ZUx1Y2lkZUljb24iLCJkIiwia2V5Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/triangle-alert.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/upload.js":
/*!************************************************************!*\
!*** ./node_modules/lucide-react/dist/esm/icons/upload.js ***!
\************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ Upload; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\n * @license lucide-react v0.408.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst Upload = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"Upload\", [\n [\n \"path\",\n {\n d: \"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\",\n key: \"ih7n3h\"\n }\n ],\n [\n \"polyline\",\n {\n points: \"17 8 12 3 7 8\",\n key: \"t8dd8p\"\n }\n ],\n [\n \"line\",\n {\n x1: \"12\",\n x2: \"12\",\n y1: \"3\",\n y2: \"15\",\n key: \"widbto\"\n }\n ]\n]);\n //# sourceMappingURL=upload.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvdXBsb2FkLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBYU0sTUFBQUEsU0FBU0MsZ0VBQWdCQSxDQUFDLFVBQVU7SUFDeEM7UUFBQztRQUFRO1lBQUVDLEdBQUc7WUFBNkNDLEtBQUs7UUFBQTtLQUFVO0lBQzFFO1FBQUM7UUFBWTtZQUFFQyxRQUFRO1lBQWlCRCxLQUFLO1FBQUE7S0FBVTtJQUN2RDtRQUFDO1FBQVE7WUFBRUUsSUFBSTtZQUFNQyxJQUFJO1lBQU1DLElBQUk7WUFBS0MsSUFBSTtZQUFNTCxLQUFLO1FBQUE7S0FBVTtDQUNsRSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi4vLi4vLi4vc3JjL2ljb25zL3VwbG9hZC50cz81MzUwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVMdWNpZGVJY29uIGZyb20gJy4uL2NyZWF0ZUx1Y2lkZUljb24nO1xuXG4vKipcbiAqIEBjb21wb25lbnQgQG5hbWUgVXBsb2FkXG4gKiBAZGVzY3JpcHRpb24gTHVjaWRlIFNWRyBpY29uIGNvbXBvbmVudCwgcmVuZGVycyBTVkcgRWxlbWVudCB3aXRoIGNoaWxkcmVuLlxuICpcbiAqIEBwcmV2aWV3ICFbaW1nXShkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUFnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JZ29nSUhkcFpIUm9QU0l5TkNJS0lDQm9aV2xuYUhROUlqSTBJZ29nSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJS0lDQm1hV3hzUFNKdWIyNWxJZ29nSUhOMGNtOXJaVDBpSXpBd01DSWdjM1I1YkdVOUltSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1abVk3SUdKdmNtUmxjaTF5WVdScGRYTTZJREp3ZUNJS0lDQnpkSEp2YTJVdGQybGtkR2c5SWpJaUNpQWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWdvZ0lITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpQ2o0S0lDQThjR0YwYUNCa1BTSk5NakVnTVRWMk5HRXlJRElnTUNBd0lERXRNaUF5U0RWaE1pQXlJREFnTUNBeExUSXRNbll0TkNJZ0x6NEtJQ0E4Y0c5c2VXeHBibVVnY0c5cGJuUnpQU0l4TnlBNElERXlJRE1nTnlBNElpQXZQZ29nSUR4c2FXNWxJSGd4UFNJeE1pSWdlREk5SWpFeUlpQjVNVDBpTXlJZ2VUSTlJakUxSWlBdlBnbzhMM04yWno0SykgLSBodHRwczovL2x1Y2lkZS5kZXYvaWNvbnMvdXBsb2FkXG4gKiBAc2VlIGh0dHBzOi8vbHVjaWRlLmRldi9ndWlkZS9wYWNrYWdlcy9sdWNpZGUtcmVhY3QgLSBEb2N1bWVudGF0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gTHVjaWRlIGljb25zIHByb3BzIGFuZCBhbnkgdmFsaWQgU1ZHIGF0dHJpYnV0ZVxuICogQHJldHVybnMge0pTWC5FbGVtZW50fSBKU1ggRWxlbWVudFxuICpcbiAqL1xuY29uc3QgVXBsb2FkID0gY3JlYXRlTHVjaWRlSWNvbignVXBsb2FkJywgW1xuICBbJ3BhdGgnLCB7IGQ6ICdNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCcsIGtleTogJ2loN24zaCcgfV0sXG4gIFsncG9seWxpbmUnLCB7IHBvaW50czogJzE3IDggMTIgMyA3IDgnLCBrZXk6ICd0OGRkOHAnIH1dLFxuICBbJ2xpbmUnLCB7IHgxOiAnMTInLCB4MjogJzEyJywgeTE6ICczJywgeTI6ICcxNScsIGtleTogJ3dpZGJ0bycgfV0sXG5dKTtcblxuZXhwb3J0IGRlZmF1bHQgVXBsb2FkO1xuIl0sIm5hbWVzIjpbIlVwbG9hZCIsImNyZWF0ZUx1Y2lkZUljb24iLCJkIiwia2V5IiwicG9pbnRzIiwieDEiLCJ4MiIsInkxIiwieTIiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/upload.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/x.js":
/*!*******************************************************!*\
!*** ./node_modules/lucide-react/dist/esm/icons/x.js ***!
\*******************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ X; }\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.js */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.js\");\n/**\n * @license lucide-react v0.408.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst X = (0,_createLucideIcon_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"X\", [\n [\n \"path\",\n {\n d: \"M18 6 6 18\",\n key: \"1bl5f8\"\n }\n ],\n [\n \"path\",\n {\n d: \"m6 6 12 12\",\n key: \"d8bk6v\"\n }\n ]\n]);\n //# sourceMappingURL=x.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMveC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQWFNLE1BQUFBLElBQUlDLGdFQUFnQkEsQ0FBQyxLQUFLO0lBQzlCO1FBQUM7UUFBUTtZQUFFQyxHQUFHO1lBQWNDLEtBQUs7UUFBQTtLQUFVO0lBQzNDO1FBQUM7UUFBUTtZQUFFRCxHQUFHO1lBQWNDLEtBQUs7UUFBQTtLQUFVO0NBQzVDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi8uLi8uLi9zcmMvaWNvbnMveC50cz9iYzM4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVMdWNpZGVJY29uIGZyb20gJy4uL2NyZWF0ZUx1Y2lkZUljb24nO1xuXG4vKipcbiAqIEBjb21wb25lbnQgQG5hbWUgWFxuICogQGRlc2NyaXB0aW9uIEx1Y2lkZSBTVkcgaWNvbiBjb21wb25lbnQsIHJlbmRlcnMgU1ZHIEVsZW1lbnQgd2l0aCBjaGlsZHJlbi5cbiAqXG4gKiBAcHJldmlldyAhW2ltZ10oZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlBZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWdvZ0lIZHBaSFJvUFNJeU5DSUtJQ0JvWldsbmFIUTlJakkwSWdvZ0lIWnBaWGRDYjNnOUlqQWdNQ0F5TkNBeU5DSUtJQ0JtYVd4c1BTSnViMjVsSWdvZ0lITjBjbTlyWlQwaUl6QXdNQ0lnYzNSNWJHVTlJbUpoWTJ0bmNtOTFibVF0WTI5c2IzSTZJQ05tWm1ZN0lHSnZjbVJsY2kxeVlXUnBkWE02SURKd2VDSUtJQ0J6ZEhKdmEyVXRkMmxrZEdnOUlqSWlDaUFnYzNSeWIydGxMV3hwYm1WallYQTlJbkp2ZFc1a0lnb2dJSE4wY205clpTMXNhVzVsYW05cGJqMGljbTkxYm1RaUNqNEtJQ0E4Y0dGMGFDQmtQU0pOTVRnZ05pQTJJREU0SWlBdlBnb2dJRHh3WVhSb0lHUTlJbTAySURZZ01USWdNVElpSUM4K0Nqd3ZjM1puUGdvPSkgLSBodHRwczovL2x1Y2lkZS5kZXYvaWNvbnMveFxuICogQHNlZSBodHRwczovL2x1Y2lkZS5kZXYvZ3VpZGUvcGFja2FnZXMvbHVjaWRlLXJlYWN0IC0gRG9jdW1lbnRhdGlvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIEx1Y2lkZSBpY29ucyBwcm9wcyBhbmQgYW55IHZhbGlkIFNWRyBhdHRyaWJ1dGVcbiAqIEByZXR1cm5zIHtKU1guRWxlbWVudH0gSlNYIEVsZW1lbnRcbiAqXG4gKi9cbmNvbnN0IFggPSBjcmVhdGVMdWNpZGVJY29uKCdYJywgW1xuICBbJ3BhdGgnLCB7IGQ6ICdNMTggNiA2IDE4Jywga2V5OiAnMWJsNWY4JyB9XSxcbiAgWydwYXRoJywgeyBkOiAnbTYgNiAxMiAxMicsIGtleTogJ2Q4Yms2dicgfV0sXG5dKTtcblxuZXhwb3J0IGRlZmF1bHQgWDtcbiJdLCJuYW1lcyI6WyJYIiwiY3JlYXRlTHVjaWRlSWNvbiIsImQiLCJrZXkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/x.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/shared/src/utils.js":
/*!****************************************************************!*\
!*** ./node_modules/lucide-react/dist/esm/shared/src/utils.js ***!
\****************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ mergeClasses: function() { return /* binding */ mergeClasses; },\n/* harmony export */ toKebabCase: function() { return /* binding */ toKebabCase; }\n/* harmony export */ });\n/**\n * @license lucide-react v0.408.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ const toKebabCase = (string)=>string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst mergeClasses = function() {\n for(var _len = arguments.length, classes = new Array(_len), _key = 0; _key < _len; _key++){\n classes[_key] = arguments[_key];\n }\n return classes.filter((className, index, array)=>{\n return Boolean(className) && array.indexOf(className) === index;\n }).join(\" \");\n};\n //# sourceMappingURL=utils.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vc2hhcmVkL3NyYy91dGlscy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0lBUWEsTUFBQUEsY0FBYyxDQUFDQyxTQUMxQkEsT0FBT0MsT0FBQSxDQUFRLHNCQUFzQixTQUFTQyxXQUFZO0FBc0IvQyxNQUFBQyxlQUFlO3FDQUEyQ0M7UUFBQUE7O1dBQ3JFQSxRQUNHQyxNQUFBLENBQU8sQ0FBQ0MsV0FBV0MsT0FBT0M7UUFDekIsT0FBT0MsUUFBUUgsY0FBY0UsTUFBTUUsT0FBQSxDQUFRSixlQUFlQztJQUM1RCxHQUNDSSxJQUFBLENBQUsiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4uLy4uLy4uL3NoYXJlZC9zcmMvdXRpbHMudHM/NjY5YyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDYW1lbFRvUGFzY2FsIH0gZnJvbSAnLi91dGlsaXR5LXR5cGVzJztcblxuLyoqXG4gKiBDb252ZXJ0cyBzdHJpbmcgdG8ga2ViYWIgY2FzZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEga2ViYWJpemVkIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgdG9LZWJhYkNhc2UgPSAoc3RyaW5nOiBzdHJpbmcpID0+XG4gIHN0cmluZy5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCAnJDEtJDInKS50b0xvd2VyQ2FzZSgpO1xuXG4vKipcbiAqIENvbnZlcnRzIHN0cmluZyB0byBwYXNjYWwgY2FzZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgcGFzY2FsaXplZCBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHRvUGFzY2FsQ2FzZSA9IDxUIGV4dGVuZHMgc3RyaW5nPihzdHJpbmc6IFQpOiBDYW1lbFRvUGFzY2FsPFQ+ID0+IHtcbiAgY29uc3QgY2FtZWxDYXNlID0gc3RyaW5nLnJlcGxhY2UoL14oW0EtWl0pfFtcXHMtX10rKFxcdykvZywgKG1hdGNoLCBwMSwgcDIpID0+XG4gICAgcDIgPyBwMi50b1VwcGVyQ2FzZSgpIDogcDEudG9Mb3dlckNhc2UoKSxcbiAgKTtcblxuICByZXR1cm4gKGNhbWVsQ2FzZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGNhbWVsQ2FzZS5zbGljZSgxKSkgYXMgQ2FtZWxUb1Bhc2NhbDxUPjtcbn07XG5cbi8qKlxuICogTWVyZ2VzIGNsYXNzZXMgaW50byBhIHNpbmdsZSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge2FycmF5fSBjbGFzc2VzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHN0cmluZyBvZiBjbGFzc2VzXG4gKi9cbmV4cG9ydCBjb25zdCBtZXJnZUNsYXNzZXMgPSA8Q2xhc3NUeXBlID0gc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbD4oLi4uY2xhc3NlczogQ2xhc3NUeXBlW10pID0+XG4gIGNsYXNzZXNcbiAgICAuZmlsdGVyKChjbGFzc05hbWUsIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgcmV0dXJuIEJvb2xlYW4oY2xhc3NOYW1lKSAmJiBhcnJheS5pbmRleE9mKGNsYXNzTmFtZSkgPT09IGluZGV4O1xuICAgIH0pXG4gICAgLmpvaW4oJyAnKTtcbiJdLCJuYW1lcyI6WyJ0b0tlYmFiQ2FzZSIsInN0cmluZyIsInJlcGxhY2UiLCJ0b0xvd2VyQ2FzZSIsIm1lcmdlQ2xhc3NlcyIsImNsYXNzZXMiLCJmaWx0ZXIiLCJjbGFzc05hbWUiLCJpbmRleCIsImFycmF5IiwiQm9vbGVhbiIsImluZGV4T2YiLCJqb2luIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/shared/src/utils.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./app/dashboard/compliance/page.tsx":
/*!*******************************************!*\
!*** ./app/dashboard/compliance/page.tsx ***!
\*******************************************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ Compliance; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! __barrel_optimize__?names=AlertTriangle,Calendar,CheckCircle2,Clock,Download,Eye,MoreVertical,Package,Pencil,Plus,Search,Trash2,Upload,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/package.js\");\n/* harmony import */ var _barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! __barrel_optimize__?names=AlertTriangle,Calendar,CheckCircle2,Clock,Download,Eye,MoreVertical,Package,Pencil,Plus,Search,Trash2,Upload,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/circle-check.js\");\n/* harmony import */ var _barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! __barrel_optimize__?names=AlertTriangle,Calendar,CheckCircle2,Clock,Download,Eye,MoreVertical,Package,Pencil,Plus,Search,Trash2,Upload,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/clock.js\");\n/* harmony import */ var _barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! __barrel_optimize__?names=AlertTriangle,Calendar,CheckCircle2,Clock,Download,Eye,MoreVertical,Package,Pencil,Plus,Search,Trash2,Upload,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/triangle-alert.js\");\n/* harmony import */ var _barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! __barrel_optimize__?names=AlertTriangle,Calendar,CheckCircle2,Clock,Download,Eye,MoreVertical,Package,Pencil,Plus,Search,Trash2,Upload,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/calendar.js\");\n/* harmony import */ var _barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! __barrel_optimize__?names=AlertTriangle,Calendar,CheckCircle2,Clock,Download,Eye,MoreVertical,Package,Pencil,Plus,Search,Trash2,Upload,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/search.js\");\n/* harmony import */ var _barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! __barrel_optimize__?names=AlertTriangle,Calendar,CheckCircle2,Clock,Download,Eye,MoreVertical,Package,Pencil,Plus,Search,Trash2,Upload,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/x.js\");\n/* harmony import */ var _barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! __barrel_optimize__?names=AlertTriangle,Calendar,CheckCircle2,Clock,Download,Eye,MoreVertical,Package,Pencil,Plus,Search,Trash2,Upload,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/upload.js\");\n/* harmony import */ var _barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! __barrel_optimize__?names=AlertTriangle,Calendar,CheckCircle2,Clock,Download,Eye,MoreVertical,Package,Pencil,Plus,Search,Trash2,Upload,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/download.js\");\n/* harmony import */ var _barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! __barrel_optimize__?names=AlertTriangle,Calendar,CheckCircle2,Clock,Download,Eye,MoreVertical,Package,Pencil,Plus,Search,Trash2,Upload,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/plus.js\");\n/* harmony import */ var _barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! __barrel_optimize__?names=AlertTriangle,Calendar,CheckCircle2,Clock,Download,Eye,MoreVertical,Package,Pencil,Plus,Search,Trash2,Upload,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/eye.js\");\n/* harmony import */ var _barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! __barrel_optimize__?names=AlertTriangle,Calendar,CheckCircle2,Clock,Download,Eye,MoreVertical,Package,Pencil,Plus,Search,Trash2,Upload,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/ellipsis-vertical.js\");\n/* harmony import */ var _barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! __barrel_optimize__?names=AlertTriangle,Calendar,CheckCircle2,Clock,Download,Eye,MoreVertical,Package,Pencil,Plus,Search,Trash2,Upload,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/pencil.js\");\n/* harmony import */ var _barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! __barrel_optimize__?names=AlertTriangle,Calendar,CheckCircle2,Clock,Download,Eye,MoreVertical,Package,Pencil,Plus,Search,Trash2,Upload,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/trash-2.js\");\n/* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/api */ \"(app-pages-browser)/./lib/api.ts\");\n/* harmony import */ var _components_ComplianceDetailModal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/ComplianceDetailModal */ \"(app-pages-browser)/./components/ComplianceDetailModal.tsx\");\n/* harmony import */ var jspdf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! jspdf */ \"(app-pages-browser)/./node_modules/jspdf/dist/jspdf.es.min.js\");\n/* harmony import */ var jspdf_autotable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! jspdf-autotable */ \"(app-pages-browser)/./node_modules/jspdf-autotable/dist/jspdf.plugin.autotable.mjs\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\n\nfunction imgSrc(url) {\n if (!url) return \"\";\n if (url.startsWith(\"data:\") || url.startsWith(\"http\")) return url;\n return \"\".concat(_lib_api__WEBPACK_IMPORTED_MODULE_2__.apiBase).concat(url);\n}\nconst TYPES = [\n \"FSSAI License\",\n \"Drug License\",\n \"GMP Certificate\",\n \"ISO Certificate\",\n \"EPR Registration\",\n \"Factory License\",\n \"Import Export Code\",\n \"Trademark Registration\"\n];\nconst STATUS = {\n complete: \"bg-emerald-50 text-emerald-700\",\n pending: \"bg-amber-50 text-amber-700\",\n expiring: \"bg-amber-50 text-amber-700\",\n expired: \"bg-rose-50 text-rose-700\"\n};\nfunction Compliance() {\n var _s_alerts;\n _s();\n const [rows, setRows] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [s, setS] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [products, setProducts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [filters, setFilters] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n search: \"\",\n status_filter: \"\",\n compliance_type: \"\",\n country: \"\"\n });\n const [detailId, setDetailId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [menuFor, setMenuFor] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [form, setForm] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null); // add/edit form state (null = closed)\n const [page, setPage] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(1);\n const pageSize = 25;\n const [showAlerts, setShowAlerts] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [deleteRow, setDeleteRow] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [deleting, setDeleting] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [selectedRows, setSelectedRows] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [bulkDeleteOpen, setBulkDeleteOpen] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n function load() {\n const qs = new URLSearchParams(Object.entries(filters).filter((param)=>{\n let [, v] = param;\n return v;\n })).toString();\n (0,_lib_api__WEBPACK_IMPORTED_MODULE_2__.api)(\"/compliance\".concat(qs ? \"?\" + qs : \"\")).then(setRows).catch(()=>setRows([]));\n (0,_lib_api__WEBPACK_IMPORTED_MODULE_2__.api)(\"/compliance/summary\").then((data)=>{\n setS(data);\n setShowAlerts(true);\n }).catch(()=>{});\n }\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n load();\n }, [\n filters\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n (0,_lib_api__WEBPACK_IMPORTED_MODULE_2__.api)(\"/products\").then((d)=>{\n var _d_items;\n return setProducts((_d_items = d.items) !== null && _d_items !== void 0 ? _d_items : []);\n }).catch(()=>{});\n }, []);\n const paged = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(()=>rows.slice((page - 1) * pageSize, page * pageSize), [\n rows,\n page\n ]);\n const totalPages = Math.max(1, Math.ceil(rows.length / pageSize));\n const set = (k, v)=>{\n setPage(1);\n setFilters((f)=>({\n ...f,\n [k]: v\n }));\n };\n function handleExport() {\n const exportRows = selectedRows.length > 0 ? rows.filter((r)=>selectedRows.includes(r.id)) : rows;\n const headers = [\n \"Product\",\n \"SKU\",\n \"Compliance Type\",\n \"License Number\",\n \"License Name\",\n \"Issuing Authority\",\n \"Issue Date\",\n \"Expiry Date\",\n \"Days Left\",\n \"Status\",\n \"Country\",\n \"State\",\n \"Category\",\n \"Applicable To\",\n \"Manufacturing Plant\",\n \"Remarks\",\n \"Created By\",\n \"Created On\",\n \"Last Updated\",\n \"Document URL\"\n ];\n const csv = [\n headers.join(\",\"),\n ...exportRows.map((r)=>{\n var _r_product_name, _r_sku, _r_compliance_type, _r_license_number, _r_license_name, _r_issuing_authority, _r_issue_date, _r_expiry_date, _r_status, _r_country, _r_state, _r_category, _r_applicable_to, _r_plant, _r_remarks, _r_created_by, _r_document_url;\n return [\n '\"'.concat((_r_product_name = r.product_name) !== null && _r_product_name !== void 0 ? _r_product_name : \"\", '\"'),\n '\"'.concat((_r_sku = r.sku) !== null && _r_sku !== void 0 ? _r_sku : \"\", '\"'),\n '\"'.concat((_r_compliance_type = r.compliance_type) !== null && _r_compliance_type !== void 0 ? _r_compliance_type : \"\", '\"'),\n '\"'.concat((_r_license_number = r.license_number) !== null && _r_license_number !== void 0 ? _r_license_number : \"\", '\"'),\n '\"'.concat((_r_license_name = r.license_name) !== null && _r_license_name !== void 0 ? _r_license_name : \"\", '\"'),\n '\"'.concat((_r_issuing_authority = r.issuing_authority) !== null && _r_issuing_authority !== void 0 ? _r_issuing_authority : \"\", '\"'),\n '\"'.concat((_r_issue_date = r.issue_date) !== null && _r_issue_date !== void 0 ? _r_issue_date : \"\", '\"'),\n '\"'.concat((_r_expiry_date = r.expiry_date) !== null && _r_expiry_date !== void 0 ? _r_expiry_date : \"\", '\"'),\n '\"'.concat(r.days_left == null ? \"-\" : r.days_left < 0 ? \"Expired\" : r.days_left === 0 ? \"Today\" : \"\".concat(r.days_left, \" Days\"), '\"'),\n '\"'.concat((_r_status = r.status) !== null && _r_status !== void 0 ? _r_status : \"\", '\"'),\n '\"'.concat((_r_country = r.country) !== null && _r_country !== void 0 ? _r_country : \"\", '\"'),\n '\"'.concat((_r_state = r.state) !== null && _r_state !== void 0 ? _r_state : \"\", '\"'),\n '\"'.concat((_r_category = r.category) !== null && _r_category !== void 0 ? _r_category : \"\", '\"'),\n '\"'.concat((_r_applicable_to = r.applicable_to) !== null && _r_applicable_to !== void 0 ? _r_applicable_to : \"\", '\"'),\n '\"'.concat((_r_plant = r.plant) !== null && _r_plant !== void 0 ? _r_plant : \"\", '\"'),\n '\"'.concat((_r_remarks = r.remarks) !== null && _r_remarks !== void 0 ? _r_remarks : \"\", '\"'),\n '\"'.concat((_r_created_by = r.created_by) !== null && _r_created_by !== void 0 ? _r_created_by : \"\", '\"'),\n '\"'.concat(r.created_at ? new Date(r.created_at).toLocaleString(\"en-IN\") : \"\", '\"'),\n '\"'.concat(r.updated_at ? new Date(r.updated_at).toLocaleString(\"en-IN\") : \"\", '\"'),\n '\"'.concat((_r_document_url = r.document_url) !== null && _r_document_url !== void 0 ? _r_document_url : \"\", '\"')\n ].join(\",\");\n })\n ].join(\"\\n\");\n const blob = new Blob([\n csv\n ], {\n type: \"text/csv;charset=utf-8;\"\n });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = selectedRows.length > 0 ? \"selected_compliance_\".concat(selectedRows.length, \".csv\") : \"compliance_\".concat(new Date().toISOString().slice(0, 10), \".csv\");\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }\n async function handleImport(e) {\n var _e_target_files;\n const file = (_e_target_files = e.target.files) === null || _e_target_files === void 0 ? void 0 : _e_target_files[0];\n if (!file) return;\n const formData = new FormData();\n formData.append(\"file\", file);\n try {\n await fetch(\"\".concat(_lib_api__WEBPACK_IMPORTED_MODULE_2__.apiBase, \"/compliance/import\"), {\n method: \"POST\",\n body: formData,\n headers: {\n Authorization: \"Bearer \".concat(localStorage.getItem(\"vp_token\"))\n }\n });\n load();\n alert(\"Import successful\");\n } catch (e) {\n alert(\"Import failed\");\n }\n e.target.value = \"\";\n }\n async function handlePdfExport() {\n const exportRows = selectedRows.length > 0 ? rows.filter((r)=>selectedRows.includes(r.id)) : rows;\n const doc = new jspdf__WEBPACK_IMPORTED_MODULE_4__[\"default\"]({\n orientation: \"landscape\",\n unit: \"mm\",\n format: \"a4\"\n });\n // ===========================\n // Logo\n // ===========================\n try {\n const img = new Image();\n img.src = \"/logo.png\";\n await new Promise((resolve)=>{\n img.onload = resolve;\n img.onerror = resolve;\n });\n doc.addImage(img, \"PNG\", 14, 10, 18, 18);\n } catch (e) {}\n // ===========================\n // Company Header\n // ===========================\n doc.setFont(\"helvetica\", \"bold\");\n doc.setFontSize(18);\n doc.text(\"VerifyPack\", 38, 18);\n doc.setFont(\"helvetica\", \"normal\");\n doc.setFontSize(10);\n doc.setTextColor(100);\n doc.text(\"Digital Trust for Every Product\", 38, 24);\n // ===========================\n // Report Title\n // ===========================\n doc.setDrawColor(220);\n doc.line(14, 32, 283, 32);\n doc.setTextColor(0);\n doc.setFont(\"helvetica\", \"bold\");\n doc.setFontSize(15);\n doc.text(\"Compliance Report\", 14, 40);\n doc.setFont(\"helvetica\", \"normal\");\n doc.setFontSize(10);\n doc.text(\"Generated On : \".concat(new Date().toLocaleString(\"en-IN\")), 14, 47);\n doc.text(\"Total Records : \".concat(exportRows.length), 250, 47, {\n align: \"right\"\n });\n // ===========================\n // Table\n // ===========================\n (0,jspdf_autotable__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(doc, {\n startY: 55,\n head: [\n [\n \"Product\",\n \"SKU\",\n \"Compliance Type\",\n \"License No\",\n \"Issue Date\",\n \"Expiry Date\",\n \"Days Left\",\n \"Status\",\n \"Country\",\n \"Authority\"\n ]\n ],\n body: exportRows.map((r)=>[\n r.product_name || \"\",\n r.sku || \"\",\n r.compliance_type || \"\",\n r.license_number || \"\",\n r.issue_date ? new Date(r.issue_date).toLocaleDateString(\"en-IN\") : \"-\",\n r.expiry_date ? new Date(r.expiry_date).toLocaleDateString(\"en-IN\") : \"-\",\n r.days_left == null ? \"-\" : r.days_left < 0 ? \"Expired\" : r.days_left === 0 ? \"Today\" : \"\".concat(r.days_left, \" Days\"),\n r.days_left == null ? \"Pending\" : r.days_left < 0 ? \"Expired\" : r.days_left <= 30 ? \"Expiring\" : \"Complete\",\n r.country || \"-\",\n r.issuing_authority || \"-\"\n ]),\n styles: {\n fontSize: 8,\n cellPadding: 2\n },\n headStyles: {\n fillColor: [\n 37,\n 99,\n 235\n ],\n textColor: 255,\n fontStyle: \"bold\"\n },\n alternateRowStyles: {\n fillColor: [\n 245,\n 245,\n 245\n ]\n },\n margin: {\n left: 14,\n right: 14\n },\n didDrawPage: (data)=>{\n doc.setFontSize(9);\n doc.setTextColor(120);\n doc.text(\"Page \".concat(data.pageNumber), doc.internal.pageSize.getWidth() - 20, doc.internal.pageSize.getHeight() - 8, {\n align: \"right\"\n });\n doc.text(\"Generated by VerifyPack\", 14, doc.internal.pageSize.getHeight() - 8);\n }\n });\n // ===========================\n // Save PDF\n // ===========================\n doc.save(selectedRows.length ? \"selected_compliance_report.pdf\" : \"compliance_report.pdf\");\n }\n async function confirmDelete() {\n if (!deleteRow) return;\n try {\n setDeleting(true);\n await (0,_lib_api__WEBPACK_IMPORTED_MODULE_2__.api)(\"/compliance/\".concat(deleteRow.id), {\n method: \"DELETE\"\n });\n setDeleteRow(null);\n load();\n } catch (err) {\n alert(\"Failed to delete compliance record.\");\n } finally{\n setDeleting(false);\n }\n }\n function toggleRow(id) {\n setSelectedRows((prev)=>prev.includes(id) ? prev.filter((x)=>x !== id) : [\n ...prev,\n id\n ]);\n }\n const allSelected = paged.length > 0 && paged.every((r)=>selectedRows.includes(r.id));\n function toggleAll() {\n if (allSelected) {\n setSelectedRows((prev)=>prev.filter((id)=>!paged.some((r)=>r.id === id)));\n } else {\n setSelectedRows((prev)=>[\n ...new Set([\n ...prev,\n ...paged.map((r)=>r.id)\n ])\n ]);\n }\n }\n async function deleteSelected() {\n try {\n setDeleting(true);\n await Promise.all(selectedRows.map((id)=>(0,_lib_api__WEBPACK_IMPORTED_MODULE_2__.api)(\"/compliance/\".concat(id), {\n method: \"DELETE\"\n })));\n setSelectedRows([]);\n setBulkDeleteOpen(false);\n load();\n } finally{\n setDeleting(false);\n }\n }\n function openAdd() {\n setForm({\n product_id: \"\",\n compliance_type: TYPES[0],\n license_number: \"\",\n license_name: \"\",\n issuing_authority: \"\",\n issue_date: \"\",\n expiry_date: \"\",\n country: \"India\",\n state: \"\",\n category: \"\",\n applicable_to: \"Manufacturing Plant\",\n plant: \"\",\n remarks: \"\",\n _id: \"\"\n });\n }\n function openEdit(r) {\n setDetailId(null);\n var _r_product_id;\n setForm({\n ...r,\n _id: r.id,\n product_id: (_r_product_id = r.product_id) !== null && _r_product_id !== void 0 ? _r_product_id : \"\",\n issue_date: r.issue_date ? r.issue_date.slice(0, 10) : \"\",\n expiry_date: r.expiry_date ? r.expiry_date.slice(0, 10) : \"\"\n });\n }\n async function saveForm() {\n const { _id, ...payload } = form;\n if (_id) await (0,_lib_api__WEBPACK_IMPORTED_MODULE_2__.api)(\"/compliance/\".concat(_id), {\n method: \"PUT\",\n body: JSON.stringify(payload)\n });\n else await (0,_lib_api__WEBPACK_IMPORTED_MODULE_2__.api)(\"/compliance\", {\n method: \"POST\",\n body: JSON.stringify(payload)\n });\n setForm(null);\n load();\n }\n var _s_total_products, _s_complete, _s_complete_pct, _s_pending, _s_pending_pct, _s_expired, _s_expired_pct, _s_expiring;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-5\",\n onClick: ()=>setMenuFor(null),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xl font-bold\",\n children: \"Compliance Center\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 437,\n columnNumber: 3\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 436,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 lg:grid-cols-5 gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Kpi, {\n label: \"Total Products\",\n value: (_s_total_products = s === null || s === void 0 ? void 0 : s.total_products) !== null && _s_total_products !== void 0 ? _s_total_products : 0,\n sub: \"All products\",\n icon: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"h-5 w-5\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 443,\n columnNumber: 93\n }, void 0),\n tint: \"bg-blue-50 text-blue-600\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 443,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Kpi, {\n label: \"Complete\",\n value: (_s_complete = s === null || s === void 0 ? void 0 : s.complete) !== null && _s_complete !== void 0 ? _s_complete : 0,\n sub: \"\".concat((_s_complete_pct = s === null || s === void 0 ? void 0 : s.complete_pct) !== null && _s_complete_pct !== void 0 ? _s_complete_pct : 0, \"% of total\"),\n subColor: \"text-emerald-600\",\n icon: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"h-5 w-5\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 444,\n columnNumber: 132\n }, void 0),\n tint: \"bg-emerald-50 text-emerald-600\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 444,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Kpi, {\n label: \"Pending\",\n value: (_s_pending = s === null || s === void 0 ? void 0 : s.pending) !== null && _s_pending !== void 0 ? _s_pending : 0,\n sub: \"\".concat((_s_pending_pct = s === null || s === void 0 ? void 0 : s.pending_pct) !== null && _s_pending_pct !== void 0 ? _s_pending_pct : 0, \"% of total\"),\n subColor: \"text-amber-600\",\n icon: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"h-5 w-5\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 445,\n columnNumber: 127\n }, void 0),\n tint: \"bg-amber-50 text-amber-600\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 445,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Kpi, {\n label: \"Expired\",\n value: (_s_expired = s === null || s === void 0 ? void 0 : s.expired) !== null && _s_expired !== void 0 ? _s_expired : 0,\n sub: \"\".concat((_s_expired_pct = s === null || s === void 0 ? void 0 : s.expired_pct) !== null && _s_expired_pct !== void 0 ? _s_expired_pct : 0, \"% of total\"),\n subColor: \"text-rose-600\",\n icon: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n className: \"h-5 w-5\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 446,\n columnNumber: 126\n }, void 0),\n tint: \"bg-rose-50 text-rose-500\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 446,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Kpi, {\n label: \"Upcoming Expiry\",\n value: (_s_expiring = s === null || s === void 0 ? void 0 : s.expiring) !== null && _s_expiring !== void 0 ? _s_expiring : 0,\n sub: \"Next 30 days\",\n icon: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n className: \"h-5 w-5\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 447,\n columnNumber: 88\n }, void 0),\n tint: \"bg-violet-50 text-violet-600\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 447,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 442,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card p-4 flex flex-wrap items-end gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n className: \"absolute left-3 top-2.5 h-4 w-4 text-slate-400\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 453,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n value: filters.search,\n onChange: (e)=>set(\"search\", e.target.value),\n placeholder: \"Search compliance…\",\n className: \"pl-9 pr-3 py-2 w-52 rounded-lg border border-slate-200 text-sm\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 454,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 452,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Filter, {\n label: \"Status\",\n value: filters.status_filter,\n onChange: (v)=>set(\"status_filter\", v),\n opts: [\n \"complete\",\n \"pending\",\n \"expiring\",\n \"expired\"\n ].map((x)=>({\n value: x,\n label: x\n })),\n all: \"All Status\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 457,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Filter, {\n label: \"Type\",\n value: filters.compliance_type,\n onChange: (v)=>set(\"compliance_type\", v),\n opts: TYPES.map((t)=>({\n value: t,\n label: t\n })),\n all: \"All Types\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 458,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Filter, {\n label: \"Country\",\n value: filters.country,\n onChange: (v)=>set(\"country\", v),\n opts: [\n {\n value: \"India\",\n label: \"India\"\n }\n ],\n all: \"All Countries\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 459,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 451,\n columnNumber: 7\n }, this),\n showAlerts && (s === null || s === void 0 ? void 0 : (_s_alerts = s.alerts) === null || _s_alerts === void 0 ? void 0 : _s_alerts.length) > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card p-4 bg-amber-50 border border-amber-200 rounded-xl relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setShowAlerts(false),\n className: \"absolute top-3 right-3 rounded-md p-1 text-amber-700 hover:bg-amber-100\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 470,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 466,\n columnNumber: 5\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-semibold text-amber-800 text-sm flex items-center gap-2 mb-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 474,\n columnNumber: 7\n }, this),\n \"Attention needed\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 473,\n columnNumber: 5\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-1\",\n children: s.alerts.map((a, i)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-amber-700\",\n children: [\n a.type,\n a.number ? \" (\".concat(a.number, \")\") : \"\",\n \" — \",\n a.status,\n a.expiry ? \" \\xb7 expires \".concat(new Date(a.expiry).toLocaleDateString()) : \"\"\n ]\n }, i, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 480,\n columnNumber: 9\n }, this))\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 478,\n columnNumber: 5\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 465,\n columnNumber: 3\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-slate-500\",\n children: [\n \"Total: \",\n rows.length\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 497,\n columnNumber: 5\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"flex items-center gap-2 px-4 py-2 rounded-lg border border-slate-200 bg-white hover:bg-slate-50 cursor-pointer text-sm font-medium\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 503,\n columnNumber: 7\n }, this),\n \"Import\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"file\",\n accept: \".csv,.xlsx,.xls,.json\",\n className: \"hidden\",\n onChange: handleImport\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 505,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 502,\n columnNumber: 5\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleExport,\n className: \"flex items-center gap-2 px-4 py-2 rounded-lg border border-slate-200 bg-white hover:bg-slate-50 text-sm font-medium\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 518,\n columnNumber: 7\n }, this),\n selectedRows.length > 0 ? \"Export Selected (\".concat(selectedRows.length, \")\") : \"Export\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 514,\n columnNumber: 5\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handlePdfExport,\n className: \"flex items-center gap-2 rounded-lg border border-slate-200 bg-white px-4 py-2 text-sm font-medium hover:bg-slate-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 527,\n columnNumber: 3\n }, this),\n selectedRows.length ? \"PDF (\".concat(selectedRows.length, \")\") : \"PDF Report\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 523,\n columnNumber: 1\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: openAdd,\n className: \"flex items-center gap-2 bg-brand-600 text-white px-4 py-2 rounded-lg text-sm font-semibold\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 538,\n columnNumber: 7\n }, this),\n \"Add Compliance\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 534,\n columnNumber: 5\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 496,\n columnNumber: 3\n }, this),\n selectedRows.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium text-brand-600\",\n children: [\n selectedRows.length,\n \" Selected\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 546,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setBulkDeleteOpen(true),\n className: \"rounded-lg bg-red-600 px-4 py-2 text-sm text-white\",\n children: \"Delete Selected\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 550,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 545,\n columnNumber: 5\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 494,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card overflow-x-auto\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"table\", {\n className: \"w-full text-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"thead\", {\n className: \"bg-slate-50 text-slate-500 text-left\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-4 py-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n checked: allSelected,\n onChange: toggleAll\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 566,\n columnNumber: 3\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 565,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-4 py-3 font-medium\",\n children: \"Product\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 572,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-4 py-3 font-medium\",\n children: \"Type\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 573,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-4 py-3 font-medium\",\n children: \"License / Reg.\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 574,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-4 py-3 font-medium\",\n children: \"Issue Date\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 575,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-4 py-3 font-medium\",\n children: \"Expiry Date\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 576,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-4 py-3 font-medium\",\n children: \"Status\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 577,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-4 py-3 font-medium\",\n children: \"Country\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 578,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-4 py-3 font-medium\",\n children: \"Last Updated\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 579,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-4 py-3 font-medium\",\n children: \"Actions\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 580,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 564,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 563,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tbody\", {\n className: \"divide-y divide-slate-100\",\n children: [\n paged.map((c)=>/*#__PURE__*/ {\n var _c_product_name, _c_sku, _c_license_number, _STATUS_c_status, _c_country;\n return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: \"hover:bg-slate-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n checked: selectedRows.includes(c.id),\n onChange: ()=>toggleRow(c.id)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 587,\n columnNumber: 3\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 586,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-3\",\n children: [\n c.product_image ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: imgSrc(c.product_image),\n className: \"h-10 w-10 rounded object-contain border border-slate-100\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 596,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-10 w-10 rounded bg-slate-100\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 597,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-medium text-slate-800\",\n children: (_c_product_name = c.product_name) !== null && _c_product_name !== void 0 ? _c_product_name : \"—\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 599,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-slate-400\",\n children: (_c_sku = c.sku) !== null && _c_sku !== void 0 ? _c_sku : \"\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 600,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 598,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 594,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 593,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-3\",\n children: c.compliance_type\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 604,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-3 font-mono text-slate-600\",\n children: (_c_license_number = c.license_number) !== null && _c_license_number !== void 0 ? _c_license_number : \"—\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 605,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-3 text-slate-500\",\n children: c.issue_date ? new Date(c.issue_date).toLocaleDateString() : \"—\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 606,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-3\",\n children: c.expiry_date ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: c.days_left != null && c.days_left < 0 ? \"text-rose-600\" : c.days_left != null && c.days_left < 30 ? \"text-amber-600\" : \"text-slate-700\",\n children: new Date(c.expiry_date).toLocaleDateString()\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 610,\n columnNumber: 23\n }, this),\n c.days_left != null && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs \".concat(c.days_left < 0 ? \"text-rose-500\" : \"text-slate-400\"),\n children: c.days_left < 0 ? \"(Expired)\" : \"(In \".concat(c.days_left, \" days)\")\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 613,\n columnNumber: 47\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 609,\n columnNumber: 21\n }, this) : \"—\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 607,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs font-semibold px-2 py-0.5 rounded-full capitalize \".concat((_STATUS_c_status = STATUS[c.status]) !== null && _STATUS_c_status !== void 0 ? _STATUS_c_status : \"bg-slate-100\"),\n children: c.status\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 619,\n columnNumber: 43\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 619,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-3\",\n children: (_c_country = c.country) !== null && _c_country !== void 0 ? _c_country : \"—\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 620,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-3 text-slate-500\",\n children: c.updated_at ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: new Date(c.updated_at).toLocaleDateString(\"en-IN\")\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 624,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-slate-400\",\n children: new Date(c.updated_at).toLocaleTimeString(\"en-IN\", {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\"\n })\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 627,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 623,\n columnNumber: 5\n }, this) : \"—\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 621,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-4 py-3 relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n title: \"View\",\n onClick: ()=>setDetailId(c.id),\n className: \"h-8 w-8 grid place-items-center rounded-lg border border-slate-200 text-slate-500 hover:bg-slate-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 641,\n columnNumber: 188\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 641,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: (e)=>{\n e.stopPropagation();\n setMenuFor(menuFor === c.id ? null : c.id);\n },\n className: \"h-8 w-8 grid place-items-center rounded-lg border border-slate-200 text-slate-500 hover:bg-slate-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 642,\n columnNumber: 227\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 642,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 640,\n columnNumber: 19\n }, this),\n menuFor === c.id && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n onClick: (e)=>e.stopPropagation(),\n className: \"absolute right-4 top-12 z-20 w-44 bg-white rounded-xl border border-slate-200 shadow-lg py-1 text-left\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n openEdit(c);\n setMenuFor(null);\n },\n className: \"w-full flex items-center gap-2 px-3 py-2 text-sm text-slate-700 hover:bg-slate-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 646,\n columnNumber: 176\n }, this),\n \" Edit\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 646,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setDetailId(c.id);\n setMenuFor(null);\n },\n className: \"w-full flex items-center gap-2 px-3 py-2 text-sm text-slate-700 hover:bg-slate-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 647,\n columnNumber: 182\n }, this),\n \" Upload Document\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 647,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"my-1 border-t border-slate-100\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 649,\n columnNumber: 3\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n setDeleteRow(c);\n setMenuFor(null);\n },\n className: \"w-full flex items-center gap-2 px-3 py-2 text-sm text-red-600 hover:bg-red-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 658,\n columnNumber: 5\n }, this),\n \"Delete\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 651,\n columnNumber: 3\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 645,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 639,\n columnNumber: 17\n }, this)\n ]\n }, c.id, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 585,\n columnNumber: 15\n }, this);\n }),\n paged.length === 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n colSpan: 8,\n className: \"px-4 py-12 text-center text-slate-400\",\n children: \"No compliance records.\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 666,\n columnNumber: 40\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 666,\n columnNumber: 36\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 583,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 562,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between px-4 py-3 text-sm text-slate-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: [\n \"Showing \",\n rows.length === 0 ? 0 : (page - 1) * pageSize + 1,\n \" to \",\n Math.min(page * pageSize, rows.length),\n \" of \",\n rows.length\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 670,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n disabled: page === 1,\n onClick: ()=>setPage(page - 1),\n className: \"px-3 py-1 rounded border border-slate-200 disabled:opacity-40\",\n children: \"\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 672,\n columnNumber: 13\n }, this),\n Array.from({\n length: totalPages\n }).slice(0, 5).map((_, i)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setPage(i + 1),\n className: \"px-3 py-1 rounded \".concat(page === i + 1 ? \"bg-brand-600 text-white\" : \"border border-slate-200\"),\n children: i + 1\n }, i, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 674,\n columnNumber: 15\n }, this)),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n disabled: page === totalPages,\n onClick: ()=>setPage(page + 1),\n className: \"px-3 py-1 rounded border border-slate-200 disabled:opacity-40\",\n children: \"\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 676,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 671,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 669,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 561,\n columnNumber: 7\n }, this),\n detailId && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ComplianceDetailModal__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n cid: detailId,\n onClose: ()=>setDetailId(null),\n onEdit: ()=>{\n const r = rows.find((x)=>x.id === detailId);\n if (r) openEdit(r);\n },\n onChanged: load\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 683,\n columnNumber: 9\n }, this),\n deleteRow && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4\",\n onClick: ()=>setDeleteRow(null),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n onClick: (e)=>e.stopPropagation(),\n className: \"w-full max-w-md rounded-2xl bg-white shadow-xl\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border-b px-6 py-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-lg font-bold text-slate-900\",\n children: \"Delete Compliance\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 699,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 698,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-6 space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-4\",\n children: [\n deleteRow.product_image ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: imgSrc(deleteRow.product_image),\n className: \"h-16 w-16 rounded-lg border object-contain\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 707,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-16 w-16 rounded-lg bg-slate-100\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 712,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-semibold text-slate-900\",\n children: deleteRow.product_name\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 716,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-slate-500\",\n children: deleteRow.compliance_type\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 720,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-slate-400\",\n children: deleteRow.license_number || \"No License Number\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 724,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 715,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 705,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"rounded-lg border border-red-200 bg-red-50 p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-red-700\",\n children: \"Are you sure you want to delete this compliance record?\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 731,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-xs text-red-600\",\n children: \"This action cannot be undone.\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 735,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 730,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 704,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end gap-3 border-t px-6 py-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setDeleteRow(null),\n className: \"rounded-lg border border-slate-200 px-4 py-2 text-sm\",\n children: \"Cancel\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 742,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: confirmDelete,\n disabled: deleting,\n className: \"rounded-lg bg-red-600 px-5 py-2 text-sm font-semibold text-white hover:bg-red-700 disabled:opacity-50\",\n children: deleting ? \"Deleting...\" : \"Delete\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 749,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 741,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 694,\n columnNumber: 5\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 690,\n columnNumber: 3\n }, this),\n bulkDeleteOpen && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 z-50 flex items-center justify-center bg-black/50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full max-w-md rounded-xl bg-white shadow-xl\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border-b px-6 py-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-lg font-bold\",\n children: \"Delete Compliance Records\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 765,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 764,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-slate-700\",\n children: [\n \"Are you sure you want to delete\",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-bold text-red-600\",\n children: [\n \" \",\n selectedRows.length,\n \" compliance record\",\n selectedRows.length > 1 ? \"s\" : \"\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 773,\n columnNumber: 11\n }, this),\n \"?\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 771,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-slate-500\",\n children: \"This action cannot be undone.\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 781,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 770,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end gap-3 border-t px-6 py-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setBulkDeleteOpen(false),\n className: \"rounded-lg border px-4 py-2\",\n children: \"Cancel\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 787,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: deleteSelected,\n disabled: deleting,\n className: \"rounded-lg bg-red-600 px-5 py-2 text-white\",\n children: deleting ? \"Deleting...\" : \"Delete (\".concat(selectedRows.length, \")\")\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 794,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 786,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 763,\n columnNumber: 5\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 762,\n columnNumber: 3\n }, this),\n form && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 bg-black/40 z-50 grid place-items-center p-4 overflow-y-auto\",\n onClick: ()=>setForm(null),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl w-full max-w-lg my-4 max-h-[92vh] overflow-y-auto\",\n onClick: (e)=>e.stopPropagation(),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between px-5 py-4 border-b border-slate-100 sticky top-0 bg-white rounded-t-2xl\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"font-bold\",\n children: form._id ? \"Edit Compliance\" : \"Add Compliance\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 812,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setForm(null),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_AlertTriangle_Calendar_CheckCircle2_Clock_Download_Eye_MoreVertical_Package_Pencil_Plus_Search_Trash2_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n className: \"h-5 w-5 text-slate-400\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 813,\n columnNumber: 53\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 813,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 811,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-5 grid grid-cols-2 gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Fld, {\n label: \"Product\",\n full: true,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n value: form.product_id,\n onChange: (e)=>setForm({\n ...form,\n product_id: e.target.value\n }),\n className: \"input\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"\",\n children: \"Select product\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 818,\n columnNumber: 19\n }, this),\n products.map((p)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: p.id,\n children: p.name\n }, p.id, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 819,\n columnNumber: 40\n }, this))\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 817,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 816,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Fld, {\n label: \"Compliance Type\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n value: form.compliance_type,\n onChange: (e)=>setForm({\n ...form,\n compliance_type: e.target.value\n }),\n className: \"input\",\n children: TYPES.map((t)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n children: t\n }, t, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 824,\n columnNumber: 37\n }, this))\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 823,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 822,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Inp, {\n label: \"License / Reg. No.\",\n v: form.license_number,\n on: (x)=>setForm({\n ...form,\n license_number: x\n })\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 827,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Inp, {\n label: \"License Name\",\n v: form.license_name,\n on: (x)=>setForm({\n ...form,\n license_name: x\n })\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 828,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Inp, {\n label: \"Issuing Authority\",\n v: form.issuing_authority,\n on: (x)=>setForm({\n ...form,\n issuing_authority: x\n })\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 829,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Inp, {\n label: \"Issue Date\",\n type: \"date\",\n v: form.issue_date,\n on: (x)=>setForm({\n ...form,\n issue_date: x\n })\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 830,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Inp, {\n label: \"Expiry Date\",\n type: \"date\",\n v: form.expiry_date,\n on: (x)=>setForm({\n ...form,\n expiry_date: x\n })\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 831,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Inp, {\n label: \"Country\",\n v: form.country,\n on: (x)=>setForm({\n ...form,\n country: x\n })\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 832,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Inp, {\n label: \"State\",\n v: form.state,\n on: (x)=>setForm({\n ...form,\n state: x\n })\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 833,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Inp, {\n label: \"Category\",\n v: form.category,\n on: (x)=>setForm({\n ...form,\n category: x\n })\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 834,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Inp, {\n label: \"Applicable To\",\n v: form.applicable_to,\n on: (x)=>setForm({\n ...form,\n applicable_to: x\n })\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 835,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Inp, {\n label: \"Manufacturing Plant\",\n v: form.plant,\n on: (x)=>setForm({\n ...form,\n plant: x\n })\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 836,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Inp, {\n label: \"Remarks\",\n full: true,\n v: form.remarks,\n on: (x)=>setForm({\n ...form,\n remarks: x\n })\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 837,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 815,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end gap-3 px-5 py-4 border-t border-slate-100 sticky bottom-0 bg-white\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setForm(null),\n className: \"px-5 py-2 rounded-lg border border-slate-200 text-sm font-medium\",\n children: \"Cancel\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 840,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: saveForm,\n className: \"px-6 py-2 rounded-lg bg-brand-600 text-white text-sm font-semibold\",\n children: \"Save\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 841,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 839,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 810,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 809,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"style\", {\n children: \".input{margin-top:.25rem;width:100%;padding:.5rem .75rem;border-radius:.5rem;border:1px solid #e2e8f0;font-size:.875rem}\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 846,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 435,\n columnNumber: 5\n }, this);\n}\n_s(Compliance, \"xW+7PF4i2njBORx+fM3/QhKLL8I=\");\n_c = Compliance;\nfunction Kpi(param) {\n let { label, value, sub, subColor = \"text-slate-400\", icon, tint } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card p-5\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-start gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-12 w-12 rounded-xl grid place-items-center shrink-0 \".concat(tint),\n children: icon\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 855,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-w-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm text-slate-500\",\n children: label\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 857,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-2xl font-extrabold text-slate-900 mt-0.5\",\n children: value\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 858,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs font-medium mt-1 \".concat(subColor),\n children: sub\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 859,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 856,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 854,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 853,\n columnNumber: 5\n }, this);\n}\n_c1 = Kpi;\nfunction Filter(param) {\n let { label, value, onChange, opts, all } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs text-slate-500\",\n children: label\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 870,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n value: value,\n onChange: (e)=>onChange(e.target.value),\n className: \"mt-1 block px-3 py-2 rounded-lg border border-slate-200 text-sm min-w-[130px] capitalize\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"\",\n children: all\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 872,\n columnNumber: 9\n }, this),\n opts.map((o)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: o.value,\n children: o.label\n }, o.value, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 873,\n columnNumber: 26\n }, this))\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 871,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 869,\n columnNumber: 5\n }, this);\n}\n_c2 = Filter;\nfunction Fld(param) {\n let { label, children, full } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block \".concat(full ? \"col-span-2\" : \"\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium\",\n children: label\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 879,\n columnNumber: 65\n }, this),\n children\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 879,\n columnNumber: 10\n }, this);\n}\n_c3 = Fld;\nfunction Inp(param) {\n let { label, v, on, type = \"text\", full } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block \".concat(full ? \"col-span-2\" : \"\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium\",\n children: label\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 884,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: type,\n value: v !== null && v !== void 0 ? v : \"\",\n onChange: (e)=>on(e.target.value),\n className: \"input\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 885,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\app\\\\dashboard\\\\compliance\\\\page.tsx\",\n lineNumber: 883,\n columnNumber: 5\n }, this);\n}\n_c4 = Inp;\nvar _c, _c1, _c2, _c3, _c4;\n$RefreshReg$(_c, \"Compliance\");\n$RefreshReg$(_c1, \"Kpi\");\n$RefreshReg$(_c2, \"Filter\");\n$RefreshReg$(_c3, \"Fld\");\n$RefreshReg$(_c4, \"Inp\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9kYXNoYm9hcmQvY29tcGxpYW5jZS9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDcUQ7QUFJL0I7QUFDbUI7QUFDOEI7QUFDN0M7QUFDYztBQUd4QyxTQUFTc0IsT0FBT0MsR0FBWTtJQUMxQixJQUFJLENBQUNBLEtBQUssT0FBTztJQUNqQixJQUFJQSxJQUFJQyxVQUFVLENBQUMsWUFBWUQsSUFBSUMsVUFBVSxDQUFDLFNBQVMsT0FBT0Q7SUFDOUQsT0FBTyxHQUFhQSxPQUFWTCw2Q0FBT0EsRUFBTyxPQUFKSztBQUN0QjtBQUVBLE1BQU1FLFFBQVE7SUFBQztJQUFpQjtJQUFnQjtJQUFtQjtJQUNqRTtJQUFvQjtJQUFtQjtJQUFzQjtDQUF5QjtBQUV4RixNQUFNQyxTQUFpQztJQUNyQ0MsVUFBVTtJQUNWQyxTQUFTO0lBQ1RDLFVBQVU7SUFDVkMsU0FBUztBQUNYO0FBRWUsU0FBU0M7UUFtYlRDOztJQWxiYixNQUFNLENBQUNDLE1BQU1DLFFBQVEsR0FBR2hDLCtDQUFRQSxDQUFRLEVBQUU7SUFDMUMsTUFBTSxDQUFDOEIsR0FBR0csS0FBSyxHQUFHakMsK0NBQVFBLENBQU07SUFDaEMsTUFBTSxDQUFDa0MsVUFBVUMsWUFBWSxHQUFHbkMsK0NBQVFBLENBQVEsRUFBRTtJQUNsRCxNQUFNLENBQUNvQyxTQUFTQyxXQUFXLEdBQUdyQywrQ0FBUUEsQ0FBQztRQUFFc0MsUUFBUTtRQUFJQyxlQUFlO1FBQUlDLGlCQUFpQjtRQUFJQyxTQUFTO0lBQUc7SUFDekcsTUFBTSxDQUFDQyxVQUFVQyxZQUFZLEdBQUczQywrQ0FBUUEsQ0FBZ0I7SUFDeEQsTUFBTSxDQUFDNEMsU0FBU0MsV0FBVyxHQUFHN0MsK0NBQVFBLENBQWdCO0lBQ3RELE1BQU0sQ0FBQzhDLE1BQU1DLFFBQVEsR0FBRy9DLCtDQUFRQSxDQUFNLE9BQWEsc0NBQXNDO0lBQ3pGLE1BQU0sQ0FBQ2dELE1BQU1D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QUFFRSxNQUFNLENBQUNXLEtBQUs7Z0JBQUc4RCxXQUFVOztrQ0FDekUsOERBQUN5RDt3QkFBT3ZILE9BQU07a0NBQUlvRDs7Ozs7O29CQUNqQjJCLEtBQUtsSSxHQUFHLENBQUMsQ0FBQytLLGtCQUFNLDhEQUFDTDs0QkFBcUJ2SCxPQUFPNEgsRUFBRTVILEtBQUs7c0NBQUc0SCxFQUFFMUQsS0FBSzsyQkFBakMwRCxFQUFFNUgsS0FBSzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJN0M7TUFaUzhFO0FBYVQsU0FBU3NDLElBQUksS0FBOEI7UUFBOUIsRUFBRWxELEtBQUssRUFBRTJELFFBQVEsRUFBRVIsSUFBSSxFQUFPLEdBQTlCO0lBQ1gscUJBQU8sOERBQUNuRDtRQUFNSixXQUFXLFNBQWtDLE9BQXpCdUQsT0FBTyxlQUFlOzswQkFBTSw4REFBQzlCO2dCQUFLekIsV0FBVTswQkFBdUJJOzs7Ozs7WUFBYzJEOzs7Ozs7O0FBQ3JIO01BRlNUO0FBR1QsU0FBU0ssSUFBSSxLQUF3SDtRQUF4SCxFQUFFdkQsS0FBSyxFQUFFOUksQ0FBQyxFQUFFc00sRUFBRSxFQUFFdEosT0FBTyxNQUFNLEVBQUVpSixJQUFJLEVBQXFGLEdBQXhIO0lBQ1gscUJBQ0UsOERBQUNuRDtRQUFNSixXQUFXLFNBQWtDLE9BQXpCdUQsT0FBTyxlQUFlOzswQkFDL0MsOERBQUM5QjtnQkFBS3pCLFdBQVU7MEJBQXVCSTs7Ozs7OzBCQUN2Qyw4REFBQ1M7Z0JBQU12RyxNQUFNQTtnQkFBTTRCLE9BQU81RSxjQUFBQSxlQUFBQSxJQUFLO2dCQUFJd0osVUFBVSxDQUFDekYsSUFBTXVJLEdBQUd2SSxFQUFFRSxNQUFNLENBQUNXLEtBQUs7Z0JBQUc4RCxXQUFVOzs7Ozs7Ozs7Ozs7QUFHeEY7TUFQUzJEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2FwcC9kYXNoYm9hcmQvY29tcGxpYW5jZS9wYWdlLnRzeD8zYTgzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUGFja2FnZSwgQ2hlY2tDaXJjbGUyLCBDbG9jaywgQWxlcnRUcmlhbmdsZSwgQ2FsZW5kYXIsIFNlYXJjaCxcbiAgUGx1cywgRG93bmxvYWQsIEV5ZSwgUGVuY2lsLCBVcGxvYWQsIE1vcmVWZXJ0aWNhbCwgWCxUcmFzaDIsXG59IGZyb20gXCJsdWNpZGUtcmVhY3RcIjtcbmltcG9ydCB7IGFwaSwgYXBpQmFzZSB9IGZyb20gXCJAL2xpYi9hcGlcIjtcbmltcG9ydCBDb21wbGlhbmNlRGV0YWlsTW9kYWwgZnJvbSBcIkAvY29tcG9uZW50cy9Db21wbGlhbmNlRGV0YWlsTW9kYWxcIjtcbmltcG9ydCBqc1BERiBmcm9tIFwianNwZGZcIjtcbmltcG9ydCBhdXRvVGFibGUgZnJvbSBcImpzcGRmLWF1dG90YWJsZVwiO1xuXG5cbmZ1bmN0aW9uIGltZ1NyYyh1cmw/OiBzdHJpbmcpIHtcbiAgaWYgKCF1cmwpIHJldHVybiBcIlwiO1xuICBpZiAodXJsLnN0YXJ0c1dpdGgoXCJkYXRhOlwiKSB8fCB1cmwuc3RhcnRzV2l0aChcImh0dHBcIikpIHJldHVybiB1cmw7XG4gIHJldHVybiBgJHthcGlCYXNlfSR7dXJsfWA7XG59XG5cbmNvbnN0IFRZUEVTID0gW1wiRlNTQUkgTGljZW5zZVwiLCBcIkRydWcgTGljZW5zZVwiLCBcIkdNUCBDZXJ0aWZpY2F0ZVwiLCBcIklTTyBDZXJ0aWZpY2F0ZVwiLFxuICBcIkVQUiBSZWdpc3RyYXRpb25cIiwgXCJGYWN0b3J5IExpY2Vuc2VcIiwgXCJJbXBvcnQgRXhwb3J0IENvZGVcIiwgXCJUcmFkZW1hcmsgUmVnaXN0cmF0aW9uXCJdO1xuXG5jb25zdCBTVEFUVVM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIGNvbXBsZXRlOiBcImJnLWVtZXJhbGQtNTAgdGV4dC1lbWVyYWxkLTcwMFwiLFxuICBwZW5kaW5nOiBcImJnLWFtYmVyLTUwIHRleHQtYW1iZXItNzAwXCIsXG4gIGV4cGlyaW5nOiBcImJnLWFtYmVyLTUwIHRleHQtYW1iZXItNzAwXCIsXG4gIGV4cGlyZWQ6IFwiYmctcm9zZS01MCB0ZXh0LXJvc2UtNzAwXCIsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDb21wbGlhbmNlKCkge1xuICBjb25zdCBbcm93cywgc2V0Um93c10gPSB1c2VTdGF0ZTxhbnlbXT4oW10pO1xuICBjb25zdCBbcywgc2V0U10gPSB1c2VTdGF0ZTxhbnk+KG51bGwpO1xuICBjb25zdCBbcHJvZHVjdHMsIHNldFByb2R1Y3RzXSA9IHVzZVN0YXRlPGFueVtdPihbXSk7XG4gIGNvbnN0IFtmaWx0ZXJzLCBzZXRGaWx0ZXJzXSA9IHVzZVN0YXRlKHsgc2VhcmNoOiBcIlwiLCBzdGF0dXNfZmlsdGVyOiBcIlwiLCBjb21wbGlhbmNlX3R5cGU6IFwiXCIsIGNvdW50cnk6IFwiXCIgfSk7XG4gIGNvbnN0IFtkZXRhaWxJZCwgc2V0RGV0YWlsSWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFttZW51Rm9yLCBzZXRNZW51Rm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbZm9ybSwgc2V0Rm9ybV0gPSB1c2VTdGF0ZTxhbnk+KG51bGwpOyAgICAgICAvLyBhZGQvZWRpdCBmb3JtIHN0YXRlIChudWxsID0gY2xvc2VkKVxuICBjb25zdCBbcGFnZSwgc2V0UGFnZV0gPSB1c2VTdGF0ZSgxKTtcbiAgY29uc3QgcGFnZVNpemUgPSAyNTtcbiAgY29uc3QgW3Nob3dBbGVydHMsIHNldFNob3dBbGVydHNdID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtkZWxldGVSb3csIHNldERlbGV0ZVJvd10gPSB1c2VTdGF0ZTxhbnk+KG51bGwpO1xuY29uc3QgW2RlbGV0aW5nLCBzZXREZWxldGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzZWxlY3RlZFJvd3MsIHNldFNlbGVjdGVkUm93c10gPSB1c2VTdGF0ZTxzdHJpbmdbXT4oW10pO1xuY29uc3QgW2J1bGtEZWxldGVPcGVuLCBzZXRCdWxrRGVsZXRlT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIFxuXG4gIGZ1bmN0aW9uIGxvYWQoKSB7XG4gIGNvbnN0IHFzID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICBPYmplY3QuZW50cmllcyhmaWx0ZXJzKS5maWx0ZXIoKFssIHZdKSA9PiB2KSBhcyBhbnlcbiAgKS50b1N0cmluZygpO1xuXG4gIGFwaShgL2NvbXBsaWFuY2Uke3FzID8gXCI/XCIgKyBxcyA6IFwiXCJ9YClcbiAgICAudGhlbihzZXRSb3dzKVxuICAgIC5jYXRjaCgoKSA9PiBzZXRSb3dzKFtdKSk7XG5cbiAgYXBpKFwiL2NvbXBsaWFuY2Uvc3VtbWFyeVwiKVxuICAgIC50aGVuKChkYXRhKSA9PiB7XG4gICAgICBzZXRTKGRhdGEpO1xuICAgICAgc2V0U2hvd0FsZXJ0cyh0cnVlKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoKSA9PiB7fSk7XG59XG4gIHVzZUVmZmVjdCgoKSA9PiB7IGxvYWQoKTsgfSwgW2ZpbHRlcnNdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHsgYXBpKFwiL3Byb2R1Y3RzXCIpLnRoZW4oKGQpID0+IHNldFByb2R1Y3RzKGQuaXRlbXMgPz8gW10pKS5jYXRjaCgoKSA9PiB7fSk7IH0sIFtdKTtcblxuICBjb25zdCBwYWdlZCA9IHVzZU1lbW8oKCkgPT4gcm93cy5zbGljZSgocGFnZSAtIDEpICogcGFnZVNpemUsIHBhZ2UgKiBwYWdlU2l6ZSksIFtyb3dzLCBwYWdlXSk7XG4gIGNvbnN0IHRvdGFsUGFnZXMgPSBNYXRoLm1heCgxLCBNYXRoLmNlaWwocm93cy5sZW5ndGggLyBwYWdlU2l6ZSkpO1xuICBjb25zdCBzZXQgPSAoazogc3RyaW5nLCB2OiBzdHJpbmcpID0+IHsgc2V0UGFnZSgxKTsgc2V0RmlsdGVycygoZikgPT4gKHsgLi4uZiwgW2tdOiB2IH0pKTsgfTtcbiAgZnVuY3Rpb24gaGFuZGxlRXhwb3J0KCkge1xuICBjb25zdCBleHBvcnRSb3dzID1cbiAgICBzZWxlY3RlZFJvd3MubGVuZ3RoID4gMFxuICAgICAgPyByb3dzLmZpbHRlcigocikgPT4gc2VsZWN0ZWRSb3dzLmluY2x1ZGVzKHIuaWQpKVxuICAgICAgOiByb3dzO1xuXG4gIGNvbnN0IGhlYWRlcnMgPSBbXG4gICAgXCJQcm9kdWN0XCIsXG4gICAgXCJTS1VcIixcbiAgICBcIkNvbXBsaWFuY2UgVHlwZVwiLFxuICAgIFwiTGljZW5zZSBOdW1iZXJcIixcbiAgICBcIkxpY2Vuc2UgTmFtZVwiLFxuICAgIFwiSXNzdWluZyBBdXRob3JpdHlcIixcbiAgICBcIklzc3VlIERhdGVcIixcbiAgICBcIkV4cGlyeSBEYXRlXCIsXG4gICAgXCJEYXlzIExlZnRcIixcbiAgICBcIlN0YXR1c1wiLFxuICAgIFwiQ291bnRyeVwiLFxuICAgIFwiU3RhdGVcIixcbiAgICBcIkNhdGVnb3J5XCIsXG4gICAgXCJBcHBsaWNhYmxlIFRvXCIsXG4gICAgXCJNYW51ZmFjdHVyaW5nIFBsYW50XCIsXG4gICAgXCJSZW1hcmtzXCIsXG4gICAgXCJDcmVhdGVkIEJ5XCIsXG4gICAgXCJDcmVhdGVkIE9uXCIsXG4gICAgXCJMYXN0IFVwZGF0ZWRcIixcbiAgICBcIkRvY3VtZW50IFVSTFwiLFxuICBdO1xuXG4gIGNvbnN0IGNzdiA9IFtcbiAgICBoZWFkZXJzLmpvaW4oXCIsXCIpLFxuICAgIC4uLmV4cG9ydFJvd3MubWFwKChyKSA9PlxuICAgICAgW1xuICAgICAgICBgXCIke3IucHJvZHVjdF9uYW1lID8/IFwiXCJ9XCJgLFxuICAgICAgICBgXCIke3Iuc2t1ID8/IFwiXCJ9XCJgLFxuICAgICAgICBgXCIke3IuY29tcGxpYW5jZV90eXBlID8/IFwiXCJ9XCJgLFxuICAgICAgICBgXCIke3IubGljZW5zZV9udW1iZXIgPz8gXCJcIn1cImAsXG4gICAgICAgIGBcIiR7ci5saWNlbnNlX25hbWUgPz8gXCJcIn1cImAsXG4gICAgICAgIGBcIiR7ci5pc3N1aW5nX2F1dGhvcml0eSA/PyBcIlwifVwiYCxcbiAgICAgICAgYFwiJHtyLmlzc3VlX2RhdGUgPz8gXCJcIn1cImAsXG4gICAgICAgIGBcIiR7ci5leHBpcnlfZGF0ZSA/PyBcIlwifVwiYCxcbiAgICAgICAgYFwiJHtyLmRheXNfbGVmdCA9PSBudWxsXG4gICA/IFwiLVwiXG4gICAgOiByLmRheXNfbGVmdCA8IDBcbiAgICA/IFwiRXhwaXJlZFwiXG4gICAgOiByLmRheXNfbGVmdCA9PT0gMFxuICAgID8gXCJUb2RheVwiXG4gICAgOiBgJHtyLmRheXNfbGVmdH0gRGF5c2Bcbn1cImAsXG4gICAgICAgIGBcIiR7ci5zdGF0dXMgPz8gXCJcIn1cImAsXG4gICAgICAgIGBcIiR7ci5jb3VudHJ5ID8/IFwiXCJ9XCJgLFxuICAgICAgICBgXCIke3Iuc3RhdGUgPz8gXCJcIn1cImAsXG4gICAgICAgIGBcIiR7ci5jYXRlZ29yeSA/PyBcIlwifVwiYCxcbiAgICAgICAgYFwiJHtyLmFwcGxpY2FibGVfdG8gPz8gXCJcIn1cImAsXG4gICAgICAgIGBcIiR7ci5wbGFudCA/PyBcIlwifVwiYCxcbiAgICAgICAgYFwiJHtyLnJlbWFya3MgPz8gXCJcIn1cImAsXG4gICAgICAgIGBcIiR7ci5jcmVhdGVkX2J5ID8/IFwiXCJ9XCJgLFxuICAgICAgICBgXCIke3IuY3JlYXRlZF9hdCA/IG5ldyBEYXRlKHIuY3JlYXRlZF9hdCkudG9Mb2NhbGVTdHJpbmcoXCJlbi1JTlwiKSA6IFwiXCJ9XCJgLFxuICAgICAgICBgXCIke3IudXBkYXRlZF9hdCA/IG5ldyBEYXRlKHIudXBkYXRlZF9hdCkudG9Mb2NhbGVTdHJpbmcoXCJlbi1JTlwiKSA6IFwiXCJ9XCJgLFxuICAgICAgICBgXCIke3IuZG9jdW1lbnRfdXJsID8/IFwiXCJ9XCJgLFxuICAgICAgXS5qb2luKFwiLFwiKVxuICAgICksXG4gIF0uam9pbihcIlxcblwiKTtcblxuICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2Nzdl0sIHtcbiAgICB0eXBlOiBcInRleHQvY3N2O2NoYXJzZXQ9dXRmLTg7XCIsXG4gIH0pO1xuXG4gIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cbiAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICBhLmhyZWYgPSB1cmw7XG4gIGEuZG93bmxvYWQgPVxuICAgIHNlbGVjdGVkUm93cy5sZW5ndGggPiAwXG4gICAgICA/IGBzZWxlY3RlZF9jb21wbGlhbmNlXyR7c2VsZWN0ZWRSb3dzLmxlbmd0aH0uY3N2YFxuICAgICAgOiBgY29tcGxpYW5jZV8ke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCl9LmNzdmA7XG5cbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgYS5jbGljaygpO1xuICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpO1xuXG4gIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUltcG9ydChcbiAgZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD5cbikge1xuICBjb25zdCBmaWxlID0gZS50YXJnZXQuZmlsZXM/LlswXTtcbiAgaWYgKCFmaWxlKSByZXR1cm47XG5cbiAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgZm9ybURhdGEuYXBwZW5kKFwiZmlsZVwiLCBmaWxlKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGZldGNoKGAke2FwaUJhc2V9L2NvbXBsaWFuY2UvaW1wb3J0YCwge1xuICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIGJvZHk6IGZvcm1EYXRhLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7bG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ2cF90b2tlblwiKX1gLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGxvYWQoKTtcbiAgICBhbGVydChcIkltcG9ydCBzdWNjZXNzZnVsXCIpO1xuICB9IGNhdGNoIHtcbiAgICBhbGVydChcIkltcG9ydCBmYWlsZWRcIik7XG4gIH1cblxuICBlLnRhcmdldC52YWx1ZSA9IFwiXCI7XG59XG5cblxuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVQZGZFeHBvcnQoKSB7XG4gIGNvbnN0IGV4cG9ydFJvd3MgPVxuICAgIHNlbGVjdGVkUm93cy5sZW5ndGggPiAwXG4gICAgICA/IHJvd3MuZmlsdGVyKChyKSA9PiBzZWxlY3RlZFJvd3MuaW5jbHVkZXMoci5pZCkpXG4gICAgICA6IHJvd3M7XG5cbiAgY29uc3QgZG9jID0gbmV3IGpzUERGKHtcbiAgICBvcmllbnRhdGlvbjogXCJsYW5kc2NhcGVcIixcbiAgICB1bml0OiBcIm1tXCIsXG4gICAgZm9ybWF0OiBcImE0XCIsXG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMb2dvXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB0cnkge1xuICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xuICAgIGltZy5zcmMgPSBcIi9sb2dvLnBuZ1wiO1xuXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGltZy5vbmxvYWQgPSByZXNvbHZlO1xuICAgICAgaW1nLm9uZXJyb3IgPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgZG9jLmFkZEltYWdlKGltZywgXCJQTkdcIiwgMTQsIDEwLCAxOCwgMTgpO1xuICB9IGNhdGNoIHt9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIENvbXBhbnkgSGVhZGVyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBkb2Muc2V0Rm9udChcImhlbHZldGljYVwiLCBcImJvbGRcIik7XG4gIGRvYy5zZXRGb250U2l6ZSgxOCk7XG4gIGRvYy50ZXh0KFwiVmVyaWZ5UGFja1wiLCAzOCwgMTgpO1xuXG4gIGRvYy5zZXRGb250KFwiaGVsdmV0aWNhXCIsIFwibm9ybWFsXCIpO1xuICBkb2Muc2V0Rm9udFNpemUoMTApO1xuICBkb2Muc2V0VGV4dENvbG9yKDEwMCk7XG4gIGRvYy50ZXh0KFwiRGlnaXRhbCBUcnVzdCBmb3IgRXZlcnkgUHJvZHVjdFwiLCAzOCwgMjQpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSZXBvcnQgVGl0bGVcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIGRvYy5zZXREcmF3Q29sb3IoMjIwKTtcbiAgZG9jLmxpbmUoMTQsIDMyLCAyODMsIDMyKTtcblxuICBkb2Muc2V0VGV4dENvbG9yKDApO1xuXG4gIGRvYy5zZXRGb250KFwiaGVsdmV0aWNhXCIsIFwiYm9sZFwiKTtcbiAgZG9jLnNldEZvbnRTaXplKDE1KTtcbiAgZG9jLnRleHQoXCJDb21wbGlhbmNlIFJlcG9ydFwiLCAxNCwgNDApO1xuXG4gIGRvYy5zZXRGb250KFwiaGVsdmV0aWNhXCIsIFwibm9ybWFsXCIpO1xuICBkb2Muc2V0Rm9udFNpemUoMTApO1xuXG4gIGRvYy50ZXh0KFxuICAgIGBHZW5lcmF0ZWQgT24gOiAke25ldyBEYXRlKCkudG9Mb2NhbGVTdHJpbmcoXCJlbi1JTlwiKX1gLFxuICAgIDE0LFxuICAgIDQ3XG4gICk7XG5cbiAgZG9jLnRleHQoXG4gICAgYFRvdGFsIFJlY29yZHMgOiAke2V4cG9ydFJvd3MubGVuZ3RofWAsXG4gICAgMjUwLFxuICAgIDQ3LFxuICAgIHsgYWxpZ246IFwicmlnaHRcIiB9XG4gICk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFRhYmxlXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBhdXRvVGFibGUoZG9jLCB7XG4gICAgc3RhcnRZOiA1NSxcblxuICAgIGhlYWQ6IFtbXG4gICAgICBcIlByb2R1Y3RcIixcbiAgICAgIFwiU0tVXCIsXG4gICAgICBcIkNvbXBsaWFuY2UgVHlwZVwiLFxuICAgICAgXCJMaWNlbnNlIE5vXCIsXG4gICAgICBcIklzc3VlIERhdGVcIixcbiAgICAgIFwiRXhwaXJ5IERhdGVcIixcbiAgICAgIFwiRGF5cyBMZWZ0XCIsXG4gICAgICBcIlN0YXR1c1wiLFxuICAgICAgXCJDb3VudHJ5XCIsXG4gICAgICBcIkF1dGhvcml0eVwiLFxuICAgIF1dLFxuXG4gICAgYm9keTogZXhwb3J0Um93cy5tYXAoKHIpID0+IFtcblxuICAgICAgci5wcm9kdWN0X25hbWUgfHwgXCJcIixcblxuICAgICAgci5za3UgfHwgXCJcIixcblxuICAgICAgci5jb21wbGlhbmNlX3R5cGUgfHwgXCJcIixcblxuICAgICAgci5saWNlbnNlX251bWJlciB8fCBcIlwiLFxuXG4gICAgICByLmlzc3VlX2RhdGVcbiAgICAgICAgPyBuZXcgRGF0ZShyLmlzc3VlX2RhdGUpLnRvTG9jYWxlRGF0ZVN0cmluZyhcImVuLUlOXCIpXG4gICAgICAgIDogXCItXCIsXG5cbiAgICAgIHIuZXhwaXJ5X2RhdGVcbiAgICAgICAgPyBuZXcgRGF0ZShyLmV4cGlyeV9kYXRlKS50b0xvY2FsZURhdGVTdHJpbmcoXCJlbi1JTlwiKVxuICAgICAgICA6IFwiLVwiLFxuXG4gICAgICByLmRheXNfbGVmdCA9PSBudWxsXG4gICAgICAgID8gXCItXCJcbiAgICAgICAgOiByLmRheXNfbGVmdCA8IDBcbiAgICAgICAgPyBcIkV4cGlyZWRcIlxuICAgICAgICA6IHIuZGF5c19sZWZ0ID09PSAwXG4gICAgICAgID8gXCJUb2RheVwiXG4gICAgICAgIDogYCR7ci5kYXlzX2xlZnR9IERheXNgLFxuXG4gICAgICByLmRheXNfbGVmdCA9PSBudWxsXG4gICAgICAgID8gXCJQZW5kaW5nXCJcbiAgICAgICAgOiByLmRheXNfbGVmdCA8IDBcbiAgICAgICAgPyBcIkV4cGlyZWRcIlxuICAgICAgICA6IHIuZGF5c19sZWZ0IDw9IDMwXG4gICAgICAgID8gXCJFeHBpcmluZ1wiXG4gICAgICAgIDogXCJDb21wbGV0ZVwiLFxuXG4gICAgICByLmNvdW50cnkgfHwgXCItXCIsXG5cbiAgICAgIHIuaXNzdWluZ19hdXRob3JpdHkgfHwgXCItXCIsXG4gICAgXSksXG5cbiAgICBzdHlsZXM6IHtcbiAgICAgIGZvbnRTaXplOiA4LFxuICAgICAgY2VsbFBhZGRpbmc6IDIsXG4gICAgfSxcbiAgICBoZWFkU3R5bGVzOiB7XG4gICAgICBmaWxsQ29sb3I6IFszNywgOTksIDIzNV0sXG4gICAgICB0ZXh0Q29sb3I6IDI1NSxcbiAgICAgIGZvbnRTdHlsZTogXCJib2xkXCIsXG4gICAgfSxcbiAgICBhbHRlcm5hdGVSb3dTdHlsZXM6IHtcbiAgICAgIGZpbGxDb2xvcjogWzI0NSwgMjQ1LCAyNDVdLFxuICAgIH0sXG5cbiAgICBtYXJnaW46IHtcbiAgICAgIGxlZnQ6IDE0LFxuICAgICAgcmlnaHQ6IDE0LFxuICAgIH0sXG5cbiAgICBkaWREcmF3UGFnZTogKGRhdGEpID0+IHtcbiAgICAgIGRvYy5zZXRGb250U2l6ZSg5KTtcblxuICAgICAgZG9jLnNldFRleHRDb2xvcigxMjApO1xuXG4gICAgICBkb2MudGV4dChcbiAgICAgICAgYFBhZ2UgJHtkYXRhLnBhZ2VOdW1iZXJ9YCxcbiAgICAgICAgZG9jLmludGVybmFsLnBhZ2VTaXplLmdldFdpZHRoKCkgLSAyMCxcbiAgICAgICAgZG9jLmludGVybmFsLnBhZ2VTaXplLmdldEhlaWdodCgpIC0gOCxcbiAgICAgICAge1xuICAgICAgICAgIGFsaWduOiBcInJpZ2h0XCIsXG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIGRvYy50ZXh0KFxuICAgICAgICBcIkdlbmVyYXRlZCBieSBWZXJpZnlQYWNrXCIsXG4gICAgICAgIDE0LFxuICAgICAgICBkb2MuaW50ZXJuYWwucGFnZVNpemUuZ2V0SGVpZ2h0KCkgLSA4XG4gICAgICApO1xuICAgIH0sXG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBTYXZlIFBERlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgZG9jLnNhdmUoXG4gICAgc2VsZWN0ZWRSb3dzLmxlbmd0aFxuICAgICAgPyBgc2VsZWN0ZWRfY29tcGxpYW5jZV9yZXBvcnQucGRmYFxuICAgICAgOiBgY29tcGxpYW5jZV9yZXBvcnQucGRmYFxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb25maXJtRGVsZXRlKCkge1xuICBpZiAoIWRlbGV0ZVJvdykgcmV0dXJuO1xuXG4gIHRyeSB7XG4gICAgc2V0RGVsZXRpbmcodHJ1ZSk7XG5cbiAgICBhd2FpdCBhcGkoYC9jb21wbGlhbmNlLyR7ZGVsZXRlUm93LmlkfWAsIHtcbiAgICAgIG1ldGhvZDogXCJERUxFVEVcIixcbiAgICB9KTtcblxuICAgIHNldERlbGV0ZVJvdyhudWxsKTtcbiAgICBsb2FkKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGFsZXJ0KFwiRmFpbGVkIHRvIGRlbGV0ZSBjb21wbGlhbmNlIHJlY29yZC5cIik7XG4gIH0gZmluYWxseSB7XG4gICAgc2V0RGVsZXRpbmcoZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZVJvdyhpZDogc3RyaW5nKSB7XG4gIHNldFNlbGVjdGVkUm93cygocHJldikgPT5cbiAgICBwcmV2LmluY2x1ZGVzKGlkKVxuICAgICAgPyBwcmV2LmZpbHRlcigoeCkgPT4geCAhPT0gaWQpXG4gICAgICA6IFsuLi5wcmV2LCBpZF1cbiAgKTtcbn1cbmNvbnN0IGFsbFNlbGVjdGVkID1cbiAgcGFnZWQubGVuZ3RoID4gMCAmJlxuICBwYWdlZC5ldmVyeSgocikgPT4gc2VsZWN0ZWRSb3dzLmluY2x1ZGVzKHIuaWQpKTtcblxuZnVuY3Rpb24gdG9nZ2xlQWxsKCkge1xuICBpZiAoYWxsU2VsZWN0ZWQpIHtcbiAgICBzZXRTZWxlY3RlZFJvd3MoKHByZXYpID0+XG4gICAgICBwcmV2LmZpbHRlcigoaWQpID0+ICFwYWdlZC5zb21lKChyKSA9PiByLmlkID09PSBpZCkpXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBzZXRTZWxlY3RlZFJvd3MoKHByZXYpID0+IFtcbiAgICAgIC4uLm5ldyBTZXQoWy4uLnByZXYsIC4uLnBhZ2VkLm1hcCgocikgPT4gci5pZCldKSxcbiAgICBdKTtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gZGVsZXRlU2VsZWN0ZWQoKSB7XG4gIHRyeSB7XG4gICAgc2V0RGVsZXRpbmcodHJ1ZSk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHNlbGVjdGVkUm93cy5tYXAoKGlkKSA9PlxuICAgICAgICBhcGkoYC9jb21wbGlhbmNlLyR7aWR9YCwge1xuICAgICAgICAgIG1ldGhvZDogXCJERUxFVEVcIixcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgc2V0U2VsZWN0ZWRSb3dzKFtdKTtcbiAgICBzZXRCdWxrRGVsZXRlT3BlbihmYWxzZSk7XG4gICAgbG9hZCgpO1xuICB9IGZpbmFsbHkge1xuICAgIHNldERlbGV0aW5nKGZhbHNlKTtcbiAgfVxufVxuXG4gIGZ1bmN0aW9uIG9wZW5BZGQoKSB7XG4gICAgc2V0Rm9ybSh7IHByb2R1Y3RfaWQ6IFwiXCIsIGNvbXBsaWFuY2VfdHlwZTogVFlQRVNbMF0sIGxpY2Vuc2VfbnVtYmVyOiBcIlwiLCBsaWNlbnNlX25hbWU6IFwiXCIsXG4gICAgICBpc3N1aW5nX2F1dGhvcml0eTogXCJcIiwgaXNzdWVfZGF0ZTogXCJcIiwgZXhwaXJ5X2RhdGU6IFwiXCIsIGNvdW50cnk6IFwiSW5kaWFcIiwgc3RhdGU6IFwiXCIsXG4gICAgICBjYXRlZ29yeTogXCJcIiwgYXBwbGljYWJsZV90bzogXCJNYW51ZmFjdHVyaW5nIFBsYW50XCIsIHBsYW50OiBcIlwiLCByZW1hcmtzOiBcIlwiLCBfaWQ6IFwiXCIgfSk7XG4gIH1cbiAgZnVuY3Rpb24gb3BlbkVkaXQocjogYW55KSB7XG4gICAgc2V0RGV0YWlsSWQobnVsbCk7XG4gICAgc2V0Rm9ybSh7IC4uLnIsIF9pZDogci5pZCwgcHJvZHVjdF9pZDogci5wcm9kdWN0X2lkID8/IFwiXCIsXG4gICAgICBpc3N1ZV9kYXRlOiByLmlzc3VlX2RhdGUgPyByLmlzc3VlX2RhdGUuc2xpY2UoMCwgMTApIDogXCJcIixcbiAgICAgIGV4cGlyeV9kYXRlOiByLmV4cGlyeV9kYXRlID8gci5leHBpcnlfZGF0ZS5zbGljZSgwLCAxMCkgOiBcIlwiIH0pO1xuICB9XG4gIGFzeW5jIGZ1bmN0aW9uIHNhdmVGb3JtKCkge1xuICAgIGNvbnN0IHsgX2lkLCAuLi5wYXlsb2FkIH0gPSBmb3JtO1xuICAgIGlmIChfaWQpIGF3YWl0IGFwaShgL2NvbXBsaWFuY2UvJHtfaWR9YCwgeyBtZXRob2Q6IFwiUFVUXCIsIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpIH0pO1xuICAgIGVsc2UgYXdhaXQgYXBpKFwiL2NvbXBsaWFuY2VcIiwgeyBtZXRob2Q6IFwiUE9TVFwiLCBib2R5OiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSB9KTtcbiAgICBzZXRGb3JtKG51bGwpOyBsb2FkKCk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS01XCIgb25DbGljaz17KCkgPT4gc2V0TWVudUZvcihudWxsKX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICA8aDIgY2xhc3NOYW1lPVwidGV4dC14bCBmb250LWJvbGRcIj5Db21wbGlhbmNlIENlbnRlcjwvaDI+XG5cbjwvZGl2PlxuXG4gICAgICB7LyogS1BJcyAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtNSBnYXAtNFwiPlxuICAgICAgICA8S3BpIGxhYmVsPVwiVG90YWwgUHJvZHVjdHNcIiB2YWx1ZT17cz8udG90YWxfcHJvZHVjdHMgPz8gMH0gc3ViPVwiQWxsIHByb2R1Y3RzXCIgaWNvbj17PFBhY2thZ2UgY2xhc3NOYW1lPVwiaC01IHctNVwiIC8+fSB0aW50PVwiYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwXCIgLz5cbiAgICAgICAgPEtwaSBsYWJlbD1cIkNvbXBsZXRlXCIgdmFsdWU9e3M/LmNvbXBsZXRlID8/IDB9IHN1Yj17YCR7cz8uY29tcGxldGVfcGN0ID8/IDB9JSBvZiB0b3RhbGB9IHN1YkNvbG9yPVwidGV4dC1lbWVyYWxkLTYwMFwiIGljb249ezxDaGVja0NpcmNsZTIgY2xhc3NOYW1lPVwiaC01IHctNVwiIC8+fSB0aW50PVwiYmctZW1lcmFsZC01MCB0ZXh0LWVtZXJhbGQtNjAwXCIgLz5cbiAgICAgICAgPEtwaSBsYWJlbD1cIlBlbmRpbmdcIiB2YWx1ZT17cz8ucGVuZGluZyA/PyAwfSBzdWI9e2Ake3M/LnBlbmRpbmdfcGN0ID8/IDB9JSBvZiB0b3RhbGB9IHN1YkNvbG9yPVwidGV4dC1hbWJlci02MDBcIiBpY29uPXs8Q2xvY2sgY2xhc3NOYW1lPVwiaC01IHctNVwiIC8+fSB0aW50PVwiYmctYW1iZXItNTAgdGV4dC1hbWJlci02MDBcIiAvPlxuICAgICAgICA8S3BpIGxhYmVsPVwiRXhwaXJlZFwiIHZhbHVlPXtzPy5leHBpcmVkID8/IDB9IHN1Yj17YCR7cz8uZXhwaXJlZF9wY3QgPz8gMH0lIG9mIHRvdGFsYH0gc3ViQ29sb3I9XCJ0ZXh0LXJvc2UtNjAwXCIgaWNvbj17PEFsZXJ0VHJpYW5nbGUgY2xhc3NOYW1lPVwiaC01IHctNVwiIC8+fSB0aW50PVwiYmctcm9zZS01MCB0ZXh0LXJvc2UtNTAwXCIgLz5cbiAgICAgICAgPEtwaSBsYWJlbD1cIlVwY29taW5nIEV4cGlyeVwiIHZhbHVlPXtzPy5leHBpcmluZyA/PyAwfSBzdWI9XCJOZXh0IDMwIGRheXNcIiBpY29uPXs8Q2FsZW5kYXIgY2xhc3NOYW1lPVwiaC01IHctNVwiIC8+fSB0aW50PVwiYmctdmlvbGV0LTUwIHRleHQtdmlvbGV0LTYwMFwiIC8+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIEZpbHRlcnMgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmQgcC00IGZsZXggZmxleC13cmFwIGl0ZW1zLWVuZCBnYXAtM1wiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgPFNlYXJjaCBjbGFzc05hbWU9XCJhYnNvbHV0ZSBsZWZ0LTMgdG9wLTIuNSBoLTQgdy00IHRleHQtc2xhdGUtNDAwXCIgLz5cbiAgICAgICAgICA8aW5wdXQgdmFsdWU9e2ZpbHRlcnMuc2VhcmNofSBvbkNoYW5nZT17KGUpID0+IHNldChcInNlYXJjaFwiLCBlLnRhcmdldC52YWx1ZSl9IHBsYWNlaG9sZGVyPVwiU2VhcmNoIGNvbXBsaWFuY2XigKZcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicGwtOSBwci0zIHB5LTIgdy01MiByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItc2xhdGUtMjAwIHRleHQtc21cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPEZpbHRlciBsYWJlbD1cIlN0YXR1c1wiIHZhbHVlPXtmaWx0ZXJzLnN0YXR1c19maWx0ZXJ9IG9uQ2hhbmdlPXsodikgPT4gc2V0KFwic3RhdHVzX2ZpbHRlclwiLCB2KX0gb3B0cz17W1wiY29tcGxldGVcIiwgXCJwZW5kaW5nXCIsIFwiZXhwaXJpbmdcIiwgXCJleHBpcmVkXCJdLm1hcCgoeCkgPT4gKHsgdmFsdWU6IHgsIGxhYmVsOiB4IH0pKX0gYWxsPVwiQWxsIFN0YXR1c1wiIC8+XG4gICAgICAgIDxGaWx0ZXIgbGFiZWw9XCJUeXBlXCIgdmFsdWU9e2ZpbHRlcnMuY29tcGxpYW5jZV90eXBlfSBvbkNoYW5nZT17KHYpID0+IHNldChcImNvbXBsaWFuY2VfdHlwZVwiLCB2KX0gb3B0cz17VFlQRVMubWFwKCh0KSA9PiAoeyB2YWx1ZTogdCwgbGFiZWw6IHQgfSkpfSBhbGw9XCJBbGwgVHlwZXNcIiAvPlxuICAgICAgICA8RmlsdGVyIGxhYmVsPVwiQ291bnRyeVwiIHZhbHVlPXtmaWx0ZXJzLmNvdW50cnl9IG9uQ2hhbmdlPXsodikgPT4gc2V0KFwiY291bnRyeVwiLCB2KX0gb3B0cz17W3sgdmFsdWU6IFwiSW5kaWFcIiwgbGFiZWw6IFwiSW5kaWFcIiB9XX0gYWxsPVwiQWxsIENvdW50cmllc1wiIC8+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIEFsZXJ0cyAqL31cbiAgICAgIHsvKiBBbGVydHMgKi99XG57c2hvd0FsZXJ0cyAmJiBzPy5hbGVydHM/Lmxlbmd0aCA+IDAgJiYgKFxuICA8ZGl2IGNsYXNzTmFtZT1cImNhcmQgcC00IGJnLWFtYmVyLTUwIGJvcmRlciBib3JkZXItYW1iZXItMjAwIHJvdW5kZWQteGwgcmVsYXRpdmVcIj5cbiAgICA8YnV0dG9uXG4gICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93QWxlcnRzKGZhbHNlKX1cbiAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHRvcC0zIHJpZ2h0LTMgcm91bmRlZC1tZCBwLTEgdGV4dC1hbWJlci03MDAgaG92ZXI6YmctYW1iZXItMTAwXCJcbiAgICA+XG4gICAgICA8WCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1zZW1pYm9sZCB0ZXh0LWFtYmVyLTgwMCB0ZXh0LXNtIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIG1iLTJcIj5cbiAgICAgIDxBbGVydFRyaWFuZ2xlIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgQXR0ZW50aW9uIG5lZWRlZFxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTFcIj5cbiAgICAgIHtzLmFsZXJ0cy5tYXAoKGE6IGFueSwgaTogbnVtYmVyKSA9PiAoXG4gICAgICAgIDxkaXYga2V5PXtpfSBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtYW1iZXItNzAwXCI+XG4gICAgICAgICAge2EudHlwZX1cbiAgICAgICAgICB7YS5udW1iZXIgPyBgICgke2EubnVtYmVyfSlgIDogXCJcIn1cbiAgICAgICAgICB7XCIg4oCUIFwifVxuICAgICAgICAgIHthLnN0YXR1c31cbiAgICAgICAgICB7YS5leHBpcnlcbiAgICAgICAgICAgID8gYCDCtyBleHBpcmVzICR7bmV3IERhdGUoYS5leHBpcnkpLnRvTG9jYWxlRGF0ZVN0cmluZygpfWBcbiAgICAgICAgICAgIDogXCJcIn1cbiAgICAgICAgPC9kaXY+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4pfVxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICBcbiAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXNsYXRlLTUwMFwiPlxuICAgIFRvdGFsOiB7cm93cy5sZW5ndGh9XG4gIDwvZGl2PlxuXG4gICAgey8qIEltcG9ydCAqL31cbiAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtNCBweS0yIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1zbGF0ZS0yMDAgYmctd2hpdGUgaG92ZXI6Ymctc2xhdGUtNTAgY3Vyc29yLXBvaW50ZXIgdGV4dC1zbSBmb250LW1lZGl1bVwiPlxuICAgICAgPFVwbG9hZCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgIEltcG9ydFxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgYWNjZXB0PVwiLmNzdiwueGxzeCwueGxzLC5qc29uXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiaGlkZGVuXCJcbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUltcG9ydH1cbiAgICAgIC8+XG4gICAgPC9sYWJlbD5cblxuICAgIHsvKiBFeHBvcnQgKi99XG4gICAgPGJ1dHRvblxuICAgICAgb25DbGljaz17aGFuZGxlRXhwb3J0fVxuICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtNCBweS0yIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1zbGF0ZS0yMDAgYmctd2hpdGUgaG92ZXI6Ymctc2xhdGUtNTAgdGV4dC1zbSBmb250LW1lZGl1bVwiXG4gICAgPlxuICAgICAgPERvd25sb2FkIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAge3NlbGVjdGVkUm93cy5sZW5ndGggPiAwXG4gID8gYEV4cG9ydCBTZWxlY3RlZCAoJHtzZWxlY3RlZFJvd3MubGVuZ3RofSlgXG4gIDogXCJFeHBvcnRcIn1cbiAgICA8L2J1dHRvbj5cbjxidXR0b25cbiAgb25DbGljaz17aGFuZGxlUGRmRXhwb3J0fVxuICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItc2xhdGUtMjAwIGJnLXdoaXRlIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIGhvdmVyOmJnLXNsYXRlLTUwXCJcbj5cbiAgPERvd25sb2FkIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXG4gIHtzZWxlY3RlZFJvd3MubGVuZ3RoXG4gICAgPyBgUERGICgke3NlbGVjdGVkUm93cy5sZW5ndGh9KWBcbiAgICA6IFwiUERGIFJlcG9ydFwifVxuPC9idXR0b24+XG4gICAgey8qIEFkZCAqL31cbiAgICA8YnV0dG9uXG4gICAgICBvbkNsaWNrPXtvcGVuQWRkfVxuICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgYmctYnJhbmQtNjAwIHRleHQtd2hpdGUgcHgtNCBweS0yIHJvdW5kZWQtbGcgdGV4dC1zbSBmb250LXNlbWlib2xkXCJcbiAgICA+XG4gICAgICA8UGx1cyBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgIEFkZCBDb21wbGlhbmNlXG4gICAgPC9idXR0b24+XG5cbiAgPC9kaXY+XG5cbiAge3NlbGVjdGVkUm93cy5sZW5ndGggPiAwICYmIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYnJhbmQtNjAwXCI+XG4gICAgICAgIHtzZWxlY3RlZFJvd3MubGVuZ3RofSBTZWxlY3RlZFxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHNldEJ1bGtEZWxldGVPcGVuKHRydWUpfVxuICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJnLXJlZC02MDAgcHgtNCBweS0yIHRleHQtc20gdGV4dC13aGl0ZVwiXG4gICAgICA+XG4gICAgICAgIERlbGV0ZSBTZWxlY3RlZFxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICl9XG48L2Rpdj5cblxuICAgICAgey8qIFRhYmxlICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkIG92ZXJmbG93LXgtYXV0b1wiPlxuICAgICAgICA8dGFibGUgY2xhc3NOYW1lPVwidy1mdWxsIHRleHQtc21cIj5cbiAgICAgICAgICA8dGhlYWQgY2xhc3NOYW1lPVwiYmctc2xhdGUtNTAgdGV4dC1zbGF0ZS01MDAgdGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweC00IHB5LTNcIj5cbiAgPGlucHV0XG4gICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICBjaGVja2VkPXthbGxTZWxlY3RlZH1cbiAgICBvbkNoYW5nZT17dG9nZ2xlQWxsfVxuICAvPlxuPC90aD5cbiAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB4LTQgcHktMyBmb250LW1lZGl1bVwiPlByb2R1Y3Q8L3RoPlxuICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwicHgtNCBweS0zIGZvbnQtbWVkaXVtXCI+VHlwZTwvdGg+XG4gICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweC00IHB5LTMgZm9udC1tZWRpdW1cIj5MaWNlbnNlIC8gUmVnLjwvdGg+XG4gICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweC00IHB5LTMgZm9udC1tZWRpdW1cIj5Jc3N1ZSBEYXRlPC90aD5cbiAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB4LTQgcHktMyBmb250LW1lZGl1bVwiPkV4cGlyeSBEYXRlPC90aD5cbiAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB4LTQgcHktMyBmb250LW1lZGl1bVwiPlN0YXR1czwvdGg+XG4gICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweC00IHB5LTMgZm9udC1tZWRpdW1cIj5Db3VudHJ5PC90aD5cbiAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInB4LTQgcHktMyBmb250LW1lZGl1bVwiPkxhc3QgVXBkYXRlZDwvdGg+XG4gICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweC00IHB5LTMgZm9udC1tZWRpdW1cIj5BY3Rpb25zPC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHkgY2xhc3NOYW1lPVwiZGl2aWRlLXkgZGl2aWRlLXNsYXRlLTEwMFwiPlxuICAgICAgICAgICAge3BhZ2VkLm1hcCgoYykgPT4gKFxuICAgICAgICAgICAgICA8dHIga2V5PXtjLmlkfSBjbGFzc05hbWU9XCJob3ZlcjpiZy1zbGF0ZS01MFwiPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweC00IHB5LTNcIj5cbiAgPGlucHV0XG4gICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICBjaGVja2VkPXtzZWxlY3RlZFJvd3MuaW5jbHVkZXMoYy5pZCl9XG4gICAgb25DaGFuZ2U9eygpID0+IHRvZ2dsZVJvdyhjLmlkKX1cbiAgLz5cbjwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB4LTQgcHktM1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgICB7Yy5wcm9kdWN0X2ltYWdlXG4gICAgICAgICAgICAgICAgICAgICAgPyA8aW1nIHNyYz17aW1nU3JjKGMucHJvZHVjdF9pbWFnZSl9IGNsYXNzTmFtZT1cImgtMTAgdy0xMCByb3VuZGVkIG9iamVjdC1jb250YWluIGJvcmRlciBib3JkZXItc2xhdGUtMTAwXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA6IDxkaXYgY2xhc3NOYW1lPVwiaC0xMCB3LTEwIHJvdW5kZWQgYmctc2xhdGUtMTAwXCIgLz59XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bSB0ZXh0LXNsYXRlLTgwMFwiPntjLnByb2R1Y3RfbmFtZSA/PyBcIuKAlFwifTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXNsYXRlLTQwMFwiPntjLnNrdSA/PyBcIlwifTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInB4LTQgcHktM1wiPntjLmNvbXBsaWFuY2VfdHlwZX08L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweC00IHB5LTMgZm9udC1tb25vIHRleHQtc2xhdGUtNjAwXCI+e2MubGljZW5zZV9udW1iZXIgPz8gXCLigJRcIn08L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweC00IHB5LTMgdGV4dC1zbGF0ZS01MDBcIj57Yy5pc3N1ZV9kYXRlID8gbmV3IERhdGUoYy5pc3N1ZV9kYXRlKS50b0xvY2FsZURhdGVTdHJpbmcoKSA6IFwi4oCUXCJ9PC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHgtNCBweS0zXCI+XG4gICAgICAgICAgICAgICAgICB7Yy5leHBpcnlfZGF0ZSA/IChcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Yy5kYXlzX2xlZnQgIT0gbnVsbCAmJiBjLmRheXNfbGVmdCA8IDAgPyBcInRleHQtcm9zZS02MDBcIiA6IGMuZGF5c19sZWZ0ICE9IG51bGwgJiYgYy5kYXlzX2xlZnQgPCAzMCA/IFwidGV4dC1hbWJlci02MDBcIiA6IFwidGV4dC1zbGF0ZS03MDBcIn0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7bmV3IERhdGUoYy5leHBpcnlfZGF0ZSkudG9Mb2NhbGVEYXRlU3RyaW5nKCl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAge2MuZGF5c19sZWZ0ICE9IG51bGwgJiYgPGRpdiBjbGFzc05hbWU9e2B0ZXh0LXhzICR7Yy5kYXlzX2xlZnQgPCAwID8gXCJ0ZXh0LXJvc2UtNTAwXCIgOiBcInRleHQtc2xhdGUtNDAwXCJ9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Yy5kYXlzX2xlZnQgPCAwID8gXCIoRXhwaXJlZClcIiA6IGAoSW4gJHtjLmRheXNfbGVmdH0gZGF5cylgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pn1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApIDogXCLigJRcIn1cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweC00IHB5LTNcIj48c3BhbiBjbGFzc05hbWU9e2B0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgcHgtMiBweS0wLjUgcm91bmRlZC1mdWxsIGNhcGl0YWxpemUgJHtTVEFUVVNbYy5zdGF0dXNdID8/IFwiYmctc2xhdGUtMTAwXCJ9YH0+e2Muc3RhdHVzfTwvc3Bhbj48L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweC00IHB5LTNcIj57Yy5jb3VudHJ5ID8/IFwi4oCUXCJ9PC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicHgtNCBweS0zIHRleHQtc2xhdGUtNTAwXCI+XG4gIHtjLnVwZGF0ZWRfYXQgPyAoXG4gICAgPGRpdj5cbiAgICAgIDxkaXY+XG4gICAgICAgIHtuZXcgRGF0ZShjLnVwZGF0ZWRfYXQpLnRvTG9jYWxlRGF0ZVN0cmluZyhcImVuLUlOXCIpfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1zbGF0ZS00MDBcIj5cbiAgICAgICAge25ldyBEYXRlKGMudXBkYXRlZF9hdCkudG9Mb2NhbGVUaW1lU3RyaW5nKFwiZW4tSU5cIiwge1xuICAgICAgICAgIGhvdXI6IFwiMi1kaWdpdFwiLFxuICAgICAgICAgIG1pbnV0ZTogXCIyLWRpZ2l0XCIsXG4gICAgICAgICAgc2Vjb25kOiBcIjItZGlnaXRcIixcbiAgICAgICAgfSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKSA6IChcbiAgICBcIuKAlFwiXG4gICl9XG48L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweC00IHB5LTMgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0aXRsZT1cIlZpZXdcIiBvbkNsaWNrPXsoKSA9PiBzZXREZXRhaWxJZChjLmlkKX0gY2xhc3NOYW1lPVwiaC04IHctOCBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItc2xhdGUtMjAwIHRleHQtc2xhdGUtNTAwIGhvdmVyOmJnLXNsYXRlLTUwXCI+PEV5ZSBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoZSkgPT4geyBlLnN0b3BQcm9wYWdhdGlvbigpOyBzZXRNZW51Rm9yKG1lbnVGb3IgPT09IGMuaWQgPyBudWxsIDogYy5pZCk7IH19IGNsYXNzTmFtZT1cImgtOCB3LTggZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXNsYXRlLTIwMCB0ZXh0LXNsYXRlLTUwMCBob3ZlcjpiZy1zbGF0ZS01MFwiPjxNb3JlVmVydGljYWwgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIHttZW51Rm9yID09PSBjLmlkICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBvbkNsaWNrPXsoZSkgPT4gZS5zdG9wUHJvcGFnYXRpb24oKX0gY2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtNCB0b3AtMTIgei0yMCB3LTQ0IGJnLXdoaXRlIHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1zbGF0ZS0yMDAgc2hhZG93LWxnIHB5LTEgdGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiB7IG9wZW5FZGl0KGMpOyBzZXRNZW51Rm9yKG51bGwpOyB9fSBjbGFzc05hbWU9XCJ3LWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMyBweS0yIHRleHQtc20gdGV4dC1zbGF0ZS03MDAgaG92ZXI6Ymctc2xhdGUtNTBcIj48UGVuY2lsIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPiBFZGl0PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiB7IHNldERldGFpbElkKGMuaWQpOyBzZXRNZW51Rm9yKG51bGwpOyB9fSBjbGFzc05hbWU9XCJ3LWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMyBweS0yIHRleHQtc20gdGV4dC1zbGF0ZS03MDAgaG92ZXI6Ymctc2xhdGUtNTBcIj48VXBsb2FkIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPiBVcGxvYWQgRG9jdW1lbnQ8L2J1dHRvbj5cblxuICA8ZGl2IGNsYXNzTmFtZT1cIm15LTEgYm9yZGVyLXQgYm9yZGVyLXNsYXRlLTEwMFwiPjwvZGl2PlxuXG4gIDxidXR0b25cbiAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICBzZXREZWxldGVSb3coYyk7XG4gICAgICBzZXRNZW51Rm9yKG51bGwpO1xuICAgIH19XG4gICAgY2xhc3NOYW1lPVwidy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTMgcHktMiB0ZXh0LXNtIHRleHQtcmVkLTYwMCBob3ZlcjpiZy1yZWQtNTBcIlxuICA+XG4gICAgPFRyYXNoMiBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICBEZWxldGVcbiAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICB7cGFnZWQubGVuZ3RoID09PSAwICYmIDx0cj48dGQgY29sU3Bhbj17OH0gY2xhc3NOYW1lPVwicHgtNCBweS0xMiB0ZXh0LWNlbnRlciB0ZXh0LXNsYXRlLTQwMFwiPk5vIGNvbXBsaWFuY2UgcmVjb3Jkcy48L3RkPjwvdHI+fVxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LTQgcHktMyB0ZXh0LXNtIHRleHQtc2xhdGUtNTAwXCI+XG4gICAgICAgICAgPHNwYW4+U2hvd2luZyB7cm93cy5sZW5ndGggPT09IDAgPyAwIDogKHBhZ2UgLSAxKSAqIHBhZ2VTaXplICsgMX0gdG8ge01hdGgubWluKHBhZ2UgKiBwYWdlU2l6ZSwgcm93cy5sZW5ndGgpfSBvZiB7cm93cy5sZW5ndGh9PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBnYXAtMVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBkaXNhYmxlZD17cGFnZSA9PT0gMX0gb25DbGljaz17KCkgPT4gc2V0UGFnZShwYWdlIC0gMSl9IGNsYXNzTmFtZT1cInB4LTMgcHktMSByb3VuZGVkIGJvcmRlciBib3JkZXItc2xhdGUtMjAwIGRpc2FibGVkOm9wYWNpdHktNDBcIj7igLk8L2J1dHRvbj5cbiAgICAgICAgICAgIHtBcnJheS5mcm9tKHsgbGVuZ3RoOiB0b3RhbFBhZ2VzIH0pLnNsaWNlKDAsIDUpLm1hcCgoXywgaSkgPT4gKFxuICAgICAgICAgICAgICA8YnV0dG9uIGtleT17aX0gb25DbGljaz17KCkgPT4gc2V0UGFnZShpICsgMSl9IGNsYXNzTmFtZT17YHB4LTMgcHktMSByb3VuZGVkICR7cGFnZSA9PT0gaSArIDEgPyBcImJnLWJyYW5kLTYwMCB0ZXh0LXdoaXRlXCIgOiBcImJvcmRlciBib3JkZXItc2xhdGUtMjAwXCJ9YH0+e2kgKyAxfTwvYnV0dG9uPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8YnV0dG9uIGRpc2FibGVkPXtwYWdlID09PSB0b3RhbFBhZ2VzfSBvbkNsaWNrPXsoKSA9PiBzZXRQYWdlKHBhZ2UgKyAxKX0gY2xhc3NOYW1lPVwicHgtMyBweS0xIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1zbGF0ZS0yMDAgZGlzYWJsZWQ6b3BhY2l0eS00MFwiPuKAujwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogRGV0YWlsIG1vZGFsICovfVxuICAgICAge2RldGFpbElkICYmIChcbiAgICAgICAgPENvbXBsaWFuY2VEZXRhaWxNb2RhbCBjaWQ9e2RldGFpbElkfVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldERldGFpbElkKG51bGwpfVxuICAgICAgICAgIG9uRWRpdD17KCkgPT4geyBjb25zdCByID0gcm93cy5maW5kKCh4KSA9PiB4LmlkID09PSBkZXRhaWxJZCk7IGlmIChyKSBvcGVuRWRpdChyKTsgfX1cbiAgICAgICAgICBvbkNoYW5nZWQ9e2xvYWR9IC8+XG4gICAgICApfVxuICAgICAgXG4gICAgICB7ZGVsZXRlUm93ICYmIChcbiAgPGRpdlxuICAgIGNsYXNzTmFtZT1cImZpeGVkIGluc2V0LTAgei01MCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy1ibGFjay81MCBwLTRcIlxuICAgIG9uQ2xpY2s9eygpID0+IHNldERlbGV0ZVJvdyhudWxsKX1cbiAgPlxuICAgIDxkaXZcbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIG1heC13LW1kIHJvdW5kZWQtMnhsIGJnLXdoaXRlIHNoYWRvdy14bFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJib3JkZXItYiBweC02IHB5LTRcIj5cbiAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1ib2xkIHRleHQtc2xhdGUtOTAwXCI+XG4gICAgICAgICAgRGVsZXRlIENvbXBsaWFuY2VcbiAgICAgICAgPC9oMj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtNiBzcGFjZS15LTRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNFwiPlxuICAgICAgICAgIHtkZWxldGVSb3cucHJvZHVjdF9pbWFnZSA/IChcbiAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgc3JjPXtpbWdTcmMoZGVsZXRlUm93LnByb2R1Y3RfaW1hZ2UpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTE2IHctMTYgcm91bmRlZC1sZyBib3JkZXIgb2JqZWN0LWNvbnRhaW5cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLTE2IHctMTYgcm91bmRlZC1sZyBiZy1zbGF0ZS0xMDBcIiAvPlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb250LXNlbWlib2xkIHRleHQtc2xhdGUtOTAwXCI+XG4gICAgICAgICAgICAgIHtkZWxldGVSb3cucHJvZHVjdF9uYW1lfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXNsYXRlLTUwMFwiPlxuICAgICAgICAgICAgICB7ZGVsZXRlUm93LmNvbXBsaWFuY2VfdHlwZX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1zbGF0ZS00MDBcIj5cbiAgICAgICAgICAgICAge2RlbGV0ZVJvdy5saWNlbnNlX251bWJlciB8fCBcIk5vIExpY2Vuc2UgTnVtYmVyXCJ9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItcmVkLTIwMCBiZy1yZWQtNTAgcC00XCI+XG4gICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXJlZC03MDBcIj5cbiAgICAgICAgICAgIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBjb21wbGlhbmNlIHJlY29yZD9cbiAgICAgICAgICA8L3A+XG5cbiAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQteHMgdGV4dC1yZWQtNjAwXCI+XG4gICAgICAgICAgICBUaGlzIGFjdGlvbiBjYW5ub3QgYmUgdW5kb25lLlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kIGdhcC0zIGJvcmRlci10IHB4LTYgcHktNFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0RGVsZXRlUm93KG51bGwpfVxuICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1zbGF0ZS0yMDAgcHgtNCBweS0yIHRleHQtc21cIlxuICAgICAgICA+XG4gICAgICAgICAgQ2FuY2VsXG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBvbkNsaWNrPXtjb25maXJtRGVsZXRlfVxuICAgICAgICAgIGRpc2FibGVkPXtkZWxldGluZ31cbiAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJnLXJlZC02MDAgcHgtNSBweS0yIHRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlIGhvdmVyOmJnLXJlZC03MDAgZGlzYWJsZWQ6b3BhY2l0eS01MFwiXG4gICAgICAgID5cbiAgICAgICAgICB7ZGVsZXRpbmcgPyBcIkRlbGV0aW5nLi4uXCIgOiBcIkRlbGV0ZVwifVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbil9XG5cbntidWxrRGVsZXRlT3BlbiAmJiAoXG4gIDxkaXYgY2xhc3NOYW1lPVwiZml4ZWQgaW5zZXQtMCB6LTUwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLWJsYWNrLzUwXCI+XG4gICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgbWF4LXctbWQgcm91bmRlZC14bCBiZy13aGl0ZSBzaGFkb3cteGxcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm9yZGVyLWIgcHgtNiBweS00XCI+XG4gICAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtYm9sZFwiPlxuICAgICAgICAgIERlbGV0ZSBDb21wbGlhbmNlIFJlY29yZHNcbiAgICAgICAgPC9oMj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtNlwiPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNsYXRlLTcwMFwiPlxuICAgICAgICAgIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGVcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LWJvbGQgdGV4dC1yZWQtNjAwXCI+XG4gICAgICAgICAgICB7XCIgXCJ9XG4gICAgICAgICAgICB7c2VsZWN0ZWRSb3dzLmxlbmd0aH0gY29tcGxpYW5jZSByZWNvcmRcbiAgICAgICAgICAgIHtzZWxlY3RlZFJvd3MubGVuZ3RoID4gMSA/IFwic1wiIDogXCJcIn1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgP1xuICAgICAgICA8L3A+XG5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIHRleHQtc2xhdGUtNTAwXCI+XG4gICAgICAgICAgVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZS5cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWVuZCBnYXAtMyBib3JkZXItdCBweC02IHB5LTRcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldEJ1bGtEZWxldGVPcGVuKGZhbHNlKX1cbiAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBweC00IHB5LTJcIlxuICAgICAgICA+XG4gICAgICAgICAgQ2FuY2VsXG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBvbkNsaWNrPXtkZWxldGVTZWxlY3RlZH1cbiAgICAgICAgICBkaXNhYmxlZD17ZGVsZXRpbmd9XG4gICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1sZyBiZy1yZWQtNjAwIHB4LTUgcHktMiB0ZXh0LXdoaXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtkZWxldGluZ1xuICAgICAgICAgICAgPyBcIkRlbGV0aW5nLi4uXCJcbiAgICAgICAgICAgIDogYERlbGV0ZSAoJHtzZWxlY3RlZFJvd3MubGVuZ3RofSlgfVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbil9XG4gICAgICB7LyogQWRkL0VkaXQgZm9ybSBtb2RhbCAqL31cbiAgICAgIHtmb3JtICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaXhlZCBpbnNldC0wIGJnLWJsYWNrLzQwIHotNTAgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgcC00IG92ZXJmbG93LXktYXV0b1wiIG9uQ2xpY2s9eygpID0+IHNldEZvcm0obnVsbCl9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgcm91bmRlZC0yeGwgdy1mdWxsIG1heC13LWxnIG15LTQgbWF4LWgtWzkydmhdIG92ZXJmbG93LXktYXV0b1wiIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LTUgcHktNCBib3JkZXItYiBib3JkZXItc2xhdGUtMTAwIHN0aWNreSB0b3AtMCBiZy13aGl0ZSByb3VuZGVkLXQtMnhsXCI+XG4gICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJmb250LWJvbGRcIj57Zm9ybS5faWQgPyBcIkVkaXQgQ29tcGxpYW5jZVwiIDogXCJBZGQgQ29tcGxpYW5jZVwifTwvaDM+XG4gICAgICAgICAgICAgIDxidXR0b24gb25DbGljaz17KCkgPT4gc2V0Rm9ybShudWxsKX0+PFggY2xhc3NOYW1lPVwiaC01IHctNSB0ZXh0LXNsYXRlLTQwMFwiIC8+PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC01IGdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgPEZsZCBsYWJlbD1cIlByb2R1Y3RcIiBmdWxsPlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgdmFsdWU9e2Zvcm0ucHJvZHVjdF9pZH0gb25DaGFuZ2U9eyhlKSA9PiBzZXRGb3JtKHsgLi4uZm9ybSwgcHJvZHVjdF9pZDogZS50YXJnZXQudmFsdWUgfSl9IGNsYXNzTmFtZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0IHByb2R1Y3Q8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIHtwcm9kdWN0cy5tYXAoKHApID0+IDxvcHRpb24ga2V5PXtwLmlkfSB2YWx1ZT17cC5pZH0+e3AubmFtZX08L29wdGlvbj4pfVxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICA8L0ZsZD5cbiAgICAgICAgICAgICAgPEZsZCBsYWJlbD1cIkNvbXBsaWFuY2UgVHlwZVwiPlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgdmFsdWU9e2Zvcm0uY29tcGxpYW5jZV90eXBlfSBvbkNoYW5nZT17KGUpID0+IHNldEZvcm0oeyAuLi5mb3JtLCBjb21wbGlhbmNlX3R5cGU6IGUudGFyZ2V0LnZhbHVlIH0pfSBjbGFzc05hbWU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICAgICAge1RZUEVTLm1hcCgodCkgPT4gPG9wdGlvbiBrZXk9e3R9Pnt0fTwvb3B0aW9uPil9XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvRmxkPlxuICAgICAgICAgICAgICA8SW5wIGxhYmVsPVwiTGljZW5zZSAvIFJlZy4gTm8uXCIgdj17Zm9ybS5saWNlbnNlX251bWJlcn0gb249eyh4KSA9PiBzZXRGb3JtKHsgLi4uZm9ybSwgbGljZW5zZV9udW1iZXI6IHggfSl9IC8+XG4gICAgICAgICAgICAgIDxJbnAgbGFiZWw9XCJMaWNlbnNlIE5hbWVcIiB2PXtmb3JtLmxpY2Vuc2VfbmFtZX0gb249eyh4KSA9PiBzZXRGb3JtKHsgLi4uZm9ybSwgbGljZW5zZV9uYW1lOiB4IH0pfSAvPlxuICAgICAgICAgICAgICA8SW5wIGxhYmVsPVwiSXNzdWluZyBBdXRob3JpdHlcIiB2PXtmb3JtLmlzc3VpbmdfYXV0aG9yaXR5fSBvbj17KHgpID0+IHNldEZvcm0oeyAuLi5mb3JtLCBpc3N1aW5nX2F1dGhvcml0eTogeCB9KX0gLz5cbiAgICAgICAgICAgICAgPElucCBsYWJlbD1cIklzc3VlIERhdGVcIiB0eXBlPVwiZGF0ZVwiIHY9e2Zvcm0uaXNzdWVfZGF0ZX0gb249eyh4KSA9PiBzZXRGb3JtKHsgLi4uZm9ybSwgaXNzdWVfZGF0ZTogeCB9KX0gLz5cbiAgICAgICAgICAgICAgPElucCBsYWJlbD1cIkV4cGlyeSBEYXRlXCIgdHlwZT1cImRhdGVcIiB2PXtmb3JtLmV4cGlyeV9kYXRlfSBvbj17KHgpID0+IHNldEZvcm0oeyAuLi5mb3JtLCBleHBpcnlfZGF0ZTogeCB9KX0gLz5cbiAgICAgICAgICAgICAgPElucCBsYWJlbD1cIkNvdW50cnlcIiB2PXtmb3JtLmNvdW50cnl9IG9uPXsoeCkgPT4gc2V0Rm9ybSh7IC4uLmZvcm0sIGNvdW50cnk6IHggfSl9IC8+XG4gICAgICAgICAgICAgIDxJbnAgbGFiZWw9XCJTdGF0ZVwiIHY9e2Zvcm0uc3RhdGV9IG9uPXsoeCkgPT4gc2V0Rm9ybSh7IC4uLmZvcm0sIHN0YXRlOiB4IH0pfSAvPlxuICAgICAgICAgICAgICA8SW5wIGxhYmVsPVwiQ2F0ZWdvcnlcIiB2PXtmb3JtLmNhdGVnb3J5fSBvbj17KHgpID0+IHNldEZvcm0oeyAuLi5mb3JtLCBjYXRlZ29yeTogeCB9KX0gLz5cbiAgICAgICAgICAgICAgPElucCBsYWJlbD1cIkFwcGxpY2FibGUgVG9cIiB2PXtmb3JtLmFwcGxpY2FibGVfdG99IG9uPXsoeCkgPT4gc2V0Rm9ybSh7IC4uLmZvcm0sIGFwcGxpY2FibGVfdG86IHggfSl9IC8+XG4gICAgICAgICAgICAgIDxJbnAgbGFiZWw9XCJNYW51ZmFjdHVyaW5nIFBsYW50XCIgdj17Zm9ybS5wbGFudH0gb249eyh4KSA9PiBzZXRGb3JtKHsgLi4uZm9ybSwgcGxhbnQ6IHggfSl9IC8+XG4gICAgICAgICAgICAgIDxJbnAgbGFiZWw9XCJSZW1hcmtzXCIgZnVsbCB2PXtmb3JtLnJlbWFya3N9IG9uPXsoeCkgPT4gc2V0Rm9ybSh7IC4uLmZvcm0sIHJlbWFya3M6IHggfSl9IC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWVuZCBnYXAtMyBweC01IHB5LTQgYm9yZGVyLXQgYm9yZGVyLXNsYXRlLTEwMCBzdGlja3kgYm90dG9tLTAgYmctd2hpdGVcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBzZXRGb3JtKG51bGwpfSBjbGFzc05hbWU9XCJweC01IHB5LTIgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXNsYXRlLTIwMCB0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gb25DbGljaz17c2F2ZUZvcm19IGNsYXNzTmFtZT1cInB4LTYgcHktMiByb3VuZGVkLWxnIGJnLWJyYW5kLTYwMCB0ZXh0LXdoaXRlIHRleHQtc20gZm9udC1zZW1pYm9sZFwiPlNhdmU8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICA8c3R5bGU+e2AuaW5wdXR7bWFyZ2luLXRvcDouMjVyZW07d2lkdGg6MTAwJTtwYWRkaW5nOi41cmVtIC43NXJlbTtib3JkZXItcmFkaXVzOi41cmVtO2JvcmRlcjoxcHggc29saWQgI2UyZThmMDtmb250LXNpemU6Ljg3NXJlbX1gfTwvc3R5bGU+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEtwaSh7IGxhYmVsLCB2YWx1ZSwgc3ViLCBzdWJDb2xvciA9IFwidGV4dC1zbGF0ZS00MDBcIiwgaWNvbiwgdGludCB9OiBhbnkpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmQgcC01XCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtc3RhcnQgZ2FwLTRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2BoLTEyIHctMTIgcm91bmRlZC14bCBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaHJpbmstMCAke3RpbnR9YH0+e2ljb259PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXNsYXRlLTUwMFwiPntsYWJlbH08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtZXh0cmFib2xkIHRleHQtc2xhdGUtOTAwIG10LTAuNVwiPnt2YWx1ZX08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YHRleHQteHMgZm9udC1tZWRpdW0gbXQtMSAke3N1YkNvbG9yfWB9PntzdWJ9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG5mdW5jdGlvbiBGaWx0ZXIoeyBsYWJlbCwgdmFsdWUsIG9uQ2hhbmdlLCBvcHRzLCBhbGwgfToge1xuICBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nOyBvbkNoYW5nZTogKHY6IHN0cmluZykgPT4gdm9pZDsgb3B0czogeyB2YWx1ZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXTsgYWxsOiBzdHJpbmc7XG59KSB7XG4gIHJldHVybiAoXG4gICAgPGxhYmVsIGNsYXNzTmFtZT1cImJsb2NrXCI+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtc2xhdGUtNTAwXCI+e2xhYmVsfTwvc3Bhbj5cbiAgICAgIDxzZWxlY3QgdmFsdWU9e3ZhbHVlfSBvbkNoYW5nZT17KGUpID0+IG9uQ2hhbmdlKGUudGFyZ2V0LnZhbHVlKX0gY2xhc3NOYW1lPVwibXQtMSBibG9jayBweC0zIHB5LTIgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXNsYXRlLTIwMCB0ZXh0LXNtIG1pbi13LVsxMzBweF0gY2FwaXRhbGl6ZVwiPlxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+e2FsbH08L29wdGlvbj5cbiAgICAgICAge29wdHMubWFwKChvKSA9PiA8b3B0aW9uIGtleT17by52YWx1ZX0gdmFsdWU9e28udmFsdWV9PntvLmxhYmVsfTwvb3B0aW9uPil9XG4gICAgICA8L3NlbGVjdD5cbiAgICA8L2xhYmVsPlxuICApO1xufVxuZnVuY3Rpb24gRmxkKHsgbGFiZWwsIGNoaWxkcmVuLCBmdWxsIH06IGFueSkge1xuICByZXR1cm4gPGxhYmVsIGNsYXNzTmFtZT17YGJsb2NrICR7ZnVsbCA/IFwiY29sLXNwYW4tMlwiIDogXCJcIn1gfT48c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+e2xhYmVsfTwvc3Bhbj57Y2hpbGRyZW59PC9sYWJlbD47XG59XG5mdW5jdGlvbiBJbnAoeyBsYWJlbCwgdiwgb24sIHR5cGUgPSBcInRleHRcIiwgZnVsbCB9OiB7IGxhYmVsOiBzdHJpbmc7IHY6IGFueTsgb246ICh4OiBzdHJpbmcpID0+IHZvaWQ7IHR5cGU/OiBzdHJpbmc7IGZ1bGw/OiBib29sZWFuIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8bGFiZWwgY2xhc3NOYW1lPXtgYmxvY2sgJHtmdWxsID8gXCJjb2wtc3Bhbi0yXCIgOiBcIlwifWB9PlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bVwiPntsYWJlbH08L3NwYW4+XG4gICAgICA8aW5wdXQgdHlwZT17dHlwZX0gdmFsdWU9e3YgPz8gXCJcIn0gb25DaGFuZ2U9eyhlKSA9PiBvbihlLnRhcmdldC52YWx1ZSl9IGNsYXNzTmFtZT1cImlucHV0XCIgLz5cbiAgICA8L2xhYmVsPlxuICApO1xufVxuIl0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsIlBhY2thZ2UiLCJDaGVja0NpcmNsZTIiLCJDbG9jayIsIkFsZXJ0VHJpYW5nbGUiLCJDYWxlbmRhciIsIlNlYXJjaCIsIlBsdXMiLCJEb3dubG9hZCIsIkV5ZSIsIlBlbmNpbCIsIlVwbG9hZCIsIk1vcmVWZXJ0aWNhbCIsIlgiLCJUcmFzaDIiLCJhcGkiLCJhcGlCYXNlIiwiQ29tcGxpYW5jZURldGFpbE1vZGFsIiwianNQREYiLCJhdXRvVGFibGUiLCJpbWdTcmMiLCJ1cmwiLCJzdGFydHNXaXRoIiwiVFlQRVMiLCJTVEFUVVMiLCJjb21wbGV0ZSIsInBlbmRpbmciLCJleHBpcmluZyIsImV4cGlyZWQiLCJDb21wbGlhbmNlIiwicyIsInJvd3MiLCJzZXRSb3dzIiwic2V0UyIsInByb2R1Y3RzIiwic2V0UHJvZHVjdHMiLCJmaWx0ZXJzIiwic2V0RmlsdGVycyIsInNlYXJjaCIsInN0YXR1c19maWx0ZXIiLCJjb21wbGlhbmNlX3R5cGUiLCJjb3VudHJ5IiwiZGV0YWlsSWQiLCJzZXREZXRhaWxJZCIsIm1lbnVGb3IiLCJzZXRNZW51Rm9yIiwiZm9ybSIsInNldEZvcm0iLCJwYWdlIiwic2V0UGFnZSIsInBhZ2VTaXplIiwic2hvd0FsZXJ0cyIsInNldFNob3dBbGVydHMiLCJkZWxldGVSb3ciLCJzZXREZWxldGVSb3ciLCJkZWxldGluZyIsInNldERlbGV0aW5nIiwic2VsZWN0ZWRSb3dzIiwic2V0U2VsZWN0ZWRSb3dzIiwiYnVsa0RlbGV0ZU9wZW4iLCJzZXRCdWxrRGVsZXRlT3BlbiIsImxvYWQiLCJxcyIsIlVSTFNlYXJjaFBhcmFtcyIsIk9iamVjdCIsImVudHJpZXMiLCJmaWx0ZXIiLCJ2IiwidG9TdHJpbmciLCJ0aGVuIiwiY2F0Y2giLCJkYXRhIiwiZCIsIml0ZW1zIiwicGFnZWQiLCJzbGljZSIsInRvdGFsUGFnZXMiLCJNYXRoIiwibWF4IiwiY2VpbCIsImxlbmd0aCIsInNldCIsImsiLCJmIiwiaGFuZGxlRXhwb3J0IiwiZXhwb3J0Um93cyIsInIiLCJpbmNsdWRlcyIsImlkIiwiaGVhZGVycyIsImNzdiIsImpvaW4iLCJtYXAiLCJwcm9kdWN0X25hbWUiLCJza3UiLCJsaWNlbnNlX251bWJlciIsImxpY2Vuc2VfbmFtZSIsImlzc3VpbmdfYXV0aG9yaXR5IiwiaXNzdWVfZGF0ZSIsImV4cGlyeV9kYXRlIiwiZGF5c19sZWZ0Iiwic3RhdHVzIiwic3RhdGUiLCJjYXRlZ29yeSIsImFwcGxpY2FibGVfdG8iLCJwbGFudCIsInJlbWFya3MiLCJjcmVhdGVkX2J5IiwiY3JlYXRlZF9hdCIsIkRhdGUiLCJ0b0xvY2FsZVN0cmluZyIsInVwZGF0ZWRfYXQiLCJkb2N1bWVudF91cmwiLCJibG9iIiwiQmxvYiIsInR5cGUiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJhIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiaHJlZiIsImRvd25sb2FkIiwidG9JU09TdHJpbmciLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjbGljayIsInJlbW92ZUNoaWxkIiwicmV2b2tlT2JqZWN0VVJMIiwiaGFuZGxlSW1wb3J0IiwiZSIsImZpbGUiLCJ0YXJnZXQiLCJmaWxlcyIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJmZXRjaCIsIm1ldGhvZCIsIkF1dGhvcml6YXRpb24iLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwiYWxlcnQiLCJ2YWx1ZSIsImhhbmRsZVBkZkV4cG9ydCIsImRvYyIsIm9yaWVudGF0aW9uIiwidW5pdCIsImZvcm1hdCIsImltZyIsIkltYWdlIiwic3JjIiwiUHJvbWlzZSIsInJlc29sdmUiLCJvbmxvYWQiLCJvbmVycm9yIiwiYWRkSW1hZ2UiLCJzZXRGb250Iiwic2V0Rm9udFNpemUiLCJ0ZXh0Iiwic2V0VGV4dENvbG9yIiwic2V0RHJhd0NvbG9yIiwibGluZSIsImFsaWduIiwic3RhcnRZIiwiaGVhZCIsInRvTG9jYWxlRGF0ZVN0cmluZyIsInN0eWxlcyIsImZvbnRTaXplIiwiY2VsbFBhZGRpbmciLCJoZWFkU3R5bGVzIiwiZmlsbENvbG9yIiwidGV4dENvbG9yIiwiZm9udFN0eWxlIiwiYWx0ZXJuYXRlUm93U3R5bGVzIiwibWFyZ2luIiwibGVmdCIsInJpZ2h0IiwiZGlkRHJhd1BhZ2UiLCJwYWdlTnVtYmVyIiwiaW50ZXJuYWwiLCJnZXRXaWR0aCIsImdldEhlaWdodCIsInNhdmUiLCJjb25maXJtRGVsZXRlIiwiZXJyIiwidG9nZ2xlUm93IiwicHJldiIsIngiLCJhbGxTZWxlY3RlZCIsImV2ZXJ5IiwidG9nZ2xlQWxsIiwic29tZSIsIlNldCIsImRlbGV0ZVNlbGVjdGVkIiwiYWxsIiwib3BlbkFkZCIsInByb2R1Y3RfaWQiLCJfaWQiLCJvcGVuRWRpdCIsInNhdmVGb3JtIiwicGF5bG9hZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkaXYiLCJjbGFzc05hbWUiLCJvbkNsaWNrIiwiaDIiLCJLcGkiLCJsYWJlbCIsInRvdGFsX3Byb2R1Y3RzIiwic3ViIiwiaWNvbiIsInRpbnQiLCJjb21wbGV0ZV9wY3QiLCJzdWJDb2xvciIsInBlbmRpbmdfcGN0IiwiZXhwaXJlZF9wY3QiLCJpbnB1dCIsIm9uQ2hhbmdlIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIiLCJvcHRzIiwidCIsImFsZXJ0cyIsImJ1dHRvbiIsImkiLCJudW1iZXIiLCJleHBpcnkiLCJhY2NlcHQiLCJzcGFuIiwidGFibGUiLCJ0aGVhZCIsInRyIiwidGgiLCJjaGVja2VkIiwidGJvZHkiLCJjIiwidGQiLCJwcm9kdWN0X2ltYWdlIiwidG9Mb2NhbGVUaW1lU3RyaW5nIiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsInRpdGxlIiwic3RvcFByb3BhZ2F0aW9uIiwiY29sU3BhbiIsIm1pbiIsImRpc2FibGVkIiwiQXJyYXkiLCJmcm9tIiwiXyIsImNpZCIsIm9uQ2xvc2UiLCJvbkVkaXQiLCJmaW5kIiwib25DaGFuZ2VkIiwicCIsImgzIiwiRmxkIiwiZnVsbCIsInNlbGVjdCIsIm9wdGlvbiIsIm5hbWUiLCJJbnAiLCJvbiIsInN0eWxlIiwibyIsImNoaWxkcmVuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/dashboard/compliance/page.tsx\n"));
/***/ }),
/***/ "(app-pages-browser)/./components/ComplianceDetailModal.tsx":
/*!**********************************************!*\
!*** ./components/ComplianceDetailModal.tsx ***!
\**********************************************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ ComplianceDetailModal; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _barrel_optimize_names_ExternalLink_FileText_Pencil_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! __barrel_optimize__?names=ExternalLink,FileText,Pencil,Upload,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/x.js\");\n/* harmony import */ var _barrel_optimize_names_ExternalLink_FileText_Pencil_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! __barrel_optimize__?names=ExternalLink,FileText,Pencil,Upload,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/file-text.js\");\n/* harmony import */ var _barrel_optimize_names_ExternalLink_FileText_Pencil_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! __barrel_optimize__?names=ExternalLink,FileText,Pencil,Upload,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/pencil.js\");\n/* harmony import */ var _barrel_optimize_names_ExternalLink_FileText_Pencil_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! __barrel_optimize__?names=ExternalLink,FileText,Pencil,Upload,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/upload.js\");\n/* harmony import */ var _barrel_optimize_names_ExternalLink_FileText_Pencil_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! __barrel_optimize__?names=ExternalLink,FileText,Pencil,Upload,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/external-link.js\");\n/* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/api */ \"(app-pages-browser)/./lib/api.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\nfunction imgSrc(url) {\n if (!url) return \"\";\n if (url.startsWith(\"data:\") || url.startsWith(\"http\")) return url;\n return \"\".concat(_lib_api__WEBPACK_IMPORTED_MODULE_2__.apiBase).concat(url);\n}\nconst STATUS = {\n complete: \"bg-emerald-50 text-emerald-700\",\n pending: \"bg-amber-50 text-amber-700\",\n expiring: \"bg-amber-50 text-amber-700\",\n expired: \"bg-rose-50 text-rose-700\"\n};\nfunction ComplianceDetailModal(param) {\n let { cid, onClose, onEdit, onChanged } = param;\n var _d_documents;\n _s();\n const [d, setD] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [tab, setTab] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"overview\");\n const fileRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n function load() {\n (0,_lib_api__WEBPACK_IMPORTED_MODULE_2__.api)(\"/compliance/\".concat(cid, \"/detail\")).then(setD).catch(()=>{});\n }\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n load();\n }, [\n cid\n ]);\n async function onUpload(e) {\n var _e_target_files;\n const file = (_e_target_files = e.target.files) === null || _e_target_files === void 0 ? void 0 : _e_target_files[0];\n if (!file) return;\n const r = new FileReader();\n r.onload = async ()=>{\n await (0,_lib_api__WEBPACK_IMPORTED_MODULE_2__.api)(\"/compliance/\".concat(cid, \"/document\"), {\n method: \"POST\",\n body: JSON.stringify({\n data_url: r.result,\n filename: file.name\n })\n });\n load();\n onChanged();\n };\n r.readAsDataURL(file);\n }\n if (!d) return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 bg-black/40 z-50 grid place-items-center p-4\",\n onClick: onClose,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl w-full max-w-md p-5\",\n onClick: (e)=>e.stopPropagation(),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"skeleton h-40 rounded-xl\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 48,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 47,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 46,\n columnNumber: 5\n }, this);\n const expColor = d.days_left != null && d.days_left < 0 ? \"text-rose-600\" : d.days_left != null && d.days_left < 30 ? \"text-amber-600\" : \"text-slate-700\";\n var _d_product_name, _d_sku, _STATUS_d_status, _d_documents_length, _d_documents1, _d_history;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed inset-0 bg-black/40 z-50 grid place-items-center p-4 overflow-y-auto\",\n onClick: onClose,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white rounded-2xl w-full max-w-md my-4 flex flex-col max-h-[92vh] overflow-y-auto\",\n onClick: (e)=>e.stopPropagation(),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between px-5 py-4 border-b border-slate-100 sticky top-0 bg-white rounded-t-2xl\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"font-bold\",\n children: \"Compliance Details\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 60,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: onClose,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ExternalLink_FileText_Pencil_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n className: \"h-5 w-5 text-slate-400\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 61,\n columnNumber: 37\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 61,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 59,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-5 space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-3\",\n children: [\n d.product_image ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: imgSrc(d.product_image),\n className: \"h-14 w-14 rounded-lg object-contain border border-slate-100\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 67,\n columnNumber: 17\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-14 w-14 rounded-lg bg-slate-100\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 68,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"font-bold\",\n children: (_d_product_name = d.product_name) !== null && _d_product_name !== void 0 ? _d_product_name : \"—\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 70,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-xs text-slate-400\",\n children: [\n \"SKU: \",\n (_d_sku = d.sku) !== null && _d_sku !== void 0 ? _d_sku : \"—\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 71,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 69,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs font-semibold px-2 py-0.5 rounded-full capitalize \".concat((_STATUS_d_status = STATUS[d.status]) !== null && _STATUS_d_status !== void 0 ? _STATUS_d_status : \"bg-slate-100\"),\n children: d.status\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 73,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 65,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-1 border-b border-slate-200 text-sm\",\n children: [\n [\n \"overview\",\n \"Overview\"\n ],\n [\n \"documents\",\n \"Documents (\".concat((_d_documents_length = (_d_documents = d.documents) === null || _d_documents === void 0 ? void 0 : _d_documents.length) !== null && _d_documents_length !== void 0 ? _d_documents_length : 0, \")\")\n ],\n [\n \"history\",\n \"History\"\n ]\n ].map((param)=>{\n let [t, l] = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setTab(t),\n className: \"px-3 py-2 border-b-2 -mb-px font-medium \".concat(tab === t ? \"border-brand-600 text-brand-700\" : \"border-transparent text-slate-500\"),\n children: l\n }, t, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 78,\n columnNumber: 15\n }, this);\n })\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 76,\n columnNumber: 11\n }, this),\n tab === \"overview\" && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2 text-sm\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Row, {\n label: \"Compliance Type\",\n value: d.compliance_type\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 85,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Row, {\n label: \"License / Reg. No.\",\n value: d.license_number\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 86,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Row, {\n label: \"License Name\",\n value: d.license_name\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 87,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Row, {\n label: \"Issue Date\",\n value: fmt(d.issue_date)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 88,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between border-b border-slate-50 py-1.5\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-slate-400\",\n children: \"Expiry Date\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 90,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium text-right \".concat(expColor),\n children: [\n fmt(d.expiry_date),\n d.days_left != null && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"block text-xs\",\n children: d.days_left < 0 ? \"(Expired)\" : \"(In \".concat(d.days_left, \" days)\")\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 93,\n columnNumber: 43\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 91,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 89,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Row, {\n label: \"Status\",\n value: d.status,\n cap: true\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 98,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Row, {\n label: \"Issuing Authority\",\n value: d.issuing_authority\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 99,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Row, {\n label: \"Country\",\n value: d.country\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 100,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Row, {\n label: \"State\",\n value: d.state\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 101,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Row, {\n label: \"Category\",\n value: d.category\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 102,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Row, {\n label: \"Applicable To\",\n value: d.applicable_to\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 103,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Row, {\n label: \"Manufacturing Plant\",\n value: d.plant\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 104,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Row, {\n label: \"Remarks\",\n value: d.remarks\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 105,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Row, {\n label: \"Created By\",\n value: d.created_by\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 106,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Row, {\n label: \"Created On\",\n value: fmt(d.created_at, true)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 107,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Row, {\n label: \"Last Updated\",\n value: fmt(d.updated_at, true)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 108,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 84,\n columnNumber: 13\n }, this),\n tab === \"documents\" && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2 text-sm\",\n children: [\n ((_d_documents1 = d.documents) !== null && _d_documents1 !== void 0 ? _d_documents1 : []).map((doc, i)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"\".concat(_lib_api__WEBPACK_IMPORTED_MODULE_2__.apiBase).concat(doc.url),\n target: \"_blank\",\n rel: \"noreferrer\",\n className: \"flex items-center gap-2 border border-slate-100 rounded-lg px-3 py-2 hover:bg-slate-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ExternalLink_FileText_Pencil_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n className: \"h-4 w-4 text-slate-400\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 117,\n columnNumber: 19\n }, this),\n \" \",\n doc.name\n ]\n }, i, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 115,\n columnNumber: 17\n }, this)),\n (!d.documents || d.documents.length === 0) && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-slate-400\",\n children: \"No documents uploaded.\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 120,\n columnNumber: 62\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 113,\n columnNumber: 13\n }, this),\n tab === \"history\" && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-1 text-sm\",\n children: ((_d_history = d.history) !== null && _d_history !== void 0 ? _d_history : []).map((h, i)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between border-b border-slate-50 py-1.5\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: [\n h.action,\n \" \",\n h.by ? \"\\xb7 \".concat(h.by) : \"\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 128,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-slate-400\",\n children: fmt(h.at, true)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 129,\n columnNumber: 19\n }, this)\n ]\n }, i, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 127,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 125,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2 pt-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-2 gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: onEdit,\n className: \"flex items-center justify-center gap-1 border border-slate-200 rounded-lg py-2 text-sm font-medium\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ExternalLink_FileText_Pencil_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 138,\n columnNumber: 17\n }, this),\n \" Edit\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 137,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n var _fileRef_current;\n return (_fileRef_current = fileRef.current) === null || _fileRef_current === void 0 ? void 0 : _fileRef_current.click();\n },\n className: \"flex items-center justify-center gap-1 bg-brand-600 text-white rounded-lg py-2 text-sm font-semibold\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ExternalLink_FileText_Pencil_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 141,\n columnNumber: 17\n }, this),\n \" Upload Document\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 140,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n ref: fileRef,\n type: \"file\",\n accept: \"application/pdf,image/*\",\n className: \"hidden\",\n onChange: onUpload\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 143,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 136,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"#\",\n onClick: (e)=>e.preventDefault(),\n className: \"flex items-center justify-center gap-1 border border-brand-200 text-brand-700 rounded-lg py-2 text-sm font-medium\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ExternalLink_FileText_Pencil_Upload_X_lucide_react__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 147,\n columnNumber: 15\n }, this),\n \" View on Verification Page\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 145,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 135,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 64,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 58,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 57,\n columnNumber: 5\n }, this);\n}\n_s(ComplianceDetailModal, \"fc/dYR0NjD41DuieICnRXluE9Y4=\");\n_c = ComplianceDetailModal;\nfunction fmt(d) {\n let time = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;\n if (!d) return \"—\";\n const dt = new Date(d);\n return isNaN(+dt) ? \"—\" : time ? dt.toLocaleString() : dt.toLocaleDateString();\n}\nfunction Row(param) {\n let { label, value, cap } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between border-b border-slate-50 py-1.5\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-slate-400\",\n children: label\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 164,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium text-slate-700 text-right \".concat(cap ? \"capitalize\" : \"\"),\n children: value !== null && value !== void 0 ? value : \"—\"\n }, void 0, false, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 165,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\company_projects\\\\verify pack\\\\frontend\\\\components\\\\ComplianceDetailModal.tsx\",\n lineNumber: 163,\n columnNumber: 5\n }, this);\n}\n_c1 = Row;\nvar _c, _c1;\n$RefreshReg$(_c, \"ComplianceDetailModal\");\n$RefreshReg$(_c1, \"Row\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvQ29tcGxpYW5jZURldGFpbE1vZGFsLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFDb0Q7QUFDcUI7QUFDaEM7QUFFekMsU0FBU1UsT0FBT0MsR0FBWTtJQUMxQixJQUFJLENBQUNBLEtBQUssT0FBTztJQUNqQixJQUFJQSxJQUFJQyxVQUFVLENBQUMsWUFBWUQsSUFBSUMsVUFBVSxDQUFDLFNBQVMsT0FBT0Q7SUFDOUQsT0FBTyxHQUFhQSxPQUFWRiw2Q0FBT0EsRUFBTyxPQUFKRTtBQUN0QjtBQUlBLE1BQU1FLFNBQWlDO0lBQ3JDQyxVQUFVO0lBQ1ZDLFNBQVM7SUFDVEMsVUFBVTtJQUNWQyxTQUFTO0FBQ1g7QUFFZSxTQUFTQyxzQkFBc0IsS0FFN0M7UUFGNkMsRUFBRUMsR0FBRyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsU0FBUyxFQUU5RSxHQUY2QztRQXdEdUJDOztJQXJEbkUsTUFBTSxDQUFDQSxHQUFHQyxLQUFLLEdBQUd0QiwrQ0FBUUEsQ0FBTTtJQUNoQyxNQUFNLENBQUN1QixLQUFLQyxPQUFPLEdBQUd4QiwrQ0FBUUEsQ0FBTTtJQUNwQyxNQUFNeUIsVUFBVTFCLDZDQUFNQSxDQUFtQjtJQUV6QyxTQUFTMkI7UUFBU3BCLDZDQUFHQSxDQUFDLGVBQW1CLE9BQUpXLEtBQUksWUFBVVUsSUFBSSxDQUFDTCxNQUFNTSxLQUFLLENBQUMsS0FBTztJQUFJO0lBQy9FOUIsZ0RBQVNBLENBQUM7UUFBUTRCO0lBQVEsR0FBRztRQUFDVDtLQUFJO0lBRWxDLGVBQWVZLFNBQVNDLENBQXNDO1lBQy9DQTtRQUFiLE1BQU1DLFFBQU9ELGtCQUFBQSxFQUFFRSxNQUFNLENBQUNDLEtBQUssY0FBZEgsc0NBQUFBLGVBQWdCLENBQUMsRUFBRTtRQUNoQyxJQUFJLENBQUNDLE1BQU07UUFDWCxNQUFNRyxJQUFJLElBQUlDO1FBQ2RELEVBQUVFLE1BQU0sR0FBRztZQUNULE1BQU05Qiw2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QUFLWixXQUFVOzBCQUFrQm9COzs7Ozs7MEJBQ2xDLDhEQUFDUjtnQkFBS1osV0FBVyx5Q0FBaUUsT0FBeEI0QixNQUFNLGVBQWU7MEJBQU9QLGtCQUFBQSxtQkFBQUEsUUFBUzs7Ozs7Ozs7Ozs7O0FBR3JHO01BUFNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2NvbXBvbmVudHMvQ29tcGxpYW5jZURldGFpbE1vZGFsLnRzeD8xYTQ3Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBYLCBQZW5jaWwsIFVwbG9hZCwgRXh0ZXJuYWxMaW5rLCBGaWxlVGV4dCB9IGZyb20gXCJsdWNpZGUtcmVhY3RcIjtcbmltcG9ydCB7IGFwaSwgYXBpQmFzZSB9IGZyb20gXCJAL2xpYi9hcGlcIjtcblxuZnVuY3Rpb24gaW1nU3JjKHVybD86IHN0cmluZykge1xuICBpZiAoIXVybCkgcmV0dXJuIFwiXCI7XG4gIGlmICh1cmwuc3RhcnRzV2l0aChcImRhdGE6XCIpIHx8IHVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSkgcmV0dXJuIHVybDtcbiAgcmV0dXJuIGAke2FwaUJhc2V9JHt1cmx9YDtcbn1cblxudHlwZSBUYWIgPSBcIm92ZXJ2aWV3XCIgfCBcImRvY3VtZW50c1wiIHwgXCJoaXN0b3J5XCI7XG5cbmNvbnN0IFNUQVRVUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgY29tcGxldGU6IFwiYmctZW1lcmFsZC01MCB0ZXh0LWVtZXJhbGQtNzAwXCIsXG4gIHBlbmRpbmc6IFwiYmctYW1iZXItNTAgdGV4dC1hbWJlci03MDBcIixcbiAgZXhwaXJpbmc6IFwiYmctYW1iZXItNTAgdGV4dC1hbWJlci03MDBcIixcbiAgZXhwaXJlZDogXCJiZy1yb3NlLTUwIHRleHQtcm9zZS03MDBcIixcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENvbXBsaWFuY2VEZXRhaWxNb2RhbCh7IGNpZCwgb25DbG9zZSwgb25FZGl0LCBvbkNoYW5nZWQgfToge1xuICBjaWQ6IHN0cmluZzsgb25DbG9zZTogKCkgPT4gdm9pZDsgb25FZGl0OiAoKSA9PiB2b2lkOyBvbkNoYW5nZWQ6ICgpID0+IHZvaWQ7XG59KSB7XG4gIGNvbnN0IFtkLCBzZXREXSA9IHVzZVN0YXRlPGFueT4obnVsbCk7XG4gIGNvbnN0IFt0YWIsIHNldFRhYl0gPSB1c2VTdGF0ZTxUYWI+KFwib3ZlcnZpZXdcIik7XG4gIGNvbnN0IGZpbGVSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgZnVuY3Rpb24gbG9hZCgpIHsgYXBpKGAvY29tcGxpYW5jZS8ke2NpZH0vZGV0YWlsYCkudGhlbihzZXREKS5jYXRjaCgoKSA9PiB7fSk7IH1cbiAgdXNlRWZmZWN0KCgpID0+IHsgbG9hZCgpOyB9LCBbY2lkXSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gb25VcGxvYWQoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pIHtcbiAgICBjb25zdCBmaWxlID0gZS50YXJnZXQuZmlsZXM/LlswXTtcbiAgICBpZiAoIWZpbGUpIHJldHVybjtcbiAgICBjb25zdCByID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICByLm9ubG9hZCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGFwaShgL2NvbXBsaWFuY2UvJHtjaWR9L2RvY3VtZW50YCwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGRhdGFfdXJsOiByLnJlc3VsdCwgZmlsZW5hbWU6IGZpbGUubmFtZSB9KSxcbiAgICAgIH0pO1xuICAgICAgbG9hZCgpOyBvbkNoYW5nZWQoKTtcbiAgICB9O1xuICAgIHIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgfVxuXG4gIGlmICghZCkgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZpeGVkIGluc2V0LTAgYmctYmxhY2svNDAgei01MCBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBwLTRcIiBvbkNsaWNrPXtvbkNsb3NlfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgcm91bmRlZC0yeGwgdy1mdWxsIG1heC13LW1kIHAtNVwiIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJza2VsZXRvbiBoLTQwIHJvdW5kZWQteGxcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG5cbiAgY29uc3QgZXhwQ29sb3IgPSBkLmRheXNfbGVmdCAhPSBudWxsICYmIGQuZGF5c19sZWZ0IDwgMCA/IFwidGV4dC1yb3NlLTYwMFwiXG4gICAgOiBkLmRheXNfbGVmdCAhPSBudWxsICYmIGQuZGF5c19sZWZ0IDwgMzAgPyBcInRleHQtYW1iZXItNjAwXCIgOiBcInRleHQtc2xhdGUtNzAwXCI7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZpeGVkIGluc2V0LTAgYmctYmxhY2svNDAgei01MCBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBwLTQgb3ZlcmZsb3cteS1hdXRvXCIgb25DbGljaz17b25DbG9zZX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXdoaXRlIHJvdW5kZWQtMnhsIHctZnVsbCBtYXgtdy1tZCBteS00IGZsZXggZmxleC1jb2wgbWF4LWgtWzkydmhdIG92ZXJmbG93LXktYXV0b1wiIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtNSBweS00IGJvcmRlci1iIGJvcmRlci1zbGF0ZS0xMDAgc3RpY2t5IHRvcC0wIGJnLXdoaXRlIHJvdW5kZWQtdC0yeGxcIj5cbiAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwiZm9udC1ib2xkXCI+Q29tcGxpYW5jZSBEZXRhaWxzPC9oMz5cbiAgICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9e29uQ2xvc2V9PjxYIGNsYXNzTmFtZT1cImgtNSB3LTUgdGV4dC1zbGF0ZS00MDBcIiAvPjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtNSBzcGFjZS15LTRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgICAgICB7ZC5wcm9kdWN0X2ltYWdlXG4gICAgICAgICAgICAgID8gPGltZyBzcmM9e2ltZ1NyYyhkLnByb2R1Y3RfaW1hZ2UpfSBjbGFzc05hbWU9XCJoLTE0IHctMTQgcm91bmRlZC1sZyBvYmplY3QtY29udGFpbiBib3JkZXIgYm9yZGVyLXNsYXRlLTEwMFwiIC8+XG4gICAgICAgICAgICAgIDogPGRpdiBjbGFzc05hbWU9XCJoLTE0IHctMTQgcm91bmRlZC1sZyBiZy1zbGF0ZS0xMDBcIiAvPn1cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1ib2xkXCI+e2QucHJvZHVjdF9uYW1lID8/IFwi4oCUXCJ9PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LXNsYXRlLTQwMFwiPlNLVToge2Quc2t1ID8/IFwi4oCUXCJ9PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YHRleHQteHMgZm9udC1zZW1pYm9sZCBweC0yIHB5LTAuNSByb3VuZGVkLWZ1bGwgY2FwaXRhbGl6ZSAke1NUQVRVU1tkLnN0YXR1c10gPz8gXCJiZy1zbGF0ZS0xMDBcIn1gfT57ZC5zdGF0dXN9PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGdhcC0xIGJvcmRlci1iIGJvcmRlci1zbGF0ZS0yMDAgdGV4dC1zbVwiPlxuICAgICAgICAgICAgeyhbW1wib3ZlcnZpZXdcIiwgXCJPdmVydmlld1wiXSwgW1wiZG9jdW1lbnRzXCIsIGBEb2N1bWVudHMgKCR7ZC5kb2N1bWVudHM/Lmxlbmd0aCA/PyAwfSlgXSwgW1wiaGlzdG9yeVwiLCBcIkhpc3RvcnlcIl1dIGFzIGNvbnN0KS5tYXAoKFt0LCBsXSkgPT4gKFxuICAgICAgICAgICAgICA8YnV0dG9uIGtleT17dH0gb25DbGljaz17KCkgPT4gc2V0VGFiKHQpfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHB4LTMgcHktMiBib3JkZXItYi0yIC1tYi1weCBmb250LW1lZGl1bSAke3RhYiA9PT0gdCA/IFwiYm9yZGVyLWJyYW5kLTYwMCB0ZXh0LWJyYW5kLTcwMFwiIDogXCJib3JkZXItdHJhbnNwYXJlbnQgdGV4dC1zbGF0ZS01MDBcIn1gfT57bH08L2J1dHRvbj5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAge3RhYiA9PT0gXCJvdmVydmlld1wiICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yIHRleHQtc21cIj5cbiAgICAgICAgICAgICAgPFJvdyBsYWJlbD1cIkNvbXBsaWFuY2UgVHlwZVwiIHZhbHVlPXtkLmNvbXBsaWFuY2VfdHlwZX0gLz5cbiAgICAgICAgICAgICAgPFJvdyBsYWJlbD1cIkxpY2Vuc2UgLyBSZWcuIE5vLlwiIHZhbHVlPXtkLmxpY2Vuc2VfbnVtYmVyfSAvPlxuICAgICAgICAgICAgICA8Um93IGxhYmVsPVwiTGljZW5zZSBOYW1lXCIgdmFsdWU9e2QubGljZW5zZV9uYW1lfSAvPlxuICAgICAgICAgICAgICA8Um93IGxhYmVsPVwiSXNzdWUgRGF0ZVwiIHZhbHVlPXtmbXQoZC5pc3N1ZV9kYXRlKX0gLz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBib3JkZXItYiBib3JkZXItc2xhdGUtNTAgcHktMS41XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbGF0ZS00MDBcIj5FeHBpcnkgRGF0ZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Bmb250LW1lZGl1bSB0ZXh0LXJpZ2h0ICR7ZXhwQ29sb3J9YH0+XG4gICAgICAgICAgICAgICAgICB7Zm10KGQuZXhwaXJ5X2RhdGUpfVxuICAgICAgICAgICAgICAgICAge2QuZGF5c19sZWZ0ICE9IG51bGwgJiYgPHNwYW4gY2xhc3NOYW1lPVwiYmxvY2sgdGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAgICB7ZC5kYXlzX2xlZnQgPCAwID8gXCIoRXhwaXJlZClcIiA6IGAoSW4gJHtkLmRheXNfbGVmdH0gZGF5cylgfVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPn1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8Um93IGxhYmVsPVwiU3RhdHVzXCIgdmFsdWU9e2Quc3RhdHVzfSBjYXAgLz5cbiAgICAgICAgICAgICAgPFJvdyBsYWJlbD1cIklzc3VpbmcgQXV0aG9yaXR5XCIgdmFsdWU9e2QuaXNzdWluZ19hdXRob3JpdHl9IC8+XG4gICAgICAgICAgICAgIDxSb3cgbGFiZWw9XCJDb3VudHJ5XCIgdmFsdWU9e2QuY291bnRyeX0gLz5cbiAgICAgICAgICAgICAgPFJvdyBsYWJlbD1cIlN0YXRlXCIgdmFsdWU9e2Quc3RhdGV9IC8+XG4gICAgICAgICAgICAgIDxSb3cgbGFiZWw9XCJDYXRlZ29yeVwiIHZhbHVlPXtkLmNhdGVnb3J5fSAvPlxuICAgICAgICAgICAgICA8Um93IGxhYmVsPVwiQXBwbGljYWJsZSBUb1wiIHZhbHVlPXtkLmFwcGxpY2FibGVfdG99IC8+XG4gICAgICAgICAgICAgIDxSb3cgbGFiZWw9XCJNYW51ZmFjdHVyaW5nIFBsYW50XCIgdmFsdWU9e2QucGxhbnR9IC8+XG4gICAgICAgICAgICAgIDxSb3cgbGFiZWw9XCJSZW1hcmtzXCIgdmFsdWU9e2QucmVtYXJrc30gLz5cbiAgICAgICAgICAgICAgPFJvdyBsYWJlbD1cIkNyZWF0ZWQgQnlcIiB2YWx1ZT17ZC5jcmVhdGVkX2J5fSAvPlxuICAgICAgICAgICAgICA8Um93IGxhYmVsPVwiQ3JlYXRlZCBPblwiIHZhbHVlPXtmbXQoZC5jcmVhdGVkX2F0LCB0cnVlKX0gLz5cbiAgICAgICAgICAgICAgPFJvdyBsYWJlbD1cIkxhc3QgVXBkYXRlZFwiIHZhbHVlPXtmbXQoZC51cGRhdGVkX2F0LCB0cnVlKX0gLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7dGFiID09PSBcImRvY3VtZW50c1wiICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yIHRleHQtc21cIj5cbiAgICAgICAgICAgICAgeyhkLmRvY3VtZW50cyA/PyBbXSkubWFwKChkb2M6IGFueSwgaTogbnVtYmVyKSA9PiAoXG4gICAgICAgICAgICAgICAgPGEga2V5PXtpfSBocmVmPXtgJHthcGlCYXNlfSR7ZG9jLnVybH1gfSB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIGJvcmRlciBib3JkZXItc2xhdGUtMTAwIHJvdW5kZWQtbGcgcHgtMyBweS0yIGhvdmVyOmJnLXNsYXRlLTUwXCI+XG4gICAgICAgICAgICAgICAgICA8RmlsZVRleHQgY2xhc3NOYW1lPVwiaC00IHctNCB0ZXh0LXNsYXRlLTQwMFwiIC8+IHtkb2MubmFtZX1cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICB7KCFkLmRvY3VtZW50cyB8fCBkLmRvY3VtZW50cy5sZW5ndGggPT09IDApICYmIDxwIGNsYXNzTmFtZT1cInRleHQtc2xhdGUtNDAwXCI+Tm8gZG9jdW1lbnRzIHVwbG9hZGVkLjwvcD59XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAge3RhYiA9PT0gXCJoaXN0b3J5XCIgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTEgdGV4dC1zbVwiPlxuICAgICAgICAgICAgICB7KGQuaGlzdG9yeSA/PyBbXSkubWFwKChoOiBhbnksIGk6IG51bWJlcikgPT4gKFxuICAgICAgICAgICAgICAgIDxkaXYga2V5PXtpfSBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBib3JkZXItYiBib3JkZXItc2xhdGUtNTAgcHktMS41XCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57aC5hY3Rpb259IHtoLmJ5ID8gYMK3ICR7aC5ieX1gIDogXCJcIn08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNsYXRlLTQwMFwiPntmbXQoaC5hdCwgdHJ1ZSl9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMiBwdC0yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXtvbkVkaXR9IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIGJvcmRlciBib3JkZXItc2xhdGUtMjAwIHJvdW5kZWQtbGcgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgPFBlbmNpbCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz4gRWRpdFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBmaWxlUmVmLmN1cnJlbnQ/LmNsaWNrKCl9IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIGJnLWJyYW5kLTYwMCB0ZXh0LXdoaXRlIHJvdW5kZWQtbGcgcHktMiB0ZXh0LXNtIGZvbnQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgICAgICA8VXBsb2FkIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPiBVcGxvYWQgRG9jdW1lbnRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxpbnB1dCByZWY9e2ZpbGVSZWZ9IHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiYXBwbGljYXRpb24vcGRmLGltYWdlLypcIiBjbGFzc05hbWU9XCJoaWRkZW5cIiBvbkNoYW5nZT17b25VcGxvYWR9IC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgb25DbGljaz17KGUpID0+IGUucHJldmVudERlZmF1bHQoKX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgYm9yZGVyIGJvcmRlci1icmFuZC0yMDAgdGV4dC1icmFuZC03MDAgcm91bmRlZC1sZyBweS0yIHRleHQtc20gZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgPEV4dGVybmFsTGluayBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz4gVmlldyBvbiBWZXJpZmljYXRpb24gUGFnZVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBmbXQoZD86IHN0cmluZywgdGltZSA9IGZhbHNlKSB7XG4gIGlmICghZCkgcmV0dXJuIFwi4oCUXCI7XG4gIGNvbnN0IGR0ID0gbmV3IERhdGUoZCk7XG4gIHJldHVybiBpc05hTigrZHQpID8gXCLigJRcIiA6IHRpbWUgPyBkdC50b0xvY2FsZVN0cmluZygpIDogZHQudG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG59XG5mdW5jdGlvbiBSb3coeyBsYWJlbCwgdmFsdWUsIGNhcCB9OiBhbnkpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGJvcmRlci1iIGJvcmRlci1zbGF0ZS01MCBweS0xLjVcIj5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc2xhdGUtNDAwXCI+e2xhYmVsfTwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17YGZvbnQtbWVkaXVtIHRleHQtc2xhdGUtNzAwIHRleHQtcmlnaHQgJHtjYXAgPyBcImNhcGl0YWxpemVcIiA6IFwiXCJ9YH0+e3ZhbHVlID8/IFwi4oCUXCJ9PC9zcGFuPlxuICAgIDwvZGl2PlxuICApO1xufVxuIl0sIm5hbWVzIjpbInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiWCIsIlBlbmNpbCIsIlVwbG9hZCIsIkV4dGVybmFsTGluayIsIkZpbGVUZXh0IiwiYXBpIiwiYXBpQmFzZSIsImltZ1NyYyIsInVybCIsInN0YXJ0c1dpdGgiLCJTVEFUVVMiLCJjb21wbGV0ZSIsInBlbmRpbmciLCJleHBpcmluZyIsImV4cGlyZWQiLCJDb21wbGlhbmNlRGV0YWlsTW9kYWwiLCJjaWQiLCJvbkNsb3NlIiwib25FZGl0Iiwib25DaGFuZ2VkIiwiZCIsInNldEQiLCJ0YWIiLCJzZXRUYWIiLCJmaWxlUmVmIiwibG9hZCIsInRoZW4iLCJjYXRjaCIsIm9uVXBsb2FkIiwiZSIsImZpbGUiLCJ0YXJnZXQiLCJmaWxlcyIsInIiLCJGaWxlUmVhZGVyIiwib25sb2FkIiwibWV0aG9kIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkYXRhX3VybCIsInJlc3VsdCIsImZpbGVuYW1lIiwibmFtZSIsInJlYWRBc0RhdGFVUkwiLCJkaXYiLCJjbGFzc05hbWUiLCJvbkNsaWNrIiwic3RvcFByb3BhZ2F0aW9uIiwiZXhwQ29sb3IiLCJkYXlzX2xlZnQiLCJoMyIsImJ1dHRvbiIsInByb2R1Y3RfaW1hZ2UiLCJpbWciLCJzcmMiLCJwcm9kdWN0X25hbWUiLCJza3UiLCJzcGFuIiwic3RhdHVzIiwiZG9jdW1lbnRzIiwibGVuZ3RoIiwibWFwIiwidCIsImwiLCJSb3ciLCJsYWJlbCIsInZhbHVlIiwiY29tcGxpYW5jZV90eXBlIiwibGljZW5zZV9udW1iZXIiLCJsaWNlbnNlX25hbWUiLCJmbXQiLCJpc3N1ZV9kYXRlIiwiZXhwaXJ5X2RhdGUiLCJjYXAiLCJpc3N1aW5nX2F1dGhvcml0eSIsImNvdW50cnkiLCJzdGF0ZSIsImNhdGVnb3J5IiwiYXBwbGljYWJsZV90byIsInBsYW50IiwicmVtYXJrcyIsImNyZWF0ZWRfYnkiLCJjcmVhdGVkX2F0IiwidXBkYXRlZF9hdCIsImRvYyIsImkiLCJhIiwiaHJlZiIsInJlbCIsInAiLCJoaXN0b3J5IiwiaCIsImFjdGlvbiIsImJ5IiwiYXQiLCJjdXJyZW50IiwiY2xpY2siLCJpbnB1dCIsInJlZiIsInR5cGUiLCJhY2NlcHQiLCJvbkNoYW5nZSIsInByZXZlbnREZWZhdWx0IiwidGltZSIsImR0IiwiRGF0ZSIsImlzTmFOIiwidG9Mb2NhbGVTdHJpbmciLCJ0b0xvY2FsZURhdGVTdHJpbmciXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/ComplianceDetailModal.tsx\n"));
/***/ }),
/***/ "(app-pages-browser)/./lib/api.ts":
/*!********************!*\
!*** ./lib/api.ts ***!
\********************/
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ api: function() { return /* binding */ api; },\n/* harmony export */ apiBase: function() { return /* binding */ apiBase; },\n/* harmony export */ clearToken: function() { return /* binding */ clearToken; },\n/* harmony export */ setToken: function() { return /* binding */ setToken; }\n/* harmony export */ });\nconst API = \"http://localhost:8000\" || 0;\nfunction getToken() {\n if (false) {}\n return window.localStorage.getItem(\"vp_token\");\n}\nfunction setToken(token) {\n window.localStorage.setItem(\"vp_token\", token);\n}\nfunction clearToken() {\n window.localStorage.removeItem(\"vp_token\");\n}\nasync function api(path) {\n let opts = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n const token = getToken();\n const res = await fetch(\"\".concat(API).concat(path), {\n ...opts,\n headers: {\n \"Content-Type\": \"application/json\",\n ...token ? {\n Authorization: \"Bearer \".concat(token)\n } : {},\n ...opts.headers || {}\n }\n });\n if (!res.ok) {\n let detail = res.statusText;\n try {\n var _detail;\n detail = (_detail = (await res.json()).detail) !== null && _detail !== void 0 ? _detail : detail;\n } catch (e) {}\n throw {\n status: res.status,\n detail\n };\n }\n if (res.status === 204) return undefined;\n return res.json();\n}\nconst apiBase = API;\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2xpYi9hcGkudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLE1BQU1BLE1BQU1DLHVCQUErQixJQUFJLENBQXVCO0FBR3RFLFNBQVNHO0lBQ1AsSUFBSSxLQUE2QixFQUFFLEVBQVk7SUFDL0MsT0FBT0MsT0FBT0MsWUFBWSxDQUFDQyxPQUFPLENBQUM7QUFDckM7QUFFTyxTQUFTQyxTQUFTQyxLQUFhO0lBQ3BDSixPQUFPQyxZQUFZLENBQUNJLE9BQU8sQ0FBQyxZQUFZRDtBQUMxQztBQUVPLFNBQVNFO0lBQ2ROLE9BQU9DLFlBQVksQ0FBQ00sVUFBVSxDQUFDO0FBQ2pDO0FBRU8sZUFBZUMsSUFDcEJDLElBQVk7UUFDWkMsT0FBQUEsaUVBQW9CLENBQUM7SUFFckIsTUFBTU4sUUFBUUw7SUFDZCxNQUFNWSxNQUFNLE1BQU1DLE1BQU0sR0FBU0gsT0FBTmQsS0FBVyxPQUFMYyxPQUFRO1FBQ3ZDLEdBQUdDLElBQUk7UUFDUEcsU0FBUztZQUNQLGdCQUFnQjtZQUNoQixHQUFJVCxRQUFRO2dCQUFFVSxlQUFlLFVBQWdCLE9BQU5WO1lBQVEsSUFBSSxDQUFDLENBQUM7WUFDckQsR0FBSU0sS0FBS0csT0FBTyxJQUFJLENBQUMsQ0FBQztRQUN4QjtJQUNGO0lBQ0EsSUFBSSxDQUFDRixJQUFJSSxFQUFFLEVBQUU7UUFDWCxJQUFJQyxTQUFjTCxJQUFJTSxVQUFVO1FBQ2hDLElBQUk7Z0JBQ087WUFBVEQsU0FBUyxZQUFDLE1BQU1MLElBQUlPLElBQUksRUFBQyxFQUFHRixNQUFNLGNBQXpCLCtCQUE2QkE7UUFDeEMsRUFBRSxVQUFNLENBQUM7UUFDVCxNQUFNO1lBQUVHLFFBQVFSLElBQUlRLE1BQU07WUFBRUg7UUFBTztJQUNyQztJQUNBLElBQUlMLElBQUlRLE1BQU0sS0FBSyxLQUFLLE9BQU9DO0lBQy9CLE9BQU9ULElBQUlPLElBQUk7QUFDakI7QUFFTyxNQUFNRyxVQUFVMUIsSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9saWIvYXBpLnRzPzY4YTEiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgQVBJID0gcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfQVBJX1VSTCB8fCBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiO1xuXG5cbmZ1bmN0aW9uIGdldFRva2VuKCk6IHN0cmluZyB8IG51bGwge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIG51bGw7XG4gIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ2cF90b2tlblwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFRva2VuKHRva2VuOiBzdHJpbmcpIHtcbiAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFwidnBfdG9rZW5cIiwgdG9rZW4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJUb2tlbigpIHtcbiAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwidnBfdG9rZW5cIik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcGk8VCA9IGFueT4oXG4gIHBhdGg6IHN0cmluZyxcbiAgb3B0czogUmVxdWVzdEluaXQgPSB7fVxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHRva2VuID0gZ2V0VG9rZW4oKTtcbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7QVBJfSR7cGF0aH1gLCB7XG4gICAgLi4ub3B0cyxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIC4uLih0b2tlbiA/IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAgfSA6IHt9KSxcbiAgICAgIC4uLihvcHRzLmhlYWRlcnMgfHwge30pLFxuICAgIH0sXG4gIH0pO1xuICBpZiAoIXJlcy5vaykge1xuICAgIGxldCBkZXRhaWw6IGFueSA9IHJlcy5zdGF0dXNUZXh0O1xuICAgIHRyeSB7XG4gICAgICBkZXRhaWwgPSAoYXdhaXQgcmVzLmpzb24oKSkuZGV0YWlsID8/IGRldGFpbDtcbiAgICB9IGNhdGNoIHt9XG4gICAgdGhyb3cgeyBzdGF0dXM6IHJlcy5zdGF0dXMsIGRldGFpbCB9O1xuICB9XG4gIGlmIChyZXMuc3RhdHVzID09PSAyMDQpIHJldHVybiB1bmRlZmluZWQgYXMgVDtcbiAgcmV0dXJuIHJlcy5qc29uKCk7XG59XG5cbmV4cG9ydCBjb25zdCBhcGlCYXNlID0gQVBJO1xuIl0sIm5hbWVzIjpbIkFQSSIsInByb2Nlc3MiLCJlbnYiLCJORVhUX1BVQkxJQ19BUElfVVJMIiwiZ2V0VG9rZW4iLCJ3aW5kb3ciLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwic2V0VG9rZW4iLCJ0b2tlbiIsInNldEl0ZW0iLCJjbGVhclRva2VuIiwicmVtb3ZlSXRlbSIsImFwaSIsInBhdGgiLCJvcHRzIiwicmVzIiwiZmV0Y2giLCJoZWFkZXJzIiwiQXV0aG9yaXphdGlvbiIsIm9rIiwiZGV0YWlsIiwic3RhdHVzVGV4dCIsImpzb24iLCJzdGF0dXMiLCJ1bmRlZmluZWQiLCJhcGlCYXNlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./lib/api.ts\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js":
/*!****************************************************************************************!*\
!*** ./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js ***!
\****************************************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("/**\n * @license React\n * react-jsx-dev-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n'use strict';\n\nvar React = __webpack_require__(/*! next/dist/compiled/react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider'); // TODO: Delete with enableRenderableContext\n\nvar REACT_CONSUMER_TYPE = Symbol.for('react.consumer');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar REACT_CACHE_TYPE = Symbol.for('react.cache');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\nvar enableRenderableContext = false;\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false;\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n}\n\nvar REACT_CLIENT_REFERENCE$2 = Symbol.for('react.client.reference'); // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n if (typeof type === 'function') {\n if (type.$$typeof === REACT_CLIENT_REFERENCE$2) {\n // TODO: Create a convention for naming client references with debug info.\n return null;\n }\n\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n case REACT_CACHE_TYPE:\n {\n return 'Cache';\n }\n\n }\n\n if (typeof type === 'object') {\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n switch (type.$$typeof) {\n case REACT_PROVIDER_TYPE:\n {\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n }\n\n case REACT_CONTEXT_TYPE:\n var context = type;\n\n {\n return getContextName(context) + '.Consumer';\n }\n\n case REACT_CONSUMER_TYPE:\n {\n return null;\n }\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n }\n }\n\n return null;\n}\n\n// $FlowFixMe[method-unbinding]\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar assign = Object.assign;\n\n/*\n * The `'' + value` pattern (used in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object'; // $FlowFixMe[incompatible-return]\n\n return type;\n }\n} // $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\nvar REACT_CLIENT_REFERENCE$1 = Symbol.for('react.client.reference');\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || enableRenderableContext || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_CLIENT_REFERENCE$1 || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n/**\n * Leverages native browser/VM stack frames to get proper details (e.g.\n * filename, line + col number) for a single component in a component stack. We\n * do this by:\n * (1) throwing and catching an error in the function - this will be our\n * control error.\n * (2) calling the component which will eventually throw an error that we'll\n * catch - this will be our sample error.\n * (3) diffing the control and sample error stacks to find the stack frame\n * which represents our component.\n */\n\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if (!fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe[incompatible-type] It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n /**\n * Finding a common stack frame between sample and control errors can be\n * tricky given the different types and levels of stack trace truncation from\n * different JS VMs. So instead we'll attempt to control what that common\n * frame should be through this object method:\n * Having both the sample and control errors be in the function under the\n * `DescribeNativeComponentFrameRoot` property, + setting the `name` and\n * `displayName` properties of the function ensures that a stack\n * frame exists that has the method name `DescribeNativeComponentFrameRoot` in\n * it for both control and sample stacks.\n */\n\n\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n var control;\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe[prop-missing]\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n } // $FlowFixMe[prop-missing] found when upgrading Flow\n\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n } // TODO(luna): This will currently only throw if the function component\n // tries to access React/ReactDOM/props. We should probably make this throw\n // in simple components too\n\n\n var maybePromise = fn(); // If the function component returns a promise, it's likely an async\n // component, which we don't yet support. Attach a noop catch handler to\n // silence the error.\n // TODO: Implement component stacks for async client components?\n\n if (maybePromise && typeof maybePromise.catch === 'function') {\n maybePromise.catch(function () {});\n }\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n return [sample.stack, control.stack];\n }\n }\n\n return [null, null];\n }\n }; // $FlowFixMe[prop-missing]\n\n RunInRootFrame.DetermineComponentFrameRoot.displayName = 'DetermineComponentFrameRoot';\n var namePropDescriptor = Object.getOwnPropertyDescriptor(RunInRootFrame.DetermineComponentFrameRoot, 'name'); // Before ES6, the `name` property was not configurable.\n\n if (namePropDescriptor && namePropDescriptor.configurable) {\n // V8 utilizes a function's `name` property when generating a stack trace.\n Object.defineProperty(RunInRootFrame.DetermineComponentFrameRoot, // Configurable properties can be updated even if its writable descriptor\n // is set to `false`.\n // $FlowFixMe[cannot-write]\n 'name', {\n value: 'DetermineComponentFrameRoot'\n });\n }\n\n try {\n var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n\n if (sampleStack && controlStack) {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sampleStack.split('\\n');\n var controlLines = controlStack.split('\\n');\n var s = 0;\n var c = 0;\n\n while (s < sampleLines.length && !sampleLines[s].includes('DetermineComponentFrameRoot')) {\n s++;\n }\n\n while (c < controlLines.length && !controlLines[c].includes('DetermineComponentFrameRoot')) {\n c++;\n } // We couldn't find our intentionally injected common root frame, attempt\n // to find another common root frame by search from the bottom of the\n // control stack...\n\n\n if (s === sampleLines.length || c === controlLines.length) {\n s = sampleLines.length - 1;\n c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('<anonymous>')) {\n _frame = _frame.replace('<anonymous>', fn.displayName);\n }\n\n if (true) {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\nvar REACT_CLIENT_REFERENCE = Symbol.for('react.client.reference');\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nfunction ReactElement(type, key, _ref, self, source, owner, props) {\n var ref;\n\n {\n ref = _ref;\n }\n\n var element;\n\n {\n // In prod, `ref` is a regular property. It will be removed in a\n // future release.\n element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n }\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // debugInfo contains Server Component debug information.\n\n Object.defineProperty(element, '_debugInfo', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: null\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n}\nvar didWarnAboutKeySpread = {};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV$1(type, config, maybeKey, isStaticChildren, source, self) {\n {\n if (!isValidElementType(type)) {\n // This is an invalid element type.\n //\n // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n } else {\n // This is a valid element type.\n // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing\n // errors. We don't want exception behavior to differ between dev and\n // prod. (Rendering will throw with a helpful message and as soon as the\n // type is fixed, the key warnings will appear.)\n var children = config.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n } // Warn about key spread regardless of whether the type is valid.\n\n\n if (hasOwnProperty.call(config, 'key')) {\n var componentName = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return k !== 'key';\n });\n var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\n\n if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\n\n error('A props object containing a \"key\" prop is being spread into JSX:\\n' + ' let props = %s;\\n' + ' <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + ' let props = %s;\\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\n\n didWarnAboutKeySpread[componentName + beforeExample] = true;\n }\n }\n\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n {\n checkKeyStringCoercion(maybeKey);\n }\n\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n {\n ref = config.ref;\n }\n\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && // Skip over reserved prop names\n propName !== 'key' && (propName !== 'ref')) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n var element = ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n }\n\n return element;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner.current) {\n var name = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object' || !node) {\n return;\n }\n\n if (node.$$typeof === REACT_CLIENT_REFERENCE) ; else if (isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nvar ownerHasKeyUseWarning = {};\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement(null);\n }\n}\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = getComponentNameFromType(parentType);\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n // TODO: Move this to render phase instead of at element creation.\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement(null);\n }\n }\n}\n\nvar jsxDEV = jsxDEV$1 ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsxDEV = jsxDEV;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWIsSUFBSSxJQUFxQztBQUN6QztBQUNBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxzR0FBMEI7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RDs7QUFFeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlHQUFpRyxlQUFlO0FBQ2hIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQSxLQUFLLEdBQUc7O0FBRVIsa0RBQWtEO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLDRCQUE0QjtBQUM1QjtBQUNBLHFDQUFxQzs7QUFFckMsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBLHFFQUFxRTs7QUFFckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0dBQWtHOztBQUVsRztBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1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O0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxXQUFXLEdBQUc7QUFDZCxXQUFXLEdBQUc7QUFDZCxXQUFXLGVBQWU7QUFDMUIsV0FBVyxHQUFHO0FBQ2QsV0FBVyxHQUFHO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtB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QUFXLGNBQWM7QUFDekI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixpQkFBaUI7QUFDckM7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGdCQUFnQjtBQUNoQixjQUFjO0FBQ2QsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcz84OTRlIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0ID0gcmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9yZWFjdFwiKTtcblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50Jyk7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZnJhZ21lbnQnKTtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKTtcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKTtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucHJvdmlkZXInKTsgLy8gVE9ETzogRGVsZXRlIHdpdGggZW5hYmxlUmVuZGVyYWJsZUNvbnRleHRcblxudmFyIFJFQUNUX0NPTlNVTUVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5jb25zdW1lcicpO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubWVtbycpO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xudmFyIFJFQUNUX0NBQ0hFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5jYWNoZScpO1xudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCB0eXBlb2YgbWF5YmVJdGVyYWJsZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtYXliZUl0ZXJhdG9yID0gTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXTtcblxuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSBSZWFjdC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDtcblxuZnVuY3Rpb24gZXJyb3IoZm9ybWF0KSB7XG4gIHtcbiAgICB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGxldmVsLCBmb3JtYXQsIGFyZ3MpIHtcbiAgLy8gV2hlbiBjaGFuZ2luZyB0aGlzIGxvZ2ljLCB5b3UgbWlnaHQgd2FudCB0byBhbHNvXG4gIC8vIHVwZGF0ZSBjb25zb2xlV2l0aFN0YWNrRGV2Lnd3dy5qcyBhcyB3ZWxsLlxuICB7XG4gICAgdmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuICAgIHZhciBzdGFjayA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSgpO1xuXG4gICAgaWYgKHN0YWNrICE9PSAnJykge1xuICAgICAgZm9ybWF0ICs9ICclcyc7XG4gICAgICBhcmdzID0gYXJncy5jb25jYXQoW3N0YWNrXSk7XG4gICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cblxuXG4gICAgdmFyIGFyZ3NXaXRoRm9ybWF0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBTdHJpbmcoaXRlbSk7XG4gICAgfSk7IC8vIENhcmVmdWw6IFJOIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJlZml4XG5cbiAgICBhcmdzV2l0aEZvcm1hdC51bnNoaWZ0KCdXYXJuaW5nOiAnICsgZm9ybWF0KTsgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCB1c2Ugc3ByZWFkIChvciAuYXBwbHkpIGRpcmVjdGx5IGJlY2F1c2UgaXRcbiAgICAvLyBicmVha3MgSUU5OiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjEwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuXG4gICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZVtsZXZlbF0sIGNvbnNvbGUsIGFyZ3NXaXRoRm9ybWF0KTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgZW5hYmxlU2NvcGVBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIENyZWF0ZSBFdmVudCBIYW5kbGUgQVBJLlxudmFyIGVuYWJsZUNhY2hlRWxlbWVudCA9IGZhbHNlO1xudmFyIGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nID0gZmFsc2U7IC8vIE5vIGtub3duIGJ1Z3MsIGJ1dCBuZWVkcyBwZXJmb3JtYW5jZSB0ZXN0aW5nXG5cbnZhciBlbmFibGVMZWdhY3lIaWRkZW4gPSBmYWxzZTsgLy8gRW5hYmxlcyB1bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayBmZWF0dXJlIGluIEZpYmVyXG52YXIgZW5hYmxlUmVuZGVyYWJsZUNvbnRleHQgPSBmYWxzZTtcbi8vIHN0dWZmLiBJbnRlbmRlZCB0byBlbmFibGUgUmVhY3QgY29yZSBtZW1iZXJzIHRvIG1vcmUgZWFzaWx5IGRlYnVnIHNjaGVkdWxpbmdcbi8vIGlzc3VlcyBpbiBERVYgYnVpbGRzLlxuXG52YXIgZW5hYmxlRGVidWdUcmFjaW5nID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZGlzcGxheU5hbWUgPSBvdXRlclR5cGUuZGlzcGxheU5hbWU7XG5cbiAgaWYgKGRpc3BsYXlOYW1lKSB7XG4gICAgcmV0dXJuIGRpc3BsYXlOYW1lO1xuICB9XG5cbiAgdmFyIGZ1bmN0aW9uTmFtZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCAnJztcbiAgcmV0dXJuIGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZTtcbn0gLy8gS2VlcCBpbiBzeW5jIHdpdGggcmVhY3QtcmVjb25jaWxlci9nZXRDb21wb25lbnROYW1lRnJvbUZpYmVyXG5cblxuZnVuY3Rpb24gZ2V0Q29udGV4dE5hbWUodHlwZSkge1xuICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCAnQ29udGV4dCc7XG59XG5cbnZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFJDIgPSBTeW1ib2wuZm9yKCdyZWFjdC5jbGllbnQucmVmZXJlbmNlJyk7IC8vIE5vdGUgdGhhdCB0aGUgcmVjb25jaWxlciBwYWNrYWdlIHNob3VsZCBnZW5lcmFsbHkgcHJlZmVyIHRvIHVzZSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKCkgaW5zdGVhZC5cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMikge1xuICAgICAgLy8gVE9ETzogQ3JlYXRlIGEgY29udmVudGlvbiBmb3IgbmFtaW5nIGNsaWVudCByZWZlcmVuY2VzIHdpdGggZGVidWcgaW5mby5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgcmV0dXJuICdGcmFnbWVudCc7XG5cbiAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgcmV0dXJuICdQb3J0YWwnO1xuXG4gICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgcmV0dXJuICdQcm9maWxlcic7XG5cbiAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcblxuICAgIGNhc2UgUkVBQ1RfQ0FDSEVfVFlQRTpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuICdDYWNoZSc7XG4gICAgICB9XG5cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICB7XG4gICAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xuICAgICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKCkuICcgKyAnVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHByb3ZpZGVyID0gdHlwZTtcbiAgICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUocHJvdmlkZXIuX2NvbnRleHQpICsgJy5Qcm92aWRlcic7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgIHZhciBjb250ZXh0ID0gdHlwZTtcblxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKGNvbnRleHQpICsgJy5Db25zdW1lcic7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9DT05TVU1FUl9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICB2YXIgb3V0ZXJOYW1lID0gdHlwZS5kaXNwbGF5TmFtZSB8fCBudWxsO1xuXG4gICAgICAgIGlmIChvdXRlck5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gb3V0ZXJOYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8ICdNZW1vJztcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGluaXQocGF5bG9hZCkpO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLypcbiAqIFRoZSBgJycgKyB2YWx1ZWAgcGF0dGVybiAodXNlZCBpbiBwZXJmLXNlbnNpdGl2ZSBjb2RlKSB0aHJvd3MgZm9yIFN5bWJvbFxuICogYW5kIFRlbXBvcmFsLiogdHlwZXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8yMjA2NC5cbiAqXG4gKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIHdpbGwgdGhyb3cgYW4gZWFzaWVyLXRvLXVuZGVyc3RhbmQsXG4gKiBlYXNpZXItdG8tZGVidWcgZXhjZXB0aW9uIHdpdGggYSBjbGVhciBlcnJvcnMgbWVzc2FnZSBtZXNzYWdlIGV4cGxhaW5pbmcgdGhlXG4gKiBwcm9ibGVtLiAoSW5zdGVhZCBvZiBhIGNvbmZ1c2luZyBleGNlcHRpb24gdGhyb3duIGluc2lkZSB0aGUgaW1wbGVtZW50YXRpb25cbiAqIG9mIHRoZSBgdmFsdWVgIG9iamVjdCkuXG4gKi9cbi8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXG5mdW5jdGlvbiB0eXBlTmFtZSh2YWx1ZSkge1xuICB7XG4gICAgLy8gdG9TdHJpbmdUYWcgaXMgbmVlZGVkIGZvciBuYW1lc3BhY2VkIHR5cGVzIGxpa2UgVGVtcG9yYWwuSW5zdGFudFxuICAgIHZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLnRvU3RyaW5nVGFnO1xuICAgIHZhciB0eXBlID0gaGFzVG9TdHJpbmdUYWcgJiYgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSB8fCB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lIHx8ICdPYmplY3QnOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxufSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dIG9ubHkgY2FsbGVkIGluIERFViwgc28gdm9pZCByZXR1cm4gaXMgbm90IHBvc3NpYmxlLlxuXG5cbmZ1bmN0aW9uIHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSB7XG4gIHtcbiAgICB0cnkge1xuICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gIC8vIElmIHlvdSBlbmRlZCB1cCBoZXJlIGJ5IGZvbGxvd2luZyBhbiBleGNlcHRpb24gY2FsbCBzdGFjaywgaGVyZSdzIHdoYXQnc1xuICAvLyBoYXBwZW5lZDogeW91IHN1cHBsaWVkIGFuIG9iamVjdCBvciBzeW1ib2wgdmFsdWUgdG8gUmVhY3QgKGFzIGEgcHJvcCwga2V5LFxuICAvLyBET00gYXR0cmlidXRlLCBDU1MgcHJvcGVydHksIHN0cmluZyByZWYsIGV0Yy4pIGFuZCB3aGVuIFJlYWN0IHRyaWVkIHRvXG4gIC8vIGNvZXJjZSBpdCB0byBhIHN0cmluZyB1c2luZyBgJycgKyB2YWx1ZWAsIGFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duLlxuICAvL1xuICAvLyBUaGUgbW9zdCBjb21tb24gdHlwZXMgdGhhdCB3aWxsIGNhdXNlIHRoaXMgZXhjZXB0aW9uIGFyZSBgU3ltYm9sYCBpbnN0YW5jZXNcbiAgLy8gYW5kIFRlbXBvcmFsIG9iamVjdHMgbGlrZSBgVGVtcG9yYWwuSW5zdGFudGAuIEJ1dCBhbnkgb2JqZWN0IHRoYXQgaGFzIGFcbiAgLy8gYHZhbHVlT2ZgIG9yIGBbU3ltYm9sLnRvUHJpbWl0aXZlXWAgbWV0aG9kIHRoYXQgdGhyb3dzIHdpbGwgYWxzbyBjYXVzZSB0aGlzXG4gIC8vIGV4Y2VwdGlvbi4gKExpYnJhcnkgYXV0aG9ycyBkbyB0aGlzIHRvIHByZXZlbnQgdXNlcnMgZnJvbSB1c2luZyBidWlsdC1pblxuICAvLyBudW1lcmljIG9wZXJhdG9ycyBsaWtlIGArYCBvciBjb21wYXJpc29uIG9wZXJhdG9ycyBsaWtlIGA+PWAgYmVjYXVzZSBjdXN0b21cbiAgLy8gbWV0aG9kcyBhcmUgbmVlZGVkIHRvIHBlcmZvcm0gYWNjdXJhdGUgYXJpdGhtZXRpYyBvciBjb21wYXJpc29uLilcbiAgLy9cbiAgLy8gVG8gZml4IHRoZSBwcm9ibGVtLCBjb2VyY2UgdGhpcyBvYmplY3Qgb3Igc3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nIGJlZm9yZVxuICAvLyBwYXNzaW5nIGl0IHRvIFJlYWN0LiBUaGUgbW9zdCByZWxpYWJsZSB3YXkgaXMgdXN1YWxseSBgU3RyaW5nKHZhbHVlKWAuXG4gIC8vXG4gIC8vIFRvIGZpbmQgd2hpY2ggdmFsdWUgaXMgdGhyb3dpbmcsIGNoZWNrIHRoZSBicm93c2VyIG9yIGRlYnVnZ2VyIGNvbnNvbGUuXG4gIC8vIEJlZm9yZSB0aGlzIGV4Y2VwdGlvbiB3YXMgdGhyb3duLCB0aGVyZSBzaG91bGQgYmUgYGNvbnNvbGUuZXJyb3JgIG91dHB1dFxuICAvLyB0aGF0IHNob3dzIHRoZSB0eXBlIChTeW1ib2wsIFRlbXBvcmFsLlBsYWluRGF0ZSwgZXRjLikgdGhhdCBjYXVzZWQgdGhlXG4gIC8vIHByb2JsZW0gYW5kIGhvdyB0aGF0IHR5cGUgd2FzIHVzZWQ6IGtleSwgYXRycmlidXRlLCBpbnB1dCB2YWx1ZSBwcm9wLCBldGMuXG4gIC8vIEluIG1vc3QgY2FzZXMsIHRoaXMgY29uc29sZSBvdXRwdXQgYWxzbyBzaG93cyB0aGUgY29tcG9uZW50IGFuZCBpdHNcbiAgLy8gYW5jZXN0b3IgY29tcG9uZW50cyB3aGVyZSB0aGUgZXhjZXB0aW9uIGhhcHBlbmVkLlxuICAvL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cbiAgcmV0dXJuICcnICsgdmFsdWU7XG59XG5mdW5jdGlvbiBjaGVja0tleVN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gIHtcbiAgICBpZiAod2lsbENvZXJjaW9uVGhyb3codmFsdWUpKSB7XG4gICAgICBlcnJvcignVGhlIHByb3ZpZGVkIGtleSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLicgKyAnIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLicsIHR5cGVOYW1lKHZhbHVlKSk7XG5cbiAgICAgIHJldHVybiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpOyAvLyB0aHJvdyAodG8gaGVscCBjYWxsZXJzIGZpbmQgdHJvdWJsZXNob290aW5nIGNvbW1lbnRzKVxuICAgIH1cbiAgfVxufVxuXG52YXIgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSQxID0gU3ltYm9sLmZvcigncmVhY3QuY2xpZW50LnJlZmVyZW5jZScpO1xuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5vdGU6IHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIChlLmcuIGlmIGl0J3MgYSBwb2x5ZmlsbCkuXG5cblxuICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IGVuYWJsZURlYnVnVHJhY2luZyAgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCBlbmFibGVMZWdhY3lIaWRkZW4gIHx8IHR5cGUgPT09IFJFQUNUX09GRlNDUkVFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICB8fCBlbmFibGVDYWNoZUVsZW1lbnQgIHx8IGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgZW5hYmxlUmVuZGVyYWJsZUNvbnRleHQgIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gVGhpcyBuZWVkcyB0byBpbmNsdWRlIGFsbCBwb3NzaWJsZSBtb2R1bGUgcmVmZXJlbmNlIG9iamVjdFxuICAgIC8vIHR5cGVzIHN1cHBvcnRlZCBieSBhbnkgRmxpZ2h0IGNvbmZpZ3VyYXRpb24gYW55d2hlcmUgc2luY2VcbiAgICAvLyB3ZSBkb24ndCBrbm93IHdoaWNoIEZsaWdodCBidWlsZCB0aGlzIHdpbGwgZW5kIHVwIGJlaW5nIHVzZWRcbiAgICAvLyB3aXRoLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMSB8fCB0eXBlLmdldE1vZHVsZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIGlzQXJyYXlJbXBsID0gQXJyYXkuaXNBcnJheTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlZGVjbGFyZVxuXG5mdW5jdGlvbiBpc0FycmF5KGEpIHtcbiAgcmV0dXJuIGlzQXJyYXlJbXBsKGEpO1xufVxuXG4vLyBIZWxwZXJzIHRvIHBhdGNoIGNvbnNvbGUubG9ncyB0byBhdm9pZCBsb2dnaW5nIGR1cmluZyBzaWRlLWVmZmVjdCBmcmVlXG4vLyByZXBsYXlpbmcgb24gcmVuZGVyIGZ1bmN0aW9uLiBUaGlzIGN1cnJlbnRseSBvbmx5IHBhdGNoZXMgdGhlIG9iamVjdFxuLy8gbGF6aWx5IHdoaWNoIHdvbid0IGNvdmVyIGlmIHRoZSBsb2cgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBlYWdlcmx5LlxuLy8gV2UgY291bGQgYWxzbyBlYWdlcmx5IHBhdGNoIHRoZSBtZXRob2QuXG52YXIgZGlzYWJsZWREZXB0aCA9IDA7XG52YXIgcHJldkxvZztcbnZhciBwcmV2SW5mbztcbnZhciBwcmV2V2FybjtcbnZhciBwcmV2RXJyb3I7XG52YXIgcHJldkdyb3VwO1xudmFyIHByZXZHcm91cENvbGxhcHNlZDtcbnZhciBwcmV2R3JvdXBFbmQ7XG5cbmZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cblxuZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gdHJ1ZTtcbmZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICB7XG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTkwOTlcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGRpc2FibGVkRGVwdGgrKztcbiAgfVxufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICB7XG4gICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV0gRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgbG9nOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZMb2dcbiAgICAgICAgfSksXG4gICAgICAgIGluZm86IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgICAgfSksXG4gICAgICAgIHdhcm46IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldldhcm5cbiAgICAgICAgfSksXG4gICAgICAgIGVycm9yOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZFcnJvclxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXA6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cENvbGxhcHNlZDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBDb2xsYXBzZWRcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwRW5kOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cEVuZFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGlmIChkaXNhYmxlZERlcHRoIDwgMCkge1xuICAgICAgZXJyb3IoJ2Rpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG52YXIgcHJlZml4O1xuZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cbi8qKlxuICogTGV2ZXJhZ2VzIG5hdGl2ZSBicm93c2VyL1ZNIHN0YWNrIGZyYW1lcyB0byBnZXQgcHJvcGVyIGRldGFpbHMgKGUuZy5cbiAqIGZpbGVuYW1lLCBsaW5lICsgY29sIG51bWJlcikgZm9yIGEgc2luZ2xlIGNvbXBvbmVudCBpbiBhIGNvbXBvbmVudCBzdGFjay4gV2VcbiAqIGRvIHRoaXMgYnk6XG4gKiAgICgxKSB0aHJvd2luZyBhbmQgY2F0Y2hpbmcgYW4gZXJyb3IgaW4gdGhlIGZ1bmN0aW9uIC0gdGhpcyB3aWxsIGJlIG91clxuICogICAgICAgY29udHJvbCBlcnJvci5cbiAqICAgKDIpIGNhbGxpbmcgdGhlIGNvbXBvbmVudCB3aGljaCB3aWxsIGV2ZW50dWFsbHkgdGhyb3cgYW4gZXJyb3IgdGhhdCB3ZSdsbFxuICogICAgICAgY2F0Y2ggLSB0aGlzIHdpbGwgYmUgb3VyIHNhbXBsZSBlcnJvci5cbiAqICAgKDMpIGRpZmZpbmcgdGhlIGNvbnRyb2wgYW5kIHNhbXBsZSBlcnJvciBzdGFja3MgdG8gZmluZCB0aGUgc3RhY2sgZnJhbWVcbiAqICAgICAgIHdoaWNoIHJlcHJlc2VudHMgb3VyIGNvbXBvbmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAvLyBJZiBzb21ldGhpbmcgYXNrZWQgZm9yIGEgc3RhY2sgaW5zaWRlIGEgZmFrZSByZW5kZXIsIGl0IHNob3VsZCBnZXQgaWdub3JlZC5cbiAgaWYgKCFmbiB8fCByZWVudHJ5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAge1xuICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcblxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICB9XG5cbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHVuZGVmaW5lZDtcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcblxuICB7XG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50OyAvLyBTZXQgdGhlIGRpc3BhdGNoZXIgaW4gREVWIGJlY2F1c2UgdGhpcyBtaWdodCBiZSBjYWxsIGluIHRoZSByZW5kZXIgZnVuY3Rpb25cbiAgICAvLyBmb3Igd2FybmluZ3MuXG5cbiAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cbiAgLyoqXG4gICAqIEZpbmRpbmcgYSBjb21tb24gc3RhY2sgZnJhbWUgYmV0d2VlbiBzYW1wbGUgYW5kIGNvbnRyb2wgZXJyb3JzIGNhbiBiZVxuICAgKiB0cmlja3kgZ2l2ZW4gdGhlIGRpZmZlcmVudCB0eXBlcyBhbmQgbGV2ZWxzIG9mIHN0YWNrIHRyYWNlIHRydW5jYXRpb24gZnJvbVxuICAgKiBkaWZmZXJlbnQgSlMgVk1zLiBTbyBpbnN0ZWFkIHdlJ2xsIGF0dGVtcHQgdG8gY29udHJvbCB3aGF0IHRoYXQgY29tbW9uXG4gICAqIGZyYW1lIHNob3VsZCBiZSB0aHJvdWdoIHRoaXMgb2JqZWN0IG1ldGhvZDpcbiAgICogSGF2aW5nIGJvdGggdGhlIHNhbXBsZSBhbmQgY29udHJvbCBlcnJvcnMgYmUgaW4gdGhlIGZ1bmN0aW9uIHVuZGVyIHRoZVxuICAgKiBgRGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZVJvb3RgIHByb3BlcnR5LCArIHNldHRpbmcgdGhlIGBuYW1lYCBhbmRcbiAgICogYGRpc3BsYXlOYW1lYCBwcm9wZXJ0aWVzIG9mIHRoZSBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgYSBzdGFja1xuICAgKiBmcmFtZSBleGlzdHMgdGhhdCBoYXMgdGhlIG1ldGhvZCBuYW1lIGBEZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lUm9vdGAgaW5cbiAgICogaXQgZm9yIGJvdGggY29udHJvbCBhbmQgc2FtcGxlIHN0YWNrcy5cbiAgICovXG5cblxuICB2YXIgUnVuSW5Sb290RnJhbWUgPSB7XG4gICAgRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290OiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY29udHJvbDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyBzaG91bGQgdGhyb3cuXG4gICAgICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgfTsgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG5cblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgICAgIH0gLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuXG4gICAgICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgICAgfSAvLyBUT0RPKGx1bmEpOiBUaGlzIHdpbGwgY3VycmVudGx5IG9ubHkgdGhyb3cgaWYgdGhlIGZ1bmN0aW9uIGNvbXBvbmVudFxuICAgICAgICAgIC8vIHRyaWVzIHRvIGFjY2VzcyBSZWFjdC9SZWFjdERPTS9wcm9wcy4gV2Ugc2hvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyB0aHJvd1xuICAgICAgICAgIC8vIGluIHNpbXBsZSBjb21wb25lbnRzIHRvb1xuXG5cbiAgICAgICAgICB2YXIgbWF5YmVQcm9taXNlID0gZm4oKTsgLy8gSWYgdGhlIGZ1bmN0aW9uIGNvbXBvbmVudCByZXR1cm5zIGEgcHJvbWlzZSwgaXQncyBsaWtlbHkgYW4gYXN5bmNcbiAgICAgICAgICAvLyBjb21wb25lbnQsIHdoaWNoIHdlIGRvbid0IHlldCBzdXBwb3J0LiBBdHRhY2ggYSBub29wIGNhdGNoIGhhbmRsZXIgdG9cbiAgICAgICAgICAvLyBzaWxlbmNlIHRoZSBlcnJvci5cbiAgICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgY29tcG9uZW50IHN0YWNrcyBmb3IgYXN5bmMgY2xpZW50IGNvbXBvbmVudHM/XG5cbiAgICAgICAgICBpZiAobWF5YmVQcm9taXNlICYmIHR5cGVvZiBtYXliZVByb21pc2UuY2F0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG1heWJlUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBpbmxpbmVkIG1hbnVhbGx5IGJlY2F1c2UgY2xvc3VyZSBkb2Vzbid0IGRvIGl0IGZvciB1cy5cbiAgICAgICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIFtzYW1wbGUuc3RhY2ssIGNvbnRyb2wuc3RhY2tdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbbnVsbCwgbnVsbF07XG4gICAgfVxuICB9OyAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cblxuICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QuZGlzcGxheU5hbWUgPSAnRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290JztcbiAgdmFyIG5hbWVQcm9wRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LCAnbmFtZScpOyAvLyBCZWZvcmUgRVM2LCB0aGUgYG5hbWVgIHByb3BlcnR5IHdhcyBub3QgY29uZmlndXJhYmxlLlxuXG4gIGlmIChuYW1lUHJvcERlc2NyaXB0b3IgJiYgbmFtZVByb3BEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgIC8vIFY4IHV0aWxpemVzIGEgZnVuY3Rpb24ncyBgbmFtZWAgcHJvcGVydHkgd2hlbiBnZW5lcmF0aW5nIGEgc3RhY2sgdHJhY2UuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCwgLy8gQ29uZmlndXJhYmxlIHByb3BlcnRpZXMgY2FuIGJlIHVwZGF0ZWQgZXZlbiBpZiBpdHMgd3JpdGFibGUgZGVzY3JpcHRvclxuICAgIC8vIGlzIHNldCB0byBgZmFsc2VgLlxuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuICAgICduYW1lJywge1xuICAgICAgdmFsdWU6ICdEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QnXG4gICAgfSk7XG4gIH1cblxuICB0cnkge1xuICAgIHZhciBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPSBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QoKSxcbiAgICAgICAgc2FtcGxlU3RhY2sgPSBfUnVuSW5Sb290RnJhbWUkRGV0ZXJbMF0sXG4gICAgICAgIGNvbnRyb2xTdGFjayA9IF9SdW5JblJvb3RGcmFtZSREZXRlclsxXTtcblxuICAgIGlmIChzYW1wbGVTdGFjayAmJiBjb250cm9sU3RhY2spIHtcbiAgICAgIC8vIFRoaXMgZXh0cmFjdHMgdGhlIGZpcnN0IGZyYW1lIGZyb20gdGhlIHNhbXBsZSB0aGF0IGlzbid0IGFsc28gaW4gdGhlIGNvbnRyb2wuXG4gICAgICAvLyBTa2lwcGluZyBvbmUgZnJhbWUgdGhhdCB3ZSBhc3N1bWUgaXMgdGhlIGZyYW1lIHRoYXQgY2FsbHMgdGhlIHR3by5cbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZVN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sU3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSAwO1xuICAgICAgdmFyIGMgPSAwO1xuXG4gICAgICB3aGlsZSAocyA8IHNhbXBsZUxpbmVzLmxlbmd0aCAmJiAhc2FtcGxlTGluZXNbc10uaW5jbHVkZXMoJ0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCcpKSB7XG4gICAgICAgIHMrKztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKGMgPCBjb250cm9sTGluZXMubGVuZ3RoICYmICFjb250cm9sTGluZXNbY10uaW5jbHVkZXMoJ0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCcpKSB7XG4gICAgICAgIGMrKztcbiAgICAgIH0gLy8gV2UgY291bGRuJ3QgZmluZCBvdXIgaW50ZW50aW9uYWxseSBpbmplY3RlZCBjb21tb24gcm9vdCBmcmFtZSwgYXR0ZW1wdFxuICAgICAgLy8gdG8gZmluZCBhbm90aGVyIGNvbW1vbiByb290IGZyYW1lIGJ5IHNlYXJjaCBmcm9tIHRoZSBib3R0b20gb2YgdGhlXG4gICAgICAvLyBjb250cm9sIHN0YWNrLi4uXG5cblxuICAgICAgaWYgKHMgPT09IHNhbXBsZUxpbmVzLmxlbmd0aCB8fCBjID09PSBjb250cm9sTGluZXMubGVuZ3RoKSB7XG4gICAgICAgIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxuICAgICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgICBjLS07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7IC8vIElmIG91ciBjb21wb25lbnQgZnJhbWUgaXMgbGFiZWxlZCBcIjxhbm9ueW1vdXM+XCJcbiAgICAgICAgICAgICAgICAvLyBidXQgd2UgaGF2ZSBhIHVzZXItcHJvdmlkZWQgXCJkaXNwbGF5TmFtZVwiXG4gICAgICAgICAgICAgICAgLy8gc3BsaWNlIGl0IGluIHRvIG1ha2UgdGhlIHN0YWNrIG1vcmUgcmVhZGFibGUuXG5cblxuICAgICAgICAgICAgICAgIGlmIChmbi5kaXNwbGF5TmFtZSAmJiBfZnJhbWUuaW5jbHVkZXMoJzxhbm9ueW1vdXM+JykpIHtcbiAgICAgICAgICAgICAgICAgIF9mcmFtZSA9IF9mcmFtZS5yZXBsYWNlKCc8YW5vbnltb3VzPicsIGZuLmRpc3BsYXlOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IC8vIFJldHVybiB0aGUgbGluZSB3ZSBmb3VuZC5cblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcmVlbnRyeSA9IGZhbHNlO1xuXG4gICAge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgb3duZXJGbikge1xuICB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGZhbHNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUsIG93bmVyRm4pIHtcblxuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUodHlwZSwgc2hvdWxkQ29uc3RydWN0KHR5cGUpKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUpO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUucmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIC8vIE1lbW8gbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZS50eXBlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihpbml0KHBheWxvYWQpLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbnZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcigncmVhY3QuY2xpZW50LnJlZmVyZW5jZScpO1xudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duO1xudmFyIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duO1xudmFyIGRpZFdhcm5BYm91dFN0cmluZ1JlZnM7XG5cbntcbiAgZGlkV2FybkFib3V0U3RyaW5nUmVmcyA9IHt9O1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZFJlZihjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ3JlZicpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdyZWYnKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLnJlZiAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZEtleShjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2tleScpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdrZXknKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLmtleSAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWYgPT09ICdzdHJpbmcnICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgJiYgc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnN0YXRlTm9kZSAhPT0gc2VsZikge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKTtcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGVycm9yKCdDb21wb25lbnQgXCIlc1wiIGNvbnRhaW5zIHRoZSBzdHJpbmcgcmVmIFwiJXNcIi4gJyArICdTdXBwb3J0IGZvciBzdHJpbmcgcmVmcyB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gJyArICdUaGlzIGNhc2UgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGFuIGFycm93IGZ1bmN0aW9uLiAnICsgJ1dlIGFzayB5b3UgdG8gbWFudWFsbHkgZml4IHRoaXMgY2FzZSBieSB1c2luZyB1c2VSZWYoKSBvciBjcmVhdGVSZWYoKSBpbnN0ZWFkLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZicsIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpLCBjb25maWcucmVmKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHtcbiAgICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2tleScsIHtcbiAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHtcbiAgICB7XG4gICAgICB2YXIgd2FybkFib3V0QWNjZXNzaW5nUmVmID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duKSB7XG4gICAgICAgICAgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAncmVmJywge1xuICAgICAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ1JlZixcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIG5vdCB3b3JrLiBJbnN0ZWFkIHRlc3QgJCR0eXBlb2YgZmllbGQgYWdhaW5zdCBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgdG8gY2hlY2tcbiAqIGlmIHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0geyp9IHByb3BzXG4gKiBAcGFyYW0geyp9IGtleVxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSByZWZcbiAqIEBwYXJhbSB7Kn0gb3duZXJcbiAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRlY3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpc1xuICogZGlmZmVyZW50IGZyb20gdGhlIGBvd25lcmAgd2hlbiBSZWFjdC5jcmVhdGVFbGVtZW50IGlzIGNhbGxlZCwgc28gdGhhdCB3ZVxuICogY2FuIHdhcm4uIFdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBzIHdpdGggYXJyb3dcbiAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25lciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm9cbiAqIGNoYW5nZSBpbiBiZWhhdmlvci5cbiAqIEBwYXJhbSB7Kn0gc291cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRyYW5zcGlsZXIgb3Igb3RoZXJ3aXNlKVxuICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5cblxuZnVuY3Rpb24gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgX3JlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHtcbiAgdmFyIHJlZjtcblxuICB7XG4gICAgcmVmID0gX3JlZjtcbiAgfVxuXG4gIHZhciBlbGVtZW50O1xuXG4gIHtcbiAgICAvLyBJbiBwcm9kLCBgcmVmYCBpcyBhIHJlZ3VsYXIgcHJvcGVydHkuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiBhXG4gICAgLy8gZnV0dXJlIHJlbGVhc2UuXG4gICAgZWxlbWVudCA9IHtcbiAgICAgIC8vIFRoaXMgdGFnIGFsbG93cyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgRWxlbWVudFxuICAgICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAgIC8vIEJ1aWx0LWluIHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhlIGVsZW1lbnRcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBrZXk6IGtleSxcbiAgICAgIHJlZjogcmVmLFxuICAgICAgcHJvcHM6IHByb3BzLFxuICAgICAgLy8gUmVjb3JkIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoaXMgZWxlbWVudC5cbiAgICAgIF9vd25lcjogb3duZXJcbiAgICB9O1xuICB9XG5cbiAge1xuICAgIC8vIFRoZSB2YWxpZGF0aW9uIGZsYWcgaXMgY3VycmVudGx5IG11dGF0aXZlLiBXZSBwdXQgaXQgb25cbiAgICAvLyBhbiBleHRlcm5hbCBiYWNraW5nIHN0b3JlIHNvIHRoYXQgd2UgY2FuIGZyZWV6ZSB0aGUgd2hvbGUgb2JqZWN0LlxuICAgIC8vIFRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBXZWFrTWFwIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW5cbiAgICAvLyBjb21tb25seSB1c2VkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy5cbiAgICBlbGVtZW50Ll9zdG9yZSA9IHt9OyAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xuICAgIC8vIGlnbm9yZXMgaXQuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmYWxzZVxuICAgIH0pOyAvLyBkZWJ1Z0luZm8gY29udGFpbnMgU2VydmVyIENvbXBvbmVudCBkZWJ1ZyBpbmZvcm1hdGlvbi5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX2RlYnVnSW5mbycsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IG51bGxcbiAgICB9KTtcblxuICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJvcHMpO1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cbnZhciBkaWRXYXJuQWJvdXRLZXlTcHJlYWQgPSB7fTtcbi8qKlxuICogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmZjcy9wdWxsLzEwN1xuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqL1xuXG5mdW5jdGlvbiBqc3hERVYkMSh0eXBlLCBjb25maWcsIG1heWJlS2V5LCBpc1N0YXRpY0NoaWxkcmVuLCBzb3VyY2UsIHNlbGYpIHtcbiAge1xuICAgIGlmICghaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpKSB7XG4gICAgICAvLyBUaGlzIGlzIGFuIGludmFsaWQgZWxlbWVudCB0eXBlLlxuICAgICAgLy9cbiAgICAgIC8vIFdlIHdhcm4gaW4gdGhpcyBjYXNlIGJ1dCBkb24ndCB0aHJvdy4gV2UgZXhwZWN0IHRoZSBlbGVtZW50IGNyZWF0aW9uIHRvXG4gICAgICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLlxuICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgbmFtZWQgaW1wb3J0cy5cIjtcbiAgICAgIH1cblxuICAgICAgdmFyIHR5cGVTdHJpbmc7XG5cbiAgICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSAnbnVsbCc7XG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkodHlwZSkpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9ICdhcnJheSc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9IFwiPFwiICsgKGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8ICdVbmtub3duJykgKyBcIiAvPlwiO1xuICAgICAgICBpbmZvID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50Pyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlU3RyaW5nID0gdHlwZW9mIHR5cGU7XG4gICAgICB9XG5cbiAgICAgIGVycm9yKCdSZWFjdC5qc3g6IHR5cGUgaXMgaW52YWxpZCAtLSBleHBlY3RlZCBhIHN0cmluZyAoZm9yICcgKyAnYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSAnICsgJ2NvbXBvbmVudHMpIGJ1dCBnb3Q6ICVzLiVzJywgdHlwZVN0cmluZywgaW5mbyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgYSB2YWxpZCBlbGVtZW50IHR5cGUuXG4gICAgICAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAgICAgLy8gZG9lc24ndCBleHBlY3QgYSBub24tc3RyaW5nL2Z1bmN0aW9uIHR5cGUgYW5kIGNhbiB0aHJvdyBjb25mdXNpbmdcbiAgICAgIC8vIGVycm9ycy4gV2UgZG9uJ3Qgd2FudCBleGNlcHRpb24gYmVoYXZpb3IgdG8gZGlmZmVyIGJldHdlZW4gZGV2IGFuZFxuICAgICAgLy8gcHJvZC4gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlXG4gICAgICAvLyB0eXBlIGlzIGZpeGVkLCB0aGUga2V5IHdhcm5pbmdzIHdpbGwgYXBwZWFyLilcbiAgICAgIHZhciBjaGlsZHJlbiA9IGNvbmZpZy5jaGlsZHJlbjtcblxuICAgICAgaWYgKGNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGlzU3RhdGljQ2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgdmFsaWRhdGVDaGlsZEtleXMoY2hpbGRyZW5baV0sIHR5cGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3IoJ1JlYWN0LmpzeDogU3RhdGljIGNoaWxkcmVuIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXkuICcgKyAnWW91IGFyZSBsaWtlbHkgZXhwbGljaXRseSBjYWxsaW5nIFJlYWN0LmpzeHMgb3IgUmVhY3QuanN4REVWLiAnICsgJ1VzZSB0aGUgQmFiZWwgdHJhbnNmb3JtIGluc3RlYWQuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGNoaWxkcmVuLCB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gV2FybiBhYm91dCBrZXkgc3ByZWFkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgdHlwZSBpcyB2YWxpZC5cblxuXG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhjb25maWcpLmZpbHRlcihmdW5jdGlvbiAoaykge1xuICAgICAgICByZXR1cm4gayAhPT0gJ2tleSc7XG4gICAgICB9KTtcbiAgICAgIHZhciBiZWZvcmVFeGFtcGxlID0ga2V5cy5sZW5ndGggPiAwID8gJ3trZXk6IHNvbWVLZXksICcgKyBrZXlzLmpvaW4oJzogLi4uLCAnKSArICc6IC4uLn0nIDogJ3trZXk6IHNvbWVLZXl9JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRLZXlTcHJlYWRbY29tcG9uZW50TmFtZSArIGJlZm9yZUV4YW1wbGVdKSB7XG4gICAgICAgIHZhciBhZnRlckV4YW1wbGUgPSBrZXlzLmxlbmd0aCA+IDAgPyAneycgKyBrZXlzLmpvaW4oJzogLi4uLCAnKSArICc6IC4uLn0nIDogJ3t9JztcblxuICAgICAgICBlcnJvcignQSBwcm9wcyBvYmplY3QgY29udGFpbmluZyBhIFwia2V5XCIgcHJvcCBpcyBiZWluZyBzcHJlYWQgaW50byBKU1g6XFxuJyArICcgIGxldCBwcm9wcyA9ICVzO1xcbicgKyAnICA8JXMgey4uLnByb3BzfSAvPlxcbicgKyAnUmVhY3Qga2V5cyBtdXN0IGJlIHBhc3NlZCBkaXJlY3RseSB0byBKU1ggd2l0aG91dCB1c2luZyBzcHJlYWQ6XFxuJyArICcgIGxldCBwcm9wcyA9ICVzO1xcbicgKyAnICA8JXMga2V5PXtzb21lS2V5fSB7Li4ucHJvcHN9IC8+JywgYmVmb3JlRXhhbXBsZSwgY29tcG9uZW50TmFtZSwgYWZ0ZXJFeGFtcGxlLCBjb21wb25lbnROYW1lKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRLZXlTcHJlYWRbY29tcG9uZW50TmFtZSArIGJlZm9yZUV4YW1wbGVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJvcE5hbWU7IC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0ZWRcblxuICAgIHZhciBwcm9wcyA9IHt9O1xuICAgIHZhciBrZXkgPSBudWxsO1xuICAgIHZhciByZWYgPSBudWxsOyAvLyBDdXJyZW50bHksIGtleSBjYW4gYmUgc3ByZWFkIGluIGFzIGEgcHJvcC4gVGhpcyBjYXVzZXMgYSBwb3RlbnRpYWxcbiAgICAvLyBpc3N1ZSBpZiBrZXkgaXMgYWxzbyBleHBsaWNpdGx5IGRlY2xhcmVkIChpZS4gPGRpdiB7Li4ucHJvcHN9IGtleT1cIkhpXCIgLz5cbiAgICAvLyBvciA8ZGl2IGtleT1cIkhpXCIgey4uLnByb3BzfSAvPiApLiBXZSB3YW50IHRvIGRlcHJlY2F0ZSBrZXkgc3ByZWFkLFxuICAgIC8vIGJ1dCBhcyBhbiBpbnRlcm1lZGlhcnkgc3RlcCwgd2Ugd2lsbCB1c2UganN4REVWIGZvciBldmVyeXRoaW5nIGV4Y2VwdFxuICAgIC8vIDxkaXYgey4uLnByb3BzfSBrZXk9XCJIaVwiIC8+LCBiZWNhdXNlIHdlIGFyZW4ndCBjdXJyZW50bHkgYWJsZSB0byB0ZWxsIGlmXG4gICAgLy8ga2V5IGlzIGV4cGxpY2l0bHkgZGVjbGFyZWQgdG8gYmUgdW5kZWZpbmVkIG9yIG5vdC5cblxuICAgIGlmIChtYXliZUtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB7XG4gICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24obWF5YmVLZXkpO1xuICAgICAgfVxuXG4gICAgICBrZXkgPSAnJyArIG1heWJlS2V5O1xuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICB7XG4gICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oY29uZmlnLmtleSk7XG4gICAgICB9XG5cbiAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTtcbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAge1xuICAgICAgICByZWYgPSBjb25maWcucmVmO1xuICAgICAgfVxuXG4gICAgICB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKTtcbiAgICB9IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcblxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmIC8vIFNraXAgb3ZlciByZXNlcnZlZCBwcm9wIG5hbWVzXG4gICAgICBwcm9wTmFtZSAhPT0gJ2tleScgJiYgKHByb3BOYW1lICE9PSAncmVmJykpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuXG5cbiAgICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykge1xuICAgICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuXG4gICAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleSB8fCByZWYpIHtcbiAgICAgIHZhciBkaXNwbGF5TmFtZSA9IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nID8gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgJ1Vua25vd24nIDogdHlwZTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnQgPSBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCwgcHJvcHMpO1xuXG4gICAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhlbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIHtcbiAgICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKTtcblxuICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufVxuLyoqXG4gKiBFbnN1cmUgdGhhdCBldmVyeSBlbGVtZW50IGVpdGhlciBpcyBwYXNzZWQgaW4gYSBzdGF0aWMgbG9jYXRpb24sIGluIGFuXG4gKiBhcnJheSB3aXRoIGFuIGV4cGxpY2l0IGtleXMgcHJvcGVydHkgZGVmaW5lZCwgb3IgaW4gYW4gb2JqZWN0IGxpdGVyYWxcbiAqIHdpdGggdmFsaWQga2V5IHByb3BlcnR5LlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGljYWxseSBwYXNzZWQgY2hpbGQgb2YgYW55IHR5cGUuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgbm9kZSdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlLCBwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnIHx8ICFub2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UpIDsgZWxzZSBpZiAoaXNBcnJheShub2RlKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG5cbiAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChub2RlKSkge1xuICAgICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICAgIGlmIChub2RlLl9zdG9yZSkge1xuICAgICAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBFbnRyeSBpdGVyYXRvcnMgdXNlZCB0byBwcm92aWRlIGltcGxpY2l0IGtleXMsXG4gICAgICAgIC8vIGJ1dCBub3cgd2UgcHJpbnQgYSBzZXBhcmF0ZSB3YXJuaW5nIGZvciB0aGVtIGxhdGVyLlxuICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG5vZGUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuXG4gICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIFZlcmlmaWVzIHRoZSBvYmplY3QgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2lzdmFsaWRlbGVtZW50XG4gKiBAcGFyYW0gez9vYmplY3R9IG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIEBmaW5hbFxuICovXG5cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG4vKipcbiAqIFdhcm4gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGtleSBhc3NpZ25lZCB0byBpdC5cbiAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBhcnJheS4gVGhlIGFycmF5IGNvdWxkIGdyb3cgYW5kIHNocmluayBvciBiZVxuICogcmVvcmRlcmVkLiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJlcXVpcmVkIHRvXG4gKiBoYXZlIGEgXCJrZXlcIiBwcm9wZXJ0eSBhc3NpZ25lZCB0byBpdC4gRXJyb3Igc3RhdHVzZXMgYXJlIGNhY2hlZCBzbyBhIHdhcm5pbmdcbiAqIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0aGF0IHJlcXVpcmVzIGEga2V5LlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLlxuICovXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICB7XG4gICAgaWYgKCFlbGVtZW50Ll9zdG9yZSB8fCBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgfHwgZWxlbWVudC5rZXkgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpO1xuXG4gICAgaWYgKG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSA9IHRydWU7IC8vIFVzdWFsbHkgdGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIG9mZmVuZGVyLCBidXQgaWYgaXQgYWNjZXB0cyBjaGlsZHJlbiBhcyBhXG4gICAgLy8gcHJvcGVydHksIGl0IG1heSBiZSB0aGUgY3JlYXRvciBvZiB0aGUgY2hpbGQgdGhhdCdzIHJlc3BvbnNpYmxlIGZvclxuICAgIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cblxuICAgIHZhciBjaGlsZE93bmVyID0gJyc7XG5cbiAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9vd25lciAhPT0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgICAgLy8gR2l2ZSB0aGUgY29tcG9uZW50IHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuXG4gICAgICBjaGlsZE93bmVyID0gXCIgSXQgd2FzIHBhc3NlZCBhIGNoaWxkIGZyb20gXCIgKyBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoZWxlbWVudC5fb3duZXIudHlwZSkgKyBcIi5cIjtcbiAgICB9XG5cbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgIGVycm9yKCdFYWNoIGNoaWxkIGluIGEgbGlzdCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBcImtleVwiIHByb3AuJyArICclcyVzIFNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd2FybmluZy1rZXlzIGZvciBtb3JlIGluZm9ybWF0aW9uLicsIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8sIGNoaWxkT3duZXIpO1xuXG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLnNldEV4dHJhU3RhY2tGcmFtZShzdGFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpIHtcbiAge1xuICAgIHZhciBpbmZvID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG5cbiAgICBpZiAoIWluZm8pIHtcbiAgICAgIHZhciBwYXJlbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHBhcmVudFR5cGUpO1xuXG4gICAgICBpZiAocGFyZW50TmFtZSkge1xuICAgICAgICBpbmZvID0gXCJcXG5cXG5DaGVjayB0aGUgdG9wLWxldmVsIHJlbmRlciBjYWxsIHVzaW5nIDxcIiArIHBhcmVudE5hbWUgKyBcIj4uXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZm87XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gYSBmcmFnbWVudCwgdmFsaWRhdGUgdGhhdCBpdCBjYW4gb25seSBiZSBwcm92aWRlZCB3aXRoIGZyYWdtZW50IHByb3BzXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZnJhZ21lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhmcmFnbWVudCkge1xuICAvLyBUT0RPOiBNb3ZlIHRoaXMgdG8gcmVuZGVyIHBoYXNlIGluc3RlYWQgb2YgYXQgZWxlbWVudCBjcmVhdGlvbi5cbiAge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZnJhZ21lbnQucHJvcHMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKGtleSAhPT0gJ2NoaWxkcmVuJyAmJiBrZXkgIT09ICdrZXknKSB7XG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGZyYWdtZW50KTtcblxuICAgICAgICBlcnJvcignSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gJyArICdSZWFjdC5GcmFnbWVudCBjYW4gb25seSBoYXZlIGBrZXlgIGFuZCBgY2hpbGRyZW5gIHByb3BzLicsIGtleSk7XG5cbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmcmFnbWVudC5yZWYgIT09IG51bGwpIHtcbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGZyYWdtZW50KTtcblxuICAgICAgZXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIGByZWZgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuJyk7XG5cbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG52YXIganN4REVWID0ganN4REVWJDEgO1xuXG5leHBvcnRzLkZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbmV4cG9ydHMuanN4REVWID0ganN4REVWO1xuICB9KSgpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js":
/*!******************************************************************!*\
!*** ./node_modules/next/dist/compiled/react/jsx-dev-runtime.js ***!
\******************************************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-jsx-dev-runtime.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LWRldi1ydW50aW1lLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQyxDQUFDO0FBQ0YsRUFBRSw4TEFBc0U7QUFDeEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC9qc3gtZGV2LXJ1bnRpbWUuanM/OTY3YSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LWRldi1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js":
/*!*********************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js ***!
\*********************************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ _arrayLikeToArray; }\n/* harmony export */ });\nfunction _arrayLikeToArray(r, a) {\n (null == a || a > r.length) && (a = r.length);\n for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n return n;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0EsZ0NBQWdDLE9BQU87QUFDdkM7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlMaWtlVG9BcnJheS5qcz85ZTYzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHtcbiAgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpO1xuICBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTtcbiAgcmV0dXJuIG47XG59XG5leHBvcnQgeyBfYXJyYXlMaWtlVG9BcnJheSBhcyBkZWZhdWx0IH07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js":
/*!*******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js ***!
\*******************************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ _arrayWithHoles; }\n/* harmony export */ });\nfunction _arrayWithHoles(r) {\n if (Array.isArray(r)) return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheVdpdGhIb2xlcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheVdpdGhIb2xlcy5qcz82MzM5Il0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjtcbn1cbmV4cG9ydCB7IF9hcnJheVdpdGhIb2xlcyBhcyBkZWZhdWx0IH07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js":
/*!*************************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js ***!
\*************************************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ _iterableToArrayLimit; }\n/* harmony export */ });\nfunction _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsWUFBWSxrRUFBa0U7QUFDdEYsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcz8yMTVlIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7XG4gIHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07XG4gIGlmIChudWxsICE9IHQpIHtcbiAgICB2YXIgZSxcbiAgICAgIG4sXG4gICAgICBpLFxuICAgICAgdSxcbiAgICAgIGEgPSBbXSxcbiAgICAgIGYgPSAhMCxcbiAgICAgIG8gPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkge1xuICAgICAgICBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47XG4gICAgICAgIGYgPSAhMTtcbiAgICAgIH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICBvID0gITAsIG4gPSByO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWYgJiYgbnVsbCAhPSB0W1wicmV0dXJuXCJdICYmICh1ID0gdFtcInJldHVyblwiXSgpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAobykgdGhyb3cgbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGE7XG4gIH1cbn1cbmV4cG9ydCB7IF9pdGVyYWJsZVRvQXJyYXlMaW1pdCBhcyBkZWZhdWx0IH07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js":
/*!********************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js ***!
\********************************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ _nonIterableRest; }\n/* harmony export */ });\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVJlc3QuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzP2ZkOWEiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbmV4cG9ydCB7IF9ub25JdGVyYWJsZVJlc3QgYXMgZGVmYXVsdCB9OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/@babel/runtime/helpers/esm/slicedToArray.js":
/*!******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js ***!
\******************************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ _slicedToArray; }\n/* harmony export */ });\n/* harmony import */ var _arrayWithHoles_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayWithHoles.js */ \"(app-pages-browser)/./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js\");\n/* harmony import */ var _iterableToArrayLimit_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iterableToArrayLimit.js */ \"(app-pages-browser)/./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js\");\n/* harmony import */ var _unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./unsupportedIterableToArray.js */ \"(app-pages-browser)/./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js\");\n/* harmony import */ var _nonIterableRest_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./nonIterableRest.js */ \"(app-pages-browser)/./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js\");\n\n\n\n\nfunction _slicedToArray(r, e) {\n return (0,_arrayWithHoles_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(r) || (0,_iterableToArrayLimit_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(r, e) || (0,_unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(r, e) || (0,_nonIterableRest_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQWlEO0FBQ1k7QUFDWTtBQUN0QjtBQUNuRDtBQUNBLFNBQVMsOERBQWMsT0FBTyxvRUFBb0IsVUFBVSwwRUFBMEIsVUFBVSwrREFBZTtBQUMvRyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcz83Nzk1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcnJheVdpdGhIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheUxpbWl0IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVJlc3QgZnJvbSBcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCI7XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn1cbmV4cG9ydCB7IF9zbGljZWRUb0FycmF5IGFzIGRlZmF1bHQgfTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@babel/runtime/helpers/esm/slicedToArray.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/@babel/runtime/helpers/esm/typeof.js":
/*!***********************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/typeof.js ***!
\***********************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ _typeof; }\n/* harmony export */ });\nfunction _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzPzliODYiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn1cbmV4cG9ydCB7IF90eXBlb2YgYXMgZGVmYXVsdCB9OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@babel/runtime/helpers/esm/typeof.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js":
/*!*******************************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js ***!
\*******************************************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ _unsupportedIterableToArray; }\n/* harmony export */ });\n/* harmony import */ var _arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayLikeToArray.js */ \"(app-pages-browser)/./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js\");\n\nfunction _unsupportedIterableToArray(r, a) {\n if (r) {\n if (\"string\" == typeof r) return (0,_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(r, a);\n var t = {}.toString.call(r).slice(8, -1);\n return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? (0,_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(r, a) : void 0;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFxRDtBQUNyRDtBQUNBO0FBQ0EscUNBQXFDLGdFQUFnQjtBQUNyRCxjQUFjO0FBQ2QsK0xBQStMLGdFQUFnQjtBQUMvTTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcz84NDhkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7XG4gIGlmIChyKSB7XG4gICAgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KHIsIGEpO1xuICAgIHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7XG4gICAgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDtcbiAgfVxufVxuZXhwb3J0IHsgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGFzIGRlZmF1bHQgfTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/jspdf-autotable/dist/jspdf.plugin.autotable.mjs":
/*!**********************************************************************!*\
!*** ./node_modules/jspdf-autotable/dist/jspdf.plugin.autotable.mjs ***!
\**********************************************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Cell: function() { return /* binding */ Cell; },\n/* harmony export */ CellHookData: function() { return /* binding */ CellHookData; },\n/* harmony export */ Column: function() { return /* binding */ Column; },\n/* harmony export */ HookData: function() { return /* binding */ HookData; },\n/* harmony export */ Row: function() { return /* binding */ Row; },\n/* harmony export */ Table: function() { return /* binding */ Table; },\n/* harmony export */ __createTable: function() { return /* binding */ __createTable; },\n/* harmony export */ __drawTable: function() { return /* binding */ __drawTable; },\n/* harmony export */ applyPlugin: function() { return /* binding */ applyPlugin; },\n/* harmony export */ autoTable: function() { return /* binding */ autoTable; },\n/* harmony export */ \"default\": function() { return /* binding */ autoTable; }\n/* harmony export */ });\n/**\n * Improved text function with halign and valign support\n * Inspiration from: http://stackoverflow.com/questions/28327510/align-text-right-using-jspdf/28433113#28433113\n */\nfunction autoTableText (text, x, y, styles, doc) {\n styles = styles || {};\n var PHYSICAL_LINE_HEIGHT = 1.15;\n var k = doc.internal.scaleFactor;\n var fontSize = doc.internal.getFontSize() / k;\n var lineHeightFactor = doc.getLineHeightFactor\n ? doc.getLineHeightFactor()\n : PHYSICAL_LINE_HEIGHT;\n var lineHeight = fontSize * lineHeightFactor;\n var splitRegex = /\\r\\n|\\r|\\n/g;\n var splitText = '';\n var lineCount = 1;\n if (styles.valign === 'middle' ||\n styles.valign === 'bottom' ||\n styles.halign === 'center' ||\n styles.halign === 'right') {\n splitText = typeof text === 'string' ? text.split(splitRegex) : text;\n lineCount = splitText.length || 1;\n }\n // Align the top\n y += fontSize * (2 - PHYSICAL_LINE_HEIGHT);\n if (styles.valign === 'middle')\n y -= (lineCount / 2) * lineHeight;\n else if (styles.valign === 'bottom')\n y -= lineCount * lineHeight;\n if (styles.halign === 'center' || styles.halign === 'right') {\n var alignSize = fontSize;\n if (styles.halign === 'center')\n alignSize *= 0.5;\n if (splitText && lineCount >= 1) {\n for (var iLine = 0; iLine < splitText.length; iLine++) {\n doc.text(splitText[iLine], x - doc.getStringUnitWidth(splitText[iLine]) * alignSize, y);\n y += lineHeight;\n }\n return doc;\n }\n x -= doc.getStringUnitWidth(text) * alignSize;\n }\n if (styles.halign === 'justify') {\n doc.text(text, x, y, { maxWidth: styles.maxWidth || 100, align: 'justify' });\n }\n else {\n doc.text(text, x, y);\n }\n return doc;\n}\n\nvar globalDefaults = {};\nvar DocHandler = /** @class */ (function () {\n function DocHandler(jsPDFDocument) {\n this.jsPDFDocument = jsPDFDocument;\n this.userStyles = {\n // Black for versions of jspdf without getTextColor\n textColor: jsPDFDocument.getTextColor\n ? this.jsPDFDocument.getTextColor()\n : 0,\n fontSize: jsPDFDocument.internal.getFontSize(),\n fontStyle: jsPDFDocument.internal.getFont().fontStyle,\n font: jsPDFDocument.internal.getFont().fontName,\n // 0 for versions of jspdf without getLineWidth\n lineWidth: jsPDFDocument.getLineWidth\n ? this.jsPDFDocument.getLineWidth()\n : 0,\n // Black for versions of jspdf without getDrawColor\n lineColor: jsPDFDocument.getDrawColor\n ? this.jsPDFDocument.getDrawColor()\n : 0,\n };\n }\n DocHandler.setDefaults = function (defaults, doc) {\n if (doc === void 0) { doc = null; }\n if (doc) {\n doc.__autoTableDocumentDefaults = defaults;\n }\n else {\n globalDefaults = defaults;\n }\n };\n DocHandler.unifyColor = function (c) {\n if (Array.isArray(c)) {\n return c;\n }\n else if (typeof c === 'number') {\n return [c, c, c];\n }\n else if (typeof c === 'string') {\n return [c];\n }\n else {\n return null;\n }\n };\n DocHandler.prototype.applyStyles = function (styles, fontOnly) {\n // Font style needs to be applied before font\n // https://github.com/simonbengtsson/jsPDF-AutoTable/issues/632\n var _a, _b, _c;\n if (fontOnly === void 0) { fontOnly = false; }\n if (styles.fontStyle && this.jsPDFDocument.setFontStyle) {\n this.jsPDFDocument.setFontStyle(styles.fontStyle);\n }\n var _d = this.jsPDFDocument.internal.getFont(), fontStyle = _d.fontStyle, fontName = _d.fontName;\n if (styles.font)\n fontName = styles.font;\n if (styles.fontStyle) {\n fontStyle = styles.fontStyle;\n var availableFontStyles = this.getFontList()[fontName];\n if (availableFontStyles &&\n availableFontStyles.indexOf(fontStyle) === -1 &&\n this.jsPDFDocument.setFontStyle) {\n // Common issue was that the default bold in headers\n // made custom fonts not work. For example:\n // https://github.com/simonbengtsson/jsPDF-AutoTable/issues/653\n this.jsPDFDocument.setFontStyle(availableFontStyles[0]);\n fontStyle = availableFontStyles[0];\n }\n }\n this.jsPDFDocument.setFont(fontName, fontStyle);\n if (styles.fontSize)\n this.jsPDFDocument.setFontSize(styles.fontSize);\n if (fontOnly) {\n return; // Performance improvement\n }\n var color = DocHandler.unifyColor(styles.fillColor);\n if (color)\n (_a = this.jsPDFDocument).setFillColor.apply(_a, color);\n color = DocHandler.unifyColor(styles.textColor);\n if (color)\n (_b = this.jsPDFDocument).setTextColor.apply(_b, color);\n color = DocHandler.unifyColor(styles.lineColor);\n if (color)\n (_c = this.jsPDFDocument).setDrawColor.apply(_c, color);\n if (typeof styles.lineWidth === 'number') {\n this.jsPDFDocument.setLineWidth(styles.lineWidth);\n }\n };\n DocHandler.prototype.splitTextToSize = function (text, size, opts) {\n return this.jsPDFDocument.splitTextToSize(text, size, opts);\n };\n /**\n * Adds a rectangle to the PDF\n * @param x Coordinate (in units declared at inception of PDF document) against left edge of the page\n * @param y Coordinate (in units declared at inception of PDF document) against upper edge of the page\n * @param width Width (in units declared at inception of PDF document)\n * @param height Height (in units declared at inception of PDF document)\n * @param fillStyle A string specifying the painting style or null. Valid styles include: 'S' [default] - stroke, 'F' - fill, and 'DF' (or 'FD') - fill then stroke.\n */\n DocHandler.prototype.rect = function (x, y, width, height, fillStyle) {\n // null is excluded from fillStyle possible values because it isn't needed\n // and is prone to bugs as it's used to postpone setting the style\n // https://rawgit.com/MrRio/jsPDF/master/docs/jsPDF.html#rect\n return this.jsPDFDocument.rect(x, y, width, height, fillStyle);\n };\n DocHandler.prototype.getLastAutoTable = function () {\n return this.jsPDFDocument.lastAutoTable || null;\n };\n DocHandler.prototype.getTextWidth = function (text) {\n return this.jsPDFDocument.getTextWidth(text);\n };\n DocHandler.prototype.getDocument = function () {\n return this.jsPDFDocument;\n };\n DocHandler.prototype.setPage = function (page) {\n this.jsPDFDocument.setPage(page);\n };\n DocHandler.prototype.addPage = function () {\n return this.jsPDFDocument.addPage();\n };\n DocHandler.prototype.getFontList = function () {\n return this.jsPDFDocument.getFontList();\n };\n DocHandler.prototype.getGlobalOptions = function () {\n return globalDefaults || {};\n };\n DocHandler.prototype.getDocumentOptions = function () {\n return this.jsPDFDocument.__autoTableDocumentDefaults || {};\n };\n DocHandler.prototype.pageSize = function () {\n var pageSize = this.jsPDFDocument.internal.pageSize;\n // JSPDF 1.4 uses get functions instead of properties on pageSize\n if (pageSize.width == null) {\n pageSize = { width: pageSize.getWidth(), height: pageSize.getHeight() };\n }\n return pageSize;\n };\n DocHandler.prototype.scaleFactor = function () {\n return this.jsPDFDocument.internal.scaleFactor;\n };\n DocHandler.prototype.getLineHeightFactor = function () {\n var doc = this.jsPDFDocument;\n return doc.getLineHeightFactor ? doc.getLineHeightFactor() : 1.15;\n };\n DocHandler.prototype.getLineHeight = function (fontSize) {\n return (fontSize / this.scaleFactor()) * this.getLineHeightFactor();\n };\n DocHandler.prototype.pageNumber = function () {\n var pageInfo = this.jsPDFDocument.internal.getCurrentPageInfo();\n if (!pageInfo) {\n // Only recent versions of jspdf has pageInfo\n return this.jsPDFDocument.internal.getNumberOfPages();\n }\n return pageInfo.pageNumber;\n };\n return DocHandler;\n}());\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nvar HtmlRowInput = /** @class */ (function (_super) {\n __extends(HtmlRowInput, _super);\n function HtmlRowInput(element) {\n var _this = _super.call(this) || this;\n _this._element = element;\n return _this;\n }\n return HtmlRowInput;\n}(Array));\n// Base style for all themes\nfunction defaultStyles(scaleFactor) {\n return {\n font: 'helvetica', // helvetica, times, courier\n fontStyle: 'normal', // normal, bold, italic, bolditalic\n overflow: 'linebreak', // linebreak, ellipsize, visible or hidden\n fillColor: false, // Either false for transparent, rbg array e.g. [255, 255, 255] or gray level e.g 200\n textColor: 20,\n halign: 'left', // left, center, right, justify\n valign: 'top', // top, middle, bottom\n fontSize: 10,\n cellPadding: 5 / scaleFactor, // number or {top,left,right,left,vertical,horizontal}\n lineColor: 200,\n lineWidth: 0,\n cellWidth: 'auto', // 'auto'|'wrap'|number\n minCellHeight: 0,\n minCellWidth: 0,\n };\n}\nfunction getTheme(name) {\n var themes = {\n striped: {\n table: { fillColor: 255, textColor: 80, fontStyle: 'normal' },\n head: { textColor: 255, fillColor: [41, 128, 185], fontStyle: 'bold' },\n body: {},\n foot: { textColor: 255, fillColor: [41, 128, 185], fontStyle: 'bold' },\n alternateRow: { fillColor: 245 },\n },\n grid: {\n table: {\n fillColor: 255,\n textColor: 80,\n fontStyle: 'normal',\n lineWidth: 0.1,\n },\n head: {\n textColor: 255,\n fillColor: [26, 188, 156],\n fontStyle: 'bold',\n lineWidth: 0,\n },\n body: {},\n foot: {\n textColor: 255,\n fillColor: [26, 188, 156],\n fontStyle: 'bold',\n lineWidth: 0,\n },\n alternateRow: {},\n },\n plain: { head: { fontStyle: 'bold' }, foot: { fontStyle: 'bold' } },\n };\n return themes[name];\n}\n\nfunction getStringWidth(text, styles, doc) {\n doc.applyStyles(styles, true);\n var textArr = Array.isArray(text) ? text : [text];\n var widestLineWidth = textArr\n .map(function (text) { return doc.getTextWidth(text); })\n .reduce(function (a, b) { return Math.max(a, b); }, 0);\n return widestLineWidth;\n}\nfunction addTableBorder(doc, table, startPos, cursor) {\n var lineWidth = table.settings.tableLineWidth;\n var lineColor = table.settings.tableLineColor;\n doc.applyStyles({ lineWidth: lineWidth, lineColor: lineColor });\n var fillStyle = getFillStyle(lineWidth, false);\n if (fillStyle) {\n doc.rect(startPos.x, startPos.y, table.getWidth(doc.pageSize().width), cursor.y - startPos.y, fillStyle);\n }\n}\nfunction getFillStyle(lineWidth, fillColor) {\n var drawLine = lineWidth > 0;\n var drawBackground = fillColor || fillColor === 0;\n if (drawLine && drawBackground) {\n return 'DF'; // Fill then stroke\n }\n else if (drawLine) {\n return 'S'; // Only stroke (transparent background)\n }\n else if (drawBackground) {\n return 'F'; // Only fill, no stroke\n }\n else {\n return null;\n }\n}\nfunction parseSpacing(value, defaultValue) {\n var _a, _b, _c, _d;\n value = value || defaultValue;\n if (Array.isArray(value)) {\n if (value.length >= 4) {\n return {\n top: value[0],\n right: value[1],\n bottom: value[2],\n left: value[3],\n };\n }\n else if (value.length === 3) {\n return {\n top: value[0],\n right: value[1],\n bottom: value[2],\n left: value[1],\n };\n }\n else if (value.length === 2) {\n return {\n top: value[0],\n right: value[1],\n bottom: value[0],\n left: value[1],\n };\n }\n else if (value.length === 1) {\n value = value[0];\n }\n else {\n value = defaultValue;\n }\n }\n if (typeof value === 'object') {\n if (typeof value.vertical === 'number') {\n value.top = value.vertical;\n value.bottom = value.vertical;\n }\n if (typeof value.horizontal === 'number') {\n value.right = value.horizontal;\n value.left = value.horizontal;\n }\n return {\n left: (_a = value.left) !== null && _a !== void 0 ? _a : defaultValue,\n top: (_b = value.top) !== null && _b !== void 0 ? _b : defaultValue,\n right: (_c = value.right) !== null && _c !== void 0 ? _c : defaultValue,\n bottom: (_d = value.bottom) !== null && _d !== void 0 ? _d : defaultValue,\n };\n }\n if (typeof value !== 'number') {\n value = defaultValue;\n }\n return { top: value, right: value, bottom: value, left: value };\n}\nfunction getPageAvailableWidth(doc, table) {\n var margins = parseSpacing(table.settings.margin, 0);\n return doc.pageSize().width - (margins.left + margins.right);\n}\n\n// Limitations\n// - No support for border spacing\n// - No support for transparency\nfunction parseCss(supportedFonts, element, scaleFactor, style, window) {\n var result = {};\n var pxScaleFactor = 96 / 72;\n var backgroundColor = parseColor(element, function (elem) {\n return window.getComputedStyle(elem)['backgroundColor'];\n });\n if (backgroundColor != null)\n result.fillColor = backgroundColor;\n var textColor = parseColor(element, function (elem) {\n return window.getComputedStyle(elem)['color'];\n });\n if (textColor != null)\n result.textColor = textColor;\n var padding = parsePadding(style, scaleFactor);\n if (padding)\n result.cellPadding = padding;\n var borderColorSide = 'borderTopColor';\n var finalScaleFactor = pxScaleFactor * scaleFactor;\n var btw = style.borderTopWidth;\n if (style.borderBottomWidth === btw &&\n style.borderRightWidth === btw &&\n style.borderLeftWidth === btw) {\n var borderWidth = (parseFloat(btw) || 0) / finalScaleFactor;\n if (borderWidth)\n result.lineWidth = borderWidth;\n }\n else {\n result.lineWidth = {\n top: (parseFloat(style.borderTopWidth) || 0) / finalScaleFactor,\n right: (parseFloat(style.borderRightWidth) || 0) / finalScaleFactor,\n bottom: (parseFloat(style.borderBottomWidth) || 0) / finalScaleFactor,\n left: (parseFloat(style.borderLeftWidth) || 0) / finalScaleFactor,\n };\n // Choose border color of first available side\n // could be improved by supporting object as lineColor\n if (!result.lineWidth.top) {\n if (result.lineWidth.right) {\n borderColorSide = 'borderRightColor';\n }\n else if (result.lineWidth.bottom) {\n borderColorSide = 'borderBottomColor';\n }\n else if (result.lineWidth.left) {\n borderColorSide = 'borderLeftColor';\n }\n }\n }\n var borderColor = parseColor(element, function (elem) {\n return window.getComputedStyle(elem)[borderColorSide];\n });\n if (borderColor != null)\n result.lineColor = borderColor;\n var accepted = ['left', 'right', 'center', 'justify'];\n if (accepted.indexOf(style.textAlign) !== -1) {\n result.halign = style.textAlign;\n }\n accepted = ['middle', 'bottom', 'top'];\n if (accepted.indexOf(style.verticalAlign) !== -1) {\n result.valign = style.verticalAlign;\n }\n var res = parseInt(style.fontSize || '');\n if (!isNaN(res))\n result.fontSize = res / pxScaleFactor;\n var fontStyle = parseFontStyle(style);\n if (fontStyle)\n result.fontStyle = fontStyle;\n var font = (style.fontFamily || '').toLowerCase();\n if (supportedFonts.indexOf(font) !== -1) {\n result.font = font;\n }\n return result;\n}\nfunction parseFontStyle(style) {\n var res = '';\n if (style.fontWeight === 'bold' ||\n style.fontWeight === 'bolder' ||\n parseInt(style.fontWeight) >= 700) {\n res = 'bold';\n }\n if (style.fontStyle === 'italic' || style.fontStyle === 'oblique') {\n res += 'italic';\n }\n return res;\n}\nfunction parseColor(element, styleGetter) {\n var cssColor = realColor(element, styleGetter);\n if (!cssColor)\n return null;\n var rgba = cssColor.match(/^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*(\\d*\\.?\\d*))?\\)$/);\n if (!rgba || !Array.isArray(rgba)) {\n return null;\n }\n var color = [\n parseInt(rgba[1]),\n parseInt(rgba[2]),\n parseInt(rgba[3]),\n ];\n var alpha = parseInt(rgba[4]);\n if (alpha === 0 || isNaN(color[0]) || isNaN(color[1]) || isNaN(color[2])) {\n return null;\n }\n return color;\n}\nfunction realColor(elem, styleGetter) {\n var bg = styleGetter(elem);\n if (bg === 'rgba(0, 0, 0, 0)' ||\n bg === 'transparent' ||\n bg === 'initial' ||\n bg === 'inherit') {\n if (elem.parentElement == null) {\n return null;\n }\n return realColor(elem.parentElement, styleGetter);\n }\n else {\n return bg;\n }\n}\nfunction parsePadding(style, scaleFactor) {\n var val = [\n style.paddingTop,\n style.paddingRight,\n style.paddingBottom,\n style.paddingLeft,\n ];\n var pxScaleFactor = 96 / (72 / scaleFactor);\n var linePadding = (parseInt(style.lineHeight) - parseInt(style.fontSize)) / scaleFactor / 2;\n var inputPadding = val.map(function (n) {\n return parseInt(n || '0') / pxScaleFactor;\n });\n var padding = parseSpacing(inputPadding, 0);\n if (linePadding > padding.top) {\n padding.top = linePadding;\n }\n if (linePadding > padding.bottom) {\n padding.bottom = linePadding;\n }\n return padding;\n}\n\nfunction parseHtml(doc, input, window, includeHiddenHtml, useCss) {\n var _a, _b;\n if (includeHiddenHtml === void 0) { includeHiddenHtml = false; }\n if (useCss === void 0) { useCss = false; }\n var tableElement;\n if (typeof input === 'string') {\n tableElement = window.document.querySelector(input);\n }\n else {\n tableElement = input;\n }\n var supportedFonts = Object.keys(doc.getFontList());\n var scaleFactor = doc.scaleFactor();\n var head = [], body = [], foot = [];\n if (!tableElement) {\n console.error('Html table could not be found with input: ', input);\n return { head: head, body: body, foot: foot };\n }\n for (var i = 0; i < tableElement.rows.length; i++) {\n var element = tableElement.rows[i];\n var tagName = (_b = (_a = element === null || element === void 0 ? void 0 : element.parentElement) === null || _a === void 0 ? void 0 : _a.tagName) === null || _b === void 0 ? void 0 : _b.toLowerCase();\n var row = parseRowContent(supportedFonts, scaleFactor, window, element, includeHiddenHtml, useCss);\n if (!row)\n continue;\n if (tagName === 'thead') {\n head.push(row);\n }\n else if (tagName === 'tfoot') {\n foot.push(row);\n }\n else {\n // Add to body both if parent is tbody or table\n body.push(row);\n }\n }\n return { head: head, body: body, foot: foot };\n}\nfunction parseRowContent(supportedFonts, scaleFactor, window, row, includeHidden, useCss) {\n var resultRow = new HtmlRowInput(row);\n for (var i = 0; i < row.cells.length; i++) {\n var cell = row.cells[i];\n var style_1 = window.getComputedStyle(cell);\n if (includeHidden || style_1.display !== 'none') {\n var cellStyles = void 0;\n if (useCss) {\n cellStyles = parseCss(supportedFonts, cell, scaleFactor, style_1, window);\n }\n resultRow.push({\n rowSpan: cell.rowSpan,\n colSpan: cell.colSpan,\n styles: cellStyles,\n _element: cell,\n content: parseCellContent(cell),\n });\n }\n }\n var style = window.getComputedStyle(row);\n if (resultRow.length > 0 && (includeHidden || style.display !== 'none')) {\n return resultRow;\n }\n}\nfunction parseCellContent(orgCell) {\n // Work on cloned node to make sure no changes are applied to html table\n var cell = orgCell.cloneNode(true);\n // Remove extra space and line breaks in markup to make it more similar to\n // what would be shown in html\n cell.innerHTML = cell.innerHTML.replace(/\\n/g, '').replace(/ +/g, ' ');\n // Preserve <br> tags as line breaks in the pdf\n cell.innerHTML = cell.innerHTML\n .split(/<br.*?>/) //start with '<br' and ends with '>'.\n .map(function (part) { return part.trim(); })\n .join('\\n');\n // innerText for ie\n return cell.innerText || cell.textContent || '';\n}\n\nfunction validateInput(global, document, current) {\n for (var _i = 0, _a = [global, document, current]; _i < _a.length; _i++) {\n var options = _a[_i];\n if (options && typeof options !== 'object') {\n console.error('The options parameter should be of type object, is: ' + typeof options);\n }\n if (options.startY && typeof options.startY !== 'number') {\n console.error('Invalid value for startY option', options.startY);\n delete options.startY;\n }\n }\n}\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\nfunction assign(target, s, s1, s2, s3) {\n if (target == null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n var to = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n // eslint-disable-next-line prefer-rest-params\n var nextSource = arguments[index];\n if (nextSource != null) {\n // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n}\n\nfunction parseInput(d, current) {\n var doc = new DocHandler(d);\n var document = doc.getDocumentOptions();\n var global = doc.getGlobalOptions();\n validateInput(global, document, current);\n var options = assign({}, global, document, current);\n var win;\n if (typeof window !== 'undefined') {\n win = window;\n }\n var styles = parseStyles(global, document, current);\n var hooks = parseHooks(global, document, current);\n var settings = parseSettings(doc, options);\n var content = parseContent$1(doc, options, win);\n return { id: current.tableId, content: content, hooks: hooks, styles: styles, settings: settings };\n}\nfunction parseStyles(gInput, dInput, cInput) {\n var styleOptions = {\n styles: {},\n headStyles: {},\n bodyStyles: {},\n footStyles: {},\n alternateRowStyles: {},\n columnStyles: {},\n };\n var _loop_1 = function (prop) {\n if (prop === 'columnStyles') {\n var global = gInput[prop];\n var document_1 = dInput[prop];\n var current = cInput[prop];\n styleOptions.columnStyles = assign({}, global, document_1, current);\n }\n else {\n var allOptions = [gInput, dInput, cInput];\n var styles = allOptions.map(function (opts) { return opts[prop] || {}; });\n styleOptions[prop] = assign({}, styles[0], styles[1], styles[2]);\n }\n };\n for (var _i = 0, _a = Object.keys(styleOptions); _i < _a.length; _i++) {\n var prop = _a[_i];\n _loop_1(prop);\n }\n return styleOptions;\n}\nfunction parseHooks(global, document, current) {\n var allOptions = [global, document, current];\n var result = {\n didParseCell: [],\n willDrawCell: [],\n didDrawCell: [],\n willDrawPage: [],\n didDrawPage: [],\n };\n for (var _i = 0, allOptions_1 = allOptions; _i < allOptions_1.length; _i++) {\n var options = allOptions_1[_i];\n if (options.didParseCell)\n result.didParseCell.push(options.didParseCell);\n if (options.willDrawCell)\n result.willDrawCell.push(options.willDrawCell);\n if (options.didDrawCell)\n result.didDrawCell.push(options.didDrawCell);\n if (options.willDrawPage)\n result.willDrawPage.push(options.willDrawPage);\n if (options.didDrawPage)\n result.didDrawPage.push(options.didDrawPage);\n }\n return result;\n}\nfunction parseSettings(doc, options) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\n var margin = parseSpacing(options.margin, 40 / doc.scaleFactor());\n var startY = (_a = getStartY(doc, options.startY)) !== null && _a !== void 0 ? _a : margin.top;\n var showFoot;\n if (options.showFoot === true) {\n showFoot = 'everyPage';\n }\n else if (options.showFoot === false) {\n showFoot = 'never';\n }\n else {\n showFoot = (_b = options.showFoot) !== null && _b !== void 0 ? _b : 'everyPage';\n }\n var showHead;\n if (options.showHead === true) {\n showHead = 'everyPage';\n }\n else if (options.showHead === false) {\n showHead = 'never';\n }\n else {\n showHead = (_c = options.showHead) !== null && _c !== void 0 ? _c : 'everyPage';\n }\n var useCss = (_d = options.useCss) !== null && _d !== void 0 ? _d : false;\n var theme = options.theme || (useCss ? 'plain' : 'striped');\n var horizontalPageBreak = !!options.horizontalPageBreak;\n var horizontalPageBreakRepeat = (_e = options.horizontalPageBreakRepeat) !== null && _e !== void 0 ? _e : null;\n return {\n includeHiddenHtml: (_f = options.includeHiddenHtml) !== null && _f !== void 0 ? _f : false,\n useCss: useCss,\n theme: theme,\n startY: startY,\n margin: margin,\n pageBreak: (_g = options.pageBreak) !== null && _g !== void 0 ? _g : 'auto',\n rowPageBreak: (_h = options.rowPageBreak) !== null && _h !== void 0 ? _h : 'auto',\n tableWidth: (_j = options.tableWidth) !== null && _j !== void 0 ? _j : 'auto',\n showHead: showHead,\n showFoot: showFoot,\n tableLineWidth: (_k = options.tableLineWidth) !== null && _k !== void 0 ? _k : 0,\n tableLineColor: (_l = options.tableLineColor) !== null && _l !== void 0 ? _l : 200,\n horizontalPageBreak: horizontalPageBreak,\n horizontalPageBreakRepeat: horizontalPageBreakRepeat,\n horizontalPageBreakBehaviour: (_m = options.horizontalPageBreakBehaviour) !== null && _m !== void 0 ? _m : 'afterAllRows',\n };\n}\nfunction getStartY(doc, userStartY) {\n var previous = doc.getLastAutoTable();\n var sf = doc.scaleFactor();\n var currentPage = doc.pageNumber();\n var isSamePageAsPreviousTable = false;\n if (previous && previous.startPageNumber) {\n var endingPage = previous.startPageNumber + previous.pageNumber - 1;\n isSamePageAsPreviousTable = endingPage === currentPage;\n }\n if (typeof userStartY === 'number') {\n return userStartY;\n }\n else if (userStartY == null || userStartY === false) {\n if (isSamePageAsPreviousTable && (previous === null || previous === void 0 ? void 0 : previous.finalY) != null) {\n // Some users had issues with overlapping tables when they used multiple\n // tables without setting startY so setting it here to a sensible default.\n return previous.finalY + 20 / sf;\n }\n }\n return null;\n}\nfunction parseContent$1(doc, options, window) {\n var head = options.head || [];\n var body = options.body || [];\n var foot = options.foot || [];\n if (options.html) {\n var hidden = options.includeHiddenHtml;\n if (window) {\n var htmlContent = parseHtml(doc, options.html, window, hidden, options.useCss) || {};\n head = htmlContent.head || head;\n body = htmlContent.body || head;\n foot = htmlContent.foot || head;\n }\n else {\n console.error('Cannot parse html in non browser environment');\n }\n }\n var columns = options.columns || parseColumns(head, body, foot);\n return { columns: columns, head: head, body: body, foot: foot };\n}\nfunction parseColumns(head, body, foot) {\n var firstRow = head[0] || body[0] || foot[0] || [];\n var result = [];\n Object.keys(firstRow)\n .filter(function (key) { return key !== '_element'; })\n .forEach(function (key) {\n var colSpan = 1;\n var input;\n if (Array.isArray(firstRow)) {\n input = firstRow[parseInt(key)];\n }\n else {\n input = firstRow[key];\n }\n if (typeof input === 'object' && !Array.isArray(input)) {\n colSpan = (input === null || input === void 0 ? void 0 : input.colSpan) || 1;\n }\n for (var i = 0; i < colSpan; i++) {\n var id = void 0;\n if (Array.isArray(firstRow)) {\n id = result.length;\n }\n else {\n id = key + (i > 0 ? \"_\".concat(i) : '');\n }\n var rowResult = { dataKey: id };\n result.push(rowResult);\n }\n });\n return result;\n}\n\nvar HookData = /** @class */ (function () {\n function HookData(doc, table, cursor) {\n this.table = table;\n this.pageNumber = table.pageNumber;\n this.settings = table.settings;\n this.cursor = cursor;\n this.doc = doc.getDocument();\n }\n return HookData;\n}());\nvar CellHookData = /** @class */ (function (_super) {\n __extends(CellHookData, _super);\n function CellHookData(doc, table, cell, row, column, cursor) {\n var _this = _super.call(this, doc, table, cursor) || this;\n _this.cell = cell;\n _this.row = row;\n _this.column = column;\n _this.section = row.section;\n return _this;\n }\n return CellHookData;\n}(HookData));\n\nvar Table = /** @class */ (function () {\n function Table(input, content) {\n this.pageNumber = 1;\n this.id = input.id;\n this.settings = input.settings;\n this.styles = input.styles;\n this.hooks = input.hooks;\n this.columns = content.columns;\n this.head = content.head;\n this.body = content.body;\n this.foot = content.foot;\n }\n Table.prototype.getHeadHeight = function (columns) {\n return this.head.reduce(function (acc, row) { return acc + row.getMaxCellHeight(columns); }, 0);\n };\n Table.prototype.getFootHeight = function (columns) {\n return this.foot.reduce(function (acc, row) { return acc + row.getMaxCellHeight(columns); }, 0);\n };\n Table.prototype.allRows = function () {\n return this.head.concat(this.body).concat(this.foot);\n };\n Table.prototype.callCellHooks = function (doc, handlers, cell, row, column, cursor) {\n for (var _i = 0, handlers_1 = handlers; _i < handlers_1.length; _i++) {\n var handler = handlers_1[_i];\n var data = new CellHookData(doc, this, cell, row, column, cursor);\n var result = handler(data) === false;\n // Make sure text is always string[] since user can assign string\n cell.text = Array.isArray(cell.text) ? cell.text : [cell.text];\n if (result) {\n return false;\n }\n }\n return true;\n };\n Table.prototype.callEndPageHooks = function (doc, cursor) {\n doc.applyStyles(doc.userStyles);\n for (var _i = 0, _a = this.hooks.didDrawPage; _i < _a.length; _i++) {\n var handler = _a[_i];\n handler(new HookData(doc, this, cursor));\n }\n };\n Table.prototype.callWillDrawPageHooks = function (doc, cursor) {\n for (var _i = 0, _a = this.hooks.willDrawPage; _i < _a.length; _i++) {\n var handler = _a[_i];\n handler(new HookData(doc, this, cursor));\n }\n };\n Table.prototype.getWidth = function (pageWidth) {\n if (typeof this.settings.tableWidth === 'number') {\n return this.settings.tableWidth;\n }\n else if (this.settings.tableWidth === 'wrap') {\n var wrappedWidth = this.columns.reduce(function (total, col) { return total + col.wrappedWidth; }, 0);\n return wrappedWidth;\n }\n else {\n var margin = this.settings.margin;\n return pageWidth - margin.left - margin.right;\n }\n };\n return Table;\n}());\nvar Row = /** @class */ (function () {\n function Row(raw, index, section, cells, spansMultiplePages) {\n if (spansMultiplePages === void 0) { spansMultiplePages = false; }\n this.height = 0;\n this.raw = raw;\n if (raw instanceof HtmlRowInput) {\n this.raw = raw._element;\n this.element = raw._element;\n }\n this.index = index;\n this.section = section;\n this.cells = cells;\n this.spansMultiplePages = spansMultiplePages;\n }\n Row.prototype.getMaxCellHeight = function (columns) {\n var _this = this;\n return columns.reduce(function (acc, column) { var _a; return Math.max(acc, ((_a = _this.cells[column.index]) === null || _a === void 0 ? void 0 : _a.height) || 0); }, 0);\n };\n Row.prototype.hasRowSpan = function (columns) {\n var _this = this;\n return (columns.filter(function (column) {\n var cell = _this.cells[column.index];\n if (!cell)\n return false;\n return cell.rowSpan > 1;\n }).length > 0);\n };\n Row.prototype.canEntireRowFit = function (height, columns) {\n return this.getMaxCellHeight(columns) <= height;\n };\n Row.prototype.getMinimumRowHeight = function (columns, doc) {\n var _this = this;\n return columns.reduce(function (acc, column) {\n var cell = _this.cells[column.index];\n if (!cell)\n return 0;\n var lineHeight = doc.getLineHeight(cell.styles.fontSize);\n var vPadding = cell.padding('vertical');\n var oneRowHeight = vPadding + lineHeight;\n return oneRowHeight > acc ? oneRowHeight : acc;\n }, 0);\n };\n return Row;\n}());\nvar Cell = /** @class */ (function () {\n function Cell(raw, styles, section) {\n var _a;\n this.contentHeight = 0;\n this.contentWidth = 0;\n this.wrappedWidth = 0;\n this.minReadableWidth = 0;\n this.minWidth = 0;\n this.width = 0;\n this.height = 0;\n this.x = 0;\n this.y = 0;\n this.styles = styles;\n this.section = section;\n this.raw = raw;\n var content = raw;\n if (raw != null && typeof raw === 'object' && !Array.isArray(raw)) {\n this.rowSpan = raw.rowSpan || 1;\n this.colSpan = raw.colSpan || 1;\n content = (_a = raw.content) !== null && _a !== void 0 ? _a : raw;\n if (raw._element) {\n this.raw = raw._element;\n }\n }\n else {\n this.rowSpan = 1;\n this.colSpan = 1;\n }\n // Stringify 0 and false, but not undefined or null\n var text = content != null ? '' + content : '';\n var splitRegex = /\\r\\n|\\r|\\n/g;\n this.text = text.split(splitRegex);\n }\n Cell.prototype.getTextPos = function () {\n var y;\n if (this.styles.valign === 'top') {\n y = this.y + this.padding('top');\n }\n else if (this.styles.valign === 'bottom') {\n y = this.y + this.height - this.padding('bottom');\n }\n else {\n var netHeight = this.height - this.padding('vertical');\n y = this.y + netHeight / 2 + this.padding('top');\n }\n var x;\n if (this.styles.halign === 'right') {\n x = this.x + this.width - this.padding('right');\n }\n else if (this.styles.halign === 'center') {\n var netWidth = this.width - this.padding('horizontal');\n x = this.x + netWidth / 2 + this.padding('left');\n }\n else {\n x = this.x + this.padding('left');\n }\n return { x: x, y: y };\n };\n // TODO (v4): replace parameters with only (lineHeight)\n Cell.prototype.getContentHeight = function (scaleFactor, lineHeightFactor) {\n if (lineHeightFactor === void 0) { lineHeightFactor = 1.15; }\n var lineCount = Array.isArray(this.text) ? this.text.length : 1;\n var lineHeight = (this.styles.fontSize / scaleFactor) * lineHeightFactor;\n var height = lineCount * lineHeight + this.padding('vertical');\n return Math.max(height, this.styles.minCellHeight);\n };\n Cell.prototype.padding = function (name) {\n var padding = parseSpacing(this.styles.cellPadding, 0);\n if (name === 'vertical') {\n return padding.top + padding.bottom;\n }\n else if (name === 'horizontal') {\n return padding.left + padding.right;\n }\n else {\n return padding[name];\n }\n };\n return Cell;\n}());\nvar Column = /** @class */ (function () {\n function Column(dataKey, raw, index) {\n this.wrappedWidth = 0;\n this.minReadableWidth = 0;\n this.minWidth = 0;\n this.width = 0;\n this.dataKey = dataKey;\n this.raw = raw;\n this.index = index;\n }\n Column.prototype.getMaxCustomCellWidth = function (table) {\n var max = 0;\n for (var _i = 0, _a = table.allRows(); _i < _a.length; _i++) {\n var row = _a[_i];\n var cell = row.cells[this.index];\n if (cell && typeof cell.styles.cellWidth === 'number') {\n max = Math.max(max, cell.styles.cellWidth);\n }\n }\n return max;\n };\n return Column;\n}());\n\n/**\n * Calculate the column widths\n */\nfunction calculateWidths(doc, table) {\n calculate(doc, table);\n var resizableColumns = [];\n var initialTableWidth = 0;\n table.columns.forEach(function (column) {\n var customWidth = column.getMaxCustomCellWidth(table);\n if (customWidth) {\n // final column width\n column.width = customWidth;\n }\n else {\n // initial column width (will be resized)\n column.width = column.wrappedWidth;\n resizableColumns.push(column);\n }\n initialTableWidth += column.width;\n });\n // width difference that needs to be distributed\n var resizeWidth = table.getWidth(doc.pageSize().width) - initialTableWidth;\n // first resize attempt: with respect to minReadableWidth and minWidth\n if (resizeWidth) {\n resizeWidth = resizeColumns(resizableColumns, resizeWidth, function (column) {\n return Math.max(column.minReadableWidth, column.minWidth);\n });\n }\n // second resize attempt: ignore minReadableWidth but respect minWidth\n if (resizeWidth) {\n resizeWidth = resizeColumns(resizableColumns, resizeWidth, function (column) { return column.minWidth; });\n }\n resizeWidth = Math.abs(resizeWidth);\n if (!table.settings.horizontalPageBreak &&\n resizeWidth > 0.1 / doc.scaleFactor()) {\n // Table can't get smaller due to custom-width or minWidth restrictions\n // We can't really do much here. Up to user to for example\n // reduce font size, increase page size or remove custom cell widths\n // to allow more columns to be reduced in size\n resizeWidth = resizeWidth < 1 ? resizeWidth : Math.round(resizeWidth);\n console.log(\"Of the table content, \".concat(resizeWidth, \" units width could not fit page\"));\n }\n applyColSpans(table);\n fitContent(table, doc);\n applyRowSpans(table);\n}\nfunction calculate(doc, table) {\n var sf = doc.scaleFactor();\n var horizontalPageBreak = table.settings.horizontalPageBreak;\n var availablePageWidth = getPageAvailableWidth(doc, table);\n table.allRows().forEach(function (row) {\n for (var _i = 0, _a = table.columns; _i < _a.length; _i++) {\n var column = _a[_i];\n var cell = row.cells[column.index];\n if (!cell)\n continue;\n var hooks = table.hooks.didParseCell;\n table.callCellHooks(doc, hooks, cell, row, column, null);\n var padding = cell.padding('horizontal');\n cell.contentWidth = getStringWidth(cell.text, cell.styles, doc) + padding;\n // Using [^\\S\\u00A0] instead of \\s ensures that we split the text on all\n // whitespace except non-breaking spaces (\\u00A0). We need to preserve\n // them in the split process to ensure correct word separation and width\n // calculation.\n var longestWordWidth = getStringWidth(cell.text.join(' ').split(/[^\\S\\u00A0]+/), cell.styles, doc);\n cell.minReadableWidth = longestWordWidth + cell.padding('horizontal');\n if (typeof cell.styles.cellWidth === 'number') {\n cell.minWidth = cell.styles.cellWidth;\n cell.wrappedWidth = cell.styles.cellWidth;\n }\n else if (cell.styles.cellWidth === 'wrap' ||\n horizontalPageBreak === true) {\n // cell width should not be more than available page width\n if (cell.contentWidth > availablePageWidth) {\n cell.minWidth = availablePageWidth;\n cell.wrappedWidth = availablePageWidth;\n }\n else {\n cell.minWidth = cell.contentWidth;\n cell.wrappedWidth = cell.contentWidth;\n }\n }\n else {\n // auto\n var defaultMinWidth = 10 / sf;\n cell.minWidth = cell.styles.minCellWidth || defaultMinWidth;\n cell.wrappedWidth = cell.contentWidth;\n if (cell.minWidth > cell.wrappedWidth) {\n cell.wrappedWidth = cell.minWidth;\n }\n }\n }\n });\n table.allRows().forEach(function (row) {\n for (var _i = 0, _a = table.columns; _i < _a.length; _i++) {\n var column = _a[_i];\n var cell = row.cells[column.index];\n // For now we ignore the minWidth and wrappedWidth of colspan cells when calculating colspan widths.\n // Could probably be improved upon however.\n if (cell && cell.colSpan === 1) {\n column.wrappedWidth = Math.max(column.wrappedWidth, cell.wrappedWidth);\n column.minWidth = Math.max(column.minWidth, cell.minWidth);\n column.minReadableWidth = Math.max(column.minReadableWidth, cell.minReadableWidth);\n }\n else {\n // Respect cellWidth set in columnStyles even if there is no cells for this column\n // or if the column only have colspan cells. Since the width of colspan cells\n // does not affect the width of columns, setting columnStyles cellWidth enables the\n // user to at least do it manually.\n // Note that this is not perfect for now since for example row and table styles are\n // not accounted for\n var columnStyles = table.styles.columnStyles[column.dataKey] ||\n table.styles.columnStyles[column.index] ||\n {};\n var cellWidth = columnStyles.cellWidth || columnStyles.minCellWidth;\n if (cellWidth && typeof cellWidth === 'number') {\n column.minWidth = cellWidth;\n column.wrappedWidth = cellWidth;\n }\n }\n if (cell) {\n // Make sure all columns get at least min width even though width calculations are not based on them\n if (cell.colSpan > 1 && !column.minWidth) {\n column.minWidth = cell.minWidth;\n }\n if (cell.colSpan > 1 && !column.wrappedWidth) {\n column.wrappedWidth = cell.minWidth;\n }\n }\n }\n });\n}\n/**\n * Distribute resizeWidth on passed resizable columns\n */\nfunction resizeColumns(columns, resizeWidth, getMinWidth) {\n var initialResizeWidth = resizeWidth;\n var sumWrappedWidth = columns.reduce(function (acc, column) { return acc + column.wrappedWidth; }, 0);\n for (var i = 0; i < columns.length; i++) {\n var column = columns[i];\n var ratio = column.wrappedWidth / sumWrappedWidth;\n var suggestedChange = initialResizeWidth * ratio;\n var suggestedWidth = column.width + suggestedChange;\n var minWidth = getMinWidth(column);\n var newWidth = suggestedWidth < minWidth ? minWidth : suggestedWidth;\n resizeWidth -= newWidth - column.width;\n column.width = newWidth;\n }\n resizeWidth = Math.round(resizeWidth * 1e10) / 1e10;\n // Run the resizer again if there's remaining width needs\n // to be distributed and there're columns that can be resized\n if (resizeWidth) {\n var resizableColumns = columns.filter(function (column) {\n return resizeWidth < 0\n ? column.width > getMinWidth(column) // check if column can shrink\n : true; // check if column can grow\n });\n if (resizableColumns.length) {\n resizeWidth = resizeColumns(resizableColumns, resizeWidth, getMinWidth);\n }\n }\n return resizeWidth;\n}\nfunction applyRowSpans(table) {\n var rowSpanCells = {};\n var colRowSpansLeft = 1;\n var all = table.allRows();\n for (var rowIndex = 0; rowIndex < all.length; rowIndex++) {\n var row = all[rowIndex];\n for (var _i = 0, _a = table.columns; _i < _a.length; _i++) {\n var column = _a[_i];\n var data = rowSpanCells[column.index];\n if (colRowSpansLeft > 1) {\n colRowSpansLeft--;\n delete row.cells[column.index];\n }\n else if (data) {\n data.cell.height += row.height;\n colRowSpansLeft = data.cell.colSpan;\n delete row.cells[column.index];\n data.left--;\n if (data.left <= 1) {\n delete rowSpanCells[column.index];\n }\n }\n else {\n var cell = row.cells[column.index];\n if (!cell) {\n continue;\n }\n cell.height = row.height;\n if (cell.rowSpan > 1) {\n var remaining = all.length - rowIndex;\n var left = cell.rowSpan > remaining ? remaining : cell.rowSpan;\n rowSpanCells[column.index] = { cell: cell, left: left, row: row };\n }\n }\n }\n }\n}\nfunction applyColSpans(table) {\n var all = table.allRows();\n for (var rowIndex = 0; rowIndex < all.length; rowIndex++) {\n var row = all[rowIndex];\n var colSpanCell = null;\n var combinedColSpanWidth = 0;\n var colSpansLeft = 0;\n for (var columnIndex = 0; columnIndex < table.columns.length; columnIndex++) {\n var column = table.columns[columnIndex];\n // Width and colspan\n colSpansLeft -= 1;\n if (colSpansLeft > 1 && table.columns[columnIndex + 1]) {\n combinedColSpanWidth += column.width;\n delete row.cells[column.index];\n }\n else if (colSpanCell) {\n var cell = colSpanCell;\n delete row.cells[column.index];\n colSpanCell = null;\n cell.width = column.width + combinedColSpanWidth;\n }\n else {\n var cell = row.cells[column.index];\n if (!cell)\n continue;\n colSpansLeft = cell.colSpan;\n combinedColSpanWidth = 0;\n if (cell.colSpan > 1) {\n colSpanCell = cell;\n combinedColSpanWidth += column.width;\n continue;\n }\n cell.width = column.width + combinedColSpanWidth;\n }\n }\n }\n}\nfunction fitContent(table, doc) {\n var rowSpanHeight = { count: 0, height: 0 };\n for (var _i = 0, _a = table.allRows(); _i < _a.length; _i++) {\n var row = _a[_i];\n for (var _b = 0, _c = table.columns; _b < _c.length; _b++) {\n var column = _c[_b];\n var cell = row.cells[column.index];\n if (!cell)\n continue;\n doc.applyStyles(cell.styles, true);\n var textSpace = cell.width - cell.padding('horizontal');\n if (cell.styles.overflow === 'linebreak') {\n // Add one pt to textSpace to fix rounding error\n cell.text = doc.splitTextToSize(cell.text, textSpace + 1 / doc.scaleFactor(), { fontSize: cell.styles.fontSize });\n }\n else if (cell.styles.overflow === 'ellipsize') {\n cell.text = ellipsize(cell.text, textSpace, cell.styles, doc, '...');\n }\n else if (cell.styles.overflow === 'hidden') {\n cell.text = ellipsize(cell.text, textSpace, cell.styles, doc, '');\n }\n else if (typeof cell.styles.overflow === 'function') {\n var result = cell.styles.overflow(cell.text, textSpace);\n if (typeof result === 'string') {\n cell.text = [result];\n }\n else {\n cell.text = result;\n }\n }\n cell.contentHeight = cell.getContentHeight(doc.scaleFactor(), doc.getLineHeightFactor());\n var realContentHeight = cell.contentHeight / cell.rowSpan;\n if (cell.rowSpan > 1 &&\n rowSpanHeight.count * rowSpanHeight.height <\n realContentHeight * cell.rowSpan) {\n rowSpanHeight = { height: realContentHeight, count: cell.rowSpan };\n }\n else if (rowSpanHeight && rowSpanHeight.count > 0) {\n if (rowSpanHeight.height > realContentHeight) {\n realContentHeight = rowSpanHeight.height;\n }\n }\n if (realContentHeight > row.height) {\n row.height = realContentHeight;\n }\n }\n rowSpanHeight.count--;\n }\n}\nfunction ellipsize(text, width, styles, doc, overflow) {\n return text.map(function (str) { return ellipsizeStr(str, width, styles, doc, overflow); });\n}\nfunction ellipsizeStr(text, width, styles, doc, overflow) {\n var precision = 10000 * doc.scaleFactor();\n width = Math.ceil(width * precision) / precision;\n if (width >= getStringWidth(text, styles, doc)) {\n return text;\n }\n while (width < getStringWidth(text + overflow, styles, doc)) {\n if (text.length <= 1) {\n break;\n }\n text = text.substring(0, text.length - 1);\n }\n return text.trim() + overflow;\n}\n\nfunction createTable(jsPDFDoc, input) {\n var doc = new DocHandler(jsPDFDoc);\n var content = parseContent(input, doc.scaleFactor());\n var table = new Table(input, content);\n calculateWidths(doc, table);\n doc.applyStyles(doc.userStyles);\n return table;\n}\nfunction parseContent(input, sf) {\n var content = input.content;\n var columns = createColumns(content.columns);\n // If no head or foot is set, try generating it with content from columns\n if (content.head.length === 0) {\n var sectionRow = generateSectionRow(columns, 'head');\n if (sectionRow)\n content.head.push(sectionRow);\n }\n if (content.foot.length === 0) {\n var sectionRow = generateSectionRow(columns, 'foot');\n if (sectionRow)\n content.foot.push(sectionRow);\n }\n var theme = input.settings.theme;\n var styles = input.styles;\n return {\n columns: columns,\n head: parseSection('head', content.head, columns, styles, theme, sf),\n body: parseSection('body', content.body, columns, styles, theme, sf),\n foot: parseSection('foot', content.foot, columns, styles, theme, sf),\n };\n}\nfunction parseSection(sectionName, sectionRows, columns, styleProps, theme, scaleFactor) {\n var rowSpansLeftForColumn = {};\n var result = sectionRows.map(function (rawRow, rowIndex) {\n var skippedRowForRowSpans = 0;\n var cells = {};\n var colSpansAdded = 0;\n var columnSpansLeft = 0;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n if (rowSpansLeftForColumn[column.index] == null ||\n rowSpansLeftForColumn[column.index].left === 0) {\n if (columnSpansLeft === 0) {\n var rawCell = void 0;\n if (Array.isArray(rawRow)) {\n rawCell =\n rawRow[column.index - colSpansAdded - skippedRowForRowSpans];\n }\n else {\n rawCell = rawRow[column.dataKey];\n }\n var cellInputStyles = {};\n if (typeof rawCell === 'object' && !Array.isArray(rawCell)) {\n cellInputStyles = (rawCell === null || rawCell === void 0 ? void 0 : rawCell.styles) || {};\n }\n var styles = cellStyles(sectionName, column, rowIndex, theme, styleProps, scaleFactor, cellInputStyles);\n var cell = new Cell(rawCell, styles, sectionName);\n // dataKey is not used internally no more but keep for\n // backwards compat in hooks\n cells[column.dataKey] = cell;\n cells[column.index] = cell;\n columnSpansLeft = cell.colSpan - 1;\n rowSpansLeftForColumn[column.index] = {\n left: cell.rowSpan - 1,\n times: columnSpansLeft,\n };\n }\n else {\n columnSpansLeft--;\n colSpansAdded++;\n }\n }\n else {\n rowSpansLeftForColumn[column.index].left--;\n columnSpansLeft = rowSpansLeftForColumn[column.index].times;\n skippedRowForRowSpans++;\n }\n }\n return new Row(rawRow, rowIndex, sectionName, cells);\n });\n return result;\n}\nfunction generateSectionRow(columns, section) {\n var sectionRow = {};\n columns.forEach(function (col) {\n if (col.raw != null) {\n var title = getSectionTitle(section, col.raw);\n if (title != null)\n sectionRow[col.dataKey] = title;\n }\n });\n return Object.keys(sectionRow).length > 0 ? sectionRow : null;\n}\nfunction getSectionTitle(section, column) {\n if (section === 'head') {\n if (typeof column === 'object') {\n return column.header || null;\n }\n else if (typeof column === 'string' || typeof column === 'number') {\n return column;\n }\n }\n else if (section === 'foot' && typeof column === 'object') {\n return column.footer;\n }\n return null;\n}\nfunction createColumns(columns) {\n return columns.map(function (input, index) {\n var _a;\n var key;\n if (typeof input === 'object') {\n key = (_a = input.dataKey) !== null && _a !== void 0 ? _a : index;\n }\n else {\n key = index;\n }\n return new Column(key, input, index);\n });\n}\nfunction cellStyles(sectionName, column, rowIndex, themeName, styles, scaleFactor, cellInputStyles) {\n var theme = getTheme(themeName);\n var sectionStyles;\n if (sectionName === 'head') {\n sectionStyles = styles.headStyles;\n }\n else if (sectionName === 'body') {\n sectionStyles = styles.bodyStyles;\n }\n else if (sectionName === 'foot') {\n sectionStyles = styles.footStyles;\n }\n var otherStyles = assign({}, theme.table, theme[sectionName], styles.styles, sectionStyles);\n var columnStyles = styles.columnStyles[column.dataKey] ||\n styles.columnStyles[column.index] ||\n {};\n var colStyles = sectionName === 'body' ? columnStyles : {};\n var rowStyles = sectionName === 'body' && rowIndex % 2 === 0\n ? assign({}, theme.alternateRow, styles.alternateRowStyles)\n : {};\n var defaultStyle = defaultStyles(scaleFactor);\n var themeStyles = assign({}, defaultStyle, otherStyles, rowStyles, colStyles);\n return assign(themeStyles, cellInputStyles);\n}\n\n// get columns can be fit into page\nfunction getColumnsCanFitInPage(doc, table, config) {\n var _a;\n if (config === void 0) { config = {}; }\n // Get page width\n var remainingWidth = getPageAvailableWidth(doc, table);\n // Get column data key to repeat\n var repeatColumnsMap = new Map();\n var colIndexes = [];\n var columns = [];\n var horizontalPageBreakRepeat = [];\n if (Array.isArray(table.settings.horizontalPageBreakRepeat)) {\n horizontalPageBreakRepeat = table.settings.horizontalPageBreakRepeat;\n // It can be a single value of type string or number (even number: 0)\n }\n else if (typeof table.settings.horizontalPageBreakRepeat === 'string' ||\n typeof table.settings.horizontalPageBreakRepeat === 'number') {\n horizontalPageBreakRepeat = [table.settings.horizontalPageBreakRepeat];\n }\n // Code to repeat the given column in split pages\n horizontalPageBreakRepeat.forEach(function (field) {\n var col = table.columns.find(function (item) { return item.dataKey === field || item.index === field; });\n if (col && !repeatColumnsMap.has(col.index)) {\n repeatColumnsMap.set(col.index, true);\n colIndexes.push(col.index);\n columns.push(table.columns[col.index]);\n remainingWidth -= col.wrappedWidth;\n }\n });\n var first = true;\n var i = (_a = config === null || config === void 0 ? void 0 : config.start) !== null && _a !== void 0 ? _a : 0; // make sure couter is initiated outside the loop\n while (i < table.columns.length) {\n // Prevent duplicates\n if (repeatColumnsMap.has(i)) {\n i++;\n continue;\n }\n var colWidth = table.columns[i].wrappedWidth;\n // Take at least one column even if it doesn't fit\n if (first || remainingWidth >= colWidth) {\n first = false;\n colIndexes.push(i);\n columns.push(table.columns[i]);\n remainingWidth -= colWidth;\n }\n else {\n break;\n }\n i++;\n }\n return { colIndexes: colIndexes, columns: columns, lastIndex: i - 1 };\n}\nfunction calculateAllColumnsCanFitInPage(doc, table) {\n var allResults = [];\n for (var i = 0; i < table.columns.length; i++) {\n var result = getColumnsCanFitInPage(doc, table, { start: i });\n if (result.columns.length) {\n allResults.push(result);\n i = result.lastIndex;\n }\n }\n return allResults;\n}\n\nfunction drawTable(jsPDFDoc, table) {\n var settings = table.settings;\n var startY = settings.startY;\n var margin = settings.margin;\n var cursor = { x: margin.left, y: startY };\n var sectionsHeight = table.getHeadHeight(table.columns) + table.getFootHeight(table.columns);\n var minTableBottomPos = startY + margin.bottom + sectionsHeight;\n if (settings.pageBreak === 'avoid') {\n var rows = table.body;\n var tableHeight = rows.reduce(function (acc, row) { return acc + row.height; }, 0);\n minTableBottomPos += tableHeight;\n }\n var doc = new DocHandler(jsPDFDoc);\n if (settings.pageBreak === 'always' ||\n (settings.startY != null && minTableBottomPos > doc.pageSize().height)) {\n nextPage(doc);\n cursor.y = margin.top;\n }\n table.callWillDrawPageHooks(doc, cursor);\n var startPos = assign({}, cursor);\n table.startPageNumber = doc.pageNumber();\n if (settings.horizontalPageBreak) {\n // managed flow for split columns\n printTableWithHorizontalPageBreak(doc, table, startPos, cursor);\n }\n else {\n // normal flow\n doc.applyStyles(doc.userStyles);\n if (settings.showHead === 'firstPage' ||\n settings.showHead === 'everyPage') {\n table.head.forEach(function (row) {\n return printRow(doc, table, row, cursor, table.columns);\n });\n }\n doc.applyStyles(doc.userStyles);\n table.body.forEach(function (row, index) {\n var isLastRow = index === table.body.length - 1;\n printFullRow(doc, table, row, isLastRow, startPos, cursor, table.columns);\n });\n doc.applyStyles(doc.userStyles);\n if (settings.showFoot === 'lastPage' || settings.showFoot === 'everyPage') {\n table.foot.forEach(function (row) {\n return printRow(doc, table, row, cursor, table.columns);\n });\n }\n }\n addTableBorder(doc, table, startPos, cursor);\n table.callEndPageHooks(doc, cursor);\n table.finalY = cursor.y;\n jsPDFDoc.lastAutoTable = table;\n doc.applyStyles(doc.userStyles);\n}\nfunction printTableWithHorizontalPageBreak(doc, table, startPos, cursor) {\n // calculate width of columns and render only those which can fit into page\n var allColumnsCanFitResult = calculateAllColumnsCanFitInPage(doc, table);\n var settings = table.settings;\n if (settings.horizontalPageBreakBehaviour === 'afterAllRows') {\n allColumnsCanFitResult.forEach(function (colsAndIndexes, index) {\n doc.applyStyles(doc.userStyles);\n // add page to print next columns in new page\n if (index > 0) {\n // When adding a page here, make sure not to print the footers\n // because they were already printed before on this same loop\n addPage(doc, table, startPos, cursor, colsAndIndexes.columns, true);\n }\n else {\n // print head for selected columns\n printHead(doc, table, cursor, colsAndIndexes.columns);\n }\n // print body & footer for selected columns\n printBody(doc, table, startPos, cursor, colsAndIndexes.columns);\n printFoot(doc, table, cursor, colsAndIndexes.columns);\n });\n }\n else {\n var lastRowIndexOfLastPage_1 = -1;\n var firstColumnsToFitResult = allColumnsCanFitResult[0];\n var _loop_1 = function () {\n // Print the first columns, taking note of the last row printed\n var lastPrintedRowIndex = lastRowIndexOfLastPage_1;\n if (firstColumnsToFitResult) {\n doc.applyStyles(doc.userStyles);\n var firstColumnsToFit = firstColumnsToFitResult.columns;\n if (lastRowIndexOfLastPage_1 >= 0) {\n // When adding a page here, make sure not to print the footers\n // because they were already printed before on this same loop\n addPage(doc, table, startPos, cursor, firstColumnsToFit, true);\n }\n else {\n printHead(doc, table, cursor, firstColumnsToFit);\n }\n lastPrintedRowIndex = printBodyWithoutPageBreaks(doc, table, lastRowIndexOfLastPage_1 + 1, cursor, firstColumnsToFit);\n printFoot(doc, table, cursor, firstColumnsToFit);\n }\n // Check how many rows were printed, so that the next columns would not print more rows than that\n var maxNumberOfRows = lastPrintedRowIndex - lastRowIndexOfLastPage_1;\n // Print the next columns, never exceding maxNumberOfRows\n allColumnsCanFitResult.slice(1).forEach(function (colsAndIndexes) {\n doc.applyStyles(doc.userStyles);\n // When adding a page here, make sure not to print the footers\n // because they were already printed before on this same loop\n addPage(doc, table, startPos, cursor, colsAndIndexes.columns, true);\n printBodyWithoutPageBreaks(doc, table, lastRowIndexOfLastPage_1 + 1, cursor, colsAndIndexes.columns, maxNumberOfRows);\n printFoot(doc, table, cursor, colsAndIndexes.columns);\n });\n lastRowIndexOfLastPage_1 = lastPrintedRowIndex;\n };\n while (lastRowIndexOfLastPage_1 < table.body.length - 1) {\n _loop_1();\n }\n }\n}\nfunction printHead(doc, table, cursor, columns) {\n var settings = table.settings;\n doc.applyStyles(doc.userStyles);\n if (settings.showHead === 'firstPage' || settings.showHead === 'everyPage') {\n table.head.forEach(function (row) { return printRow(doc, table, row, cursor, columns); });\n }\n}\nfunction printBody(doc, table, startPos, cursor, columns) {\n doc.applyStyles(doc.userStyles);\n table.body.forEach(function (row, index) {\n var isLastRow = index === table.body.length - 1;\n printFullRow(doc, table, row, isLastRow, startPos, cursor, columns);\n });\n}\nfunction printBodyWithoutPageBreaks(doc, table, startRowIndex, cursor, columns, maxNumberOfRows) {\n doc.applyStyles(doc.userStyles);\n maxNumberOfRows = maxNumberOfRows !== null && maxNumberOfRows !== void 0 ? maxNumberOfRows : table.body.length;\n var endRowIndex = Math.min(startRowIndex + maxNumberOfRows, table.body.length);\n var lastPrintedRowIndex = -1;\n var rows = table.body.slice(startRowIndex, endRowIndex);\n for (var index = 0; index < rows.length; index++) {\n var row = rows[index];\n var isLastRow = startRowIndex + index === table.body.length - 1;\n var remainingSpace = getRemainingPageSpace(doc, table, isLastRow, cursor);\n if (row.canEntireRowFit(remainingSpace, columns)) {\n printRow(doc, table, row, cursor, columns);\n lastPrintedRowIndex = startRowIndex + index;\n }\n else {\n break;\n }\n }\n return lastPrintedRowIndex;\n}\nfunction printFoot(doc, table, cursor, columns) {\n var settings = table.settings;\n doc.applyStyles(doc.userStyles);\n if (settings.showFoot === 'lastPage' || settings.showFoot === 'everyPage') {\n table.foot.forEach(function (row) { return printRow(doc, table, row, cursor, columns); });\n }\n}\nfunction getRemainingLineCount(cell, remainingPageSpace, doc) {\n var lineHeight = doc.getLineHeight(cell.styles.fontSize);\n var vPadding = cell.padding('vertical');\n var remainingLines = Math.floor((remainingPageSpace - vPadding) / lineHeight);\n return Math.max(0, remainingLines);\n}\nfunction modifyRowToFit(row, remainingPageSpace, table, doc) {\n var cells = {};\n row.spansMultiplePages = true;\n row.height = 0;\n var rowHeight = 0;\n for (var _i = 0, _a = table.columns; _i < _a.length; _i++) {\n var column = _a[_i];\n var cell = row.cells[column.index];\n if (!cell)\n continue;\n if (!Array.isArray(cell.text)) {\n cell.text = [cell.text];\n }\n var remainderCell = new Cell(cell.raw, cell.styles, cell.section);\n remainderCell = assign(remainderCell, cell);\n remainderCell.text = [];\n var remainingLineCount = getRemainingLineCount(cell, remainingPageSpace, doc);\n if (cell.text.length > remainingLineCount) {\n remainderCell.text = cell.text.splice(remainingLineCount, cell.text.length);\n }\n var scaleFactor = doc.scaleFactor();\n var lineHeightFactor = doc.getLineHeightFactor();\n cell.contentHeight = cell.getContentHeight(scaleFactor, lineHeightFactor);\n if (cell.contentHeight >= remainingPageSpace) {\n cell.contentHeight = remainingPageSpace;\n remainderCell.styles.minCellHeight -= remainingPageSpace;\n }\n if (cell.contentHeight > row.height) {\n row.height = cell.contentHeight;\n }\n remainderCell.contentHeight = remainderCell.getContentHeight(scaleFactor, lineHeightFactor);\n if (remainderCell.contentHeight > rowHeight) {\n rowHeight = remainderCell.contentHeight;\n }\n cells[column.index] = remainderCell;\n }\n var remainderRow = new Row(row.raw, -1, row.section, cells, true);\n remainderRow.height = rowHeight;\n for (var _b = 0, _c = table.columns; _b < _c.length; _b++) {\n var column = _c[_b];\n var remainderCell = remainderRow.cells[column.index];\n if (remainderCell) {\n remainderCell.height = remainderRow.height;\n }\n var cell = row.cells[column.index];\n if (cell) {\n cell.height = row.height;\n }\n }\n return remainderRow;\n}\nfunction shouldPrintOnCurrentPage(doc, row, remainingPageSpace, table) {\n var pageHeight = doc.pageSize().height;\n var margin = table.settings.margin;\n var marginHeight = margin.top + margin.bottom;\n var maxRowHeight = pageHeight - marginHeight;\n if (row.section === 'body') {\n // Should also take into account that head and foot is not\n // on every page with some settings\n maxRowHeight -=\n table.getHeadHeight(table.columns) + table.getFootHeight(table.columns);\n }\n var minRowHeight = row.getMinimumRowHeight(table.columns, doc);\n var minRowFits = minRowHeight < remainingPageSpace;\n if (minRowHeight > maxRowHeight) {\n console.log(\"Will not be able to print row \".concat(row.index, \" correctly since it's minimum height is larger than page height\"));\n return true;\n }\n if (!minRowFits) {\n return false;\n }\n var rowHasRowSpanCell = row.hasRowSpan(table.columns);\n var rowHigherThanPage = row.getMaxCellHeight(table.columns) > maxRowHeight;\n if (rowHigherThanPage) {\n if (rowHasRowSpanCell) {\n console.log(\"The content of row \".concat(row.index, \" will not be drawn correctly since drawing rows with a height larger than the page height and has cells with rowspans is not supported.\"));\n }\n return true;\n }\n if (rowHasRowSpanCell) {\n // Currently a new page is required whenever a rowspan row don't fit a page.\n return false;\n }\n if (table.settings.rowPageBreak === 'avoid') {\n return false;\n }\n // In all other cases print the row on current page\n return true;\n}\nfunction printFullRow(doc, table, row, isLastRow, startPos, cursor, columns) {\n var remainingSpace = getRemainingPageSpace(doc, table, isLastRow, cursor);\n if (row.canEntireRowFit(remainingSpace, columns)) {\n // The row fits in the current page\n printRow(doc, table, row, cursor, columns);\n }\n else if (shouldPrintOnCurrentPage(doc, row, remainingSpace, table)) {\n // The row gets split in two here, each piece in one page\n var remainderRow = modifyRowToFit(row, remainingSpace, table, doc);\n printRow(doc, table, row, cursor, columns);\n addPage(doc, table, startPos, cursor, columns);\n printFullRow(doc, table, remainderRow, isLastRow, startPos, cursor, columns);\n }\n else {\n // The row get printed entirelly on the next page\n addPage(doc, table, startPos, cursor, columns);\n printFullRow(doc, table, row, isLastRow, startPos, cursor, columns);\n }\n}\nfunction printRow(doc, table, row, cursor, columns) {\n cursor.x = table.settings.margin.left;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n var cell = row.cells[column.index];\n if (!cell) {\n cursor.x += column.width;\n continue;\n }\n doc.applyStyles(cell.styles);\n cell.x = cursor.x;\n cell.y = cursor.y;\n var result = table.callCellHooks(doc, table.hooks.willDrawCell, cell, row, column, cursor);\n if (result === false) {\n cursor.x += column.width;\n continue;\n }\n drawCellRect(doc, cell, cursor);\n var textPos = cell.getTextPos();\n autoTableText(cell.text, textPos.x, textPos.y, {\n halign: cell.styles.halign,\n valign: cell.styles.valign,\n maxWidth: Math.ceil(cell.width - cell.padding('left') - cell.padding('right')),\n }, doc.getDocument());\n table.callCellHooks(doc, table.hooks.didDrawCell, cell, row, column, cursor);\n cursor.x += column.width;\n }\n cursor.y += row.height;\n}\nfunction drawCellRect(doc, cell, cursor) {\n var cellStyles = cell.styles;\n // https://github.com/simonbengtsson/jsPDF-AutoTable/issues/774\n // TODO (v4): better solution?\n doc.getDocument().setFillColor(doc.getDocument().getFillColor());\n if (typeof cellStyles.lineWidth === 'number') {\n // Draw cell background with normal borders\n var fillStyle = getFillStyle(cellStyles.lineWidth, cellStyles.fillColor);\n if (fillStyle) {\n doc.rect(cell.x, cursor.y, cell.width, cell.height, fillStyle);\n }\n }\n else if (typeof cellStyles.lineWidth === 'object') {\n // Draw cell background\n if (cellStyles.fillColor) {\n doc.rect(cell.x, cursor.y, cell.width, cell.height, 'F');\n }\n // Draw cell individual borders\n drawCellBorders(doc, cell, cursor, cellStyles.lineWidth);\n }\n}\n/**\n * Draw all specified borders. Borders are centered on cell's edge and lengthened\n * to overlap with neighbours to create sharp corners.\n * @param doc\n * @param cell\n * @param cursor\n * @param fillColor\n * @param lineWidth\n */\nfunction drawCellBorders(doc, cell, cursor, lineWidth) {\n var x1, y1, x2, y2;\n if (lineWidth.top) {\n x1 = cursor.x;\n y1 = cursor.y;\n x2 = cursor.x + cell.width;\n y2 = cursor.y;\n if (lineWidth.right) {\n x2 += 0.5 * lineWidth.right;\n }\n if (lineWidth.left) {\n x1 -= 0.5 * lineWidth.left;\n }\n drawLine(lineWidth.top, x1, y1, x2, y2);\n }\n if (lineWidth.bottom) {\n x1 = cursor.x;\n y1 = cursor.y + cell.height;\n x2 = cursor.x + cell.width;\n y2 = cursor.y + cell.height;\n if (lineWidth.right) {\n x2 += 0.5 * lineWidth.right;\n }\n if (lineWidth.left) {\n x1 -= 0.5 * lineWidth.left;\n }\n drawLine(lineWidth.bottom, x1, y1, x2, y2);\n }\n if (lineWidth.left) {\n x1 = cursor.x;\n y1 = cursor.y;\n x2 = cursor.x;\n y2 = cursor.y + cell.height;\n if (lineWidth.top) {\n y1 -= 0.5 * lineWidth.top;\n }\n if (lineWidth.bottom) {\n y2 += 0.5 * lineWidth.bottom;\n }\n drawLine(lineWidth.left, x1, y1, x2, y2);\n }\n if (lineWidth.right) {\n x1 = cursor.x + cell.width;\n y1 = cursor.y;\n x2 = cursor.x + cell.width;\n y2 = cursor.y + cell.height;\n if (lineWidth.top) {\n y1 -= 0.5 * lineWidth.top;\n }\n if (lineWidth.bottom) {\n y2 += 0.5 * lineWidth.bottom;\n }\n drawLine(lineWidth.right, x1, y1, x2, y2);\n }\n function drawLine(width, x1, y1, x2, y2) {\n doc.getDocument().setLineWidth(width);\n doc.getDocument().line(x1, y1, x2, y2, 'S');\n }\n}\nfunction getRemainingPageSpace(doc, table, isLastRow, cursor) {\n var bottomContentHeight = table.settings.margin.bottom;\n var showFoot = table.settings.showFoot;\n if (showFoot === 'everyPage' || (showFoot === 'lastPage' && isLastRow)) {\n bottomContentHeight += table.getFootHeight(table.columns);\n }\n return doc.pageSize().height - cursor.y - bottomContentHeight;\n}\nfunction addPage(doc, table, startPos, cursor, columns, suppressFooter) {\n if (columns === void 0) { columns = []; }\n if (suppressFooter === void 0) { suppressFooter = false; }\n doc.applyStyles(doc.userStyles);\n if (table.settings.showFoot === 'everyPage' && !suppressFooter) {\n table.foot.forEach(function (row) { return printRow(doc, table, row, cursor, columns); });\n }\n // Add user content just before adding new page ensure it will\n // be drawn above other things on the page\n table.callEndPageHooks(doc, cursor);\n var margin = table.settings.margin;\n addTableBorder(doc, table, startPos, cursor);\n nextPage(doc);\n table.pageNumber++;\n cursor.x = margin.left;\n cursor.y = margin.top;\n startPos.y = margin.top;\n // call didAddPage hooks before any content is added to the page\n table.callWillDrawPageHooks(doc, cursor);\n if (table.settings.showHead === 'everyPage') {\n table.head.forEach(function (row) { return printRow(doc, table, row, cursor, columns); });\n doc.applyStyles(doc.userStyles);\n }\n}\nfunction nextPage(doc) {\n var current = doc.pageNumber();\n doc.setPage(current + 1);\n var newCurrent = doc.pageNumber();\n if (newCurrent === current) {\n doc.addPage();\n return true;\n }\n return false;\n}\n\nfunction applyPlugin(jsPDF) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n jsPDF.API.autoTable = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var options = args[0];\n var input = parseInput(this, options);\n var table = createTable(this, input);\n drawTable(this, table);\n return this;\n };\n // Assign false to enable `doc.lastAutoTable.finalY || 40` sugar\n jsPDF.API.lastAutoTable = false;\n jsPDF.API.autoTableText = function (text, x, y, styles) {\n autoTableText(text, x, y, styles, this);\n };\n jsPDF.API.autoTableSetDefaults = function (defaults) {\n DocHandler.setDefaults(defaults, this);\n return this;\n };\n jsPDF.autoTableSetDefaults = function (defaults, doc) {\n DocHandler.setDefaults(defaults, doc);\n };\n jsPDF.API.autoTableHtmlToJson = function (tableElem, includeHiddenElements) {\n var _a;\n if (includeHiddenElements === void 0) { includeHiddenElements = false; }\n if (typeof window === 'undefined') {\n console.error('Cannot run autoTableHtmlToJson in non browser environment');\n return null;\n }\n var doc = new DocHandler(this);\n var _b = parseHtml(doc, tableElem, window, includeHiddenElements, false), head = _b.head, body = _b.body;\n var columns = ((_a = head[0]) === null || _a === void 0 ? void 0 : _a.map(function (c) { return c.content; })) || [];\n return { columns: columns, rows: body, data: body };\n };\n}\n\nvar _a;\nfunction autoTable(d, options) {\n var input = parseInput(d, options);\n var table = createTable(d, input);\n drawTable(d, table);\n}\n// Experimental export\nfunction __createTable(d, options) {\n var input = parseInput(d, options);\n return createTable(d, input);\n}\nfunction __drawTable(d, table) {\n drawTable(d, table);\n}\ntry {\n if (typeof window !== 'undefined' && window) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var anyWindow = window;\n var jsPDF = anyWindow.jsPDF || ((_a = anyWindow.jspdf) === null || _a === void 0 ? void 0 : _a.jsPDF);\n if (jsPDF) {\n applyPlugin(jsPDF);\n }\n }\n}\ncatch (error) {\n console.error('Could not apply autoTable plugin', error);\n}\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9qc3BkZi1hdXRvdGFibGUvZGlzdC9qc3BkZi5wbHVnaW4uYXV0b3RhYmxlLm1qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLDBCQUEwQjtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLG9EQUFvRDtBQUNuRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCLHNDQUFzQyxrQkFBa0I7QUFDbkYsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixvREFBb0Q7QUFDekUsb0JBQW9CLDhEQUE4RDtBQUNsRixvQkFBb0I7QUFDcEIsb0JBQW9CLDhEQUE4RDtBQUNsRiw0QkFBNEIsZ0JBQWdCO0FBQzVDLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYiw0QkFBNEI7QUFDNUIsU0FBUztBQUNULGlCQUFpQixRQUFRLG1CQUFtQixVQUFVLHFCQUFxQjtBQUMzRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsZ0NBQWdDO0FBQy9ELGtDQUFrQyx3QkFBd0I7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiw0Q0FBNEM7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxvQkFBb0IsOEJBQThCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixzQkFBc0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IscUJBQXFCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdURBQXVELGdCQUFnQjtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwwQkFBMEI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCLHNCQUFzQjtBQUN0QixzQkFBc0I7QUFDdEIsc0JBQXNCO0FBQ3RCLDhCQUE4QjtBQUM5Qix3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlEO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRCwwQkFBMEI7QUFDcEYsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQSxxREFBcUQsZ0JBQWdCO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsMEJBQTBCO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyw0QkFBNEI7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGFBQWE7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRCw2Q0FBNkM7QUFDbkc7QUFDQTtBQUNBLHNEQUFzRCw2Q0FBNkM7QUFDbkc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCx3QkFBd0I7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0QsZ0JBQWdCO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQsZ0JBQWdCO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJFQUEyRSxrQ0FBa0M7QUFDN0c7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELFFBQVEsK0dBQStHO0FBQzlLO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsZ0JBQWdCO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFD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Q0EsS0FBSztBQUNMO0FBQ0Esb0hBQW9IO0FBQ3BIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQiwwQkFBMEI7QUFDOUMsMERBQTBELFVBQVU7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQsMEJBQTBCO0FBQ3RGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLG9EQUFvRDtBQUNoRztBQUNBO0FBQ0E7QUFDQTtBQUNB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Q0E7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpR0FBaUcsbUJBQW1CO0FBQ3BILGlCQUFpQjtBQUNqQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFc0kiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2pzcGRmLWF1dG90YWJsZS9kaXN0L2pzcGRmLnBsdWdpbi5hdXRvdGFibGUubWpzPzE0YTAiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBJbXByb3ZlZCB0ZXh0IGZ1bmN0aW9uIHdpdGggaGFsaWduIGFuZCB2YWxpZ24gc3VwcG9ydFxuICogSW5zcGlyYXRpb24gZnJvbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yODMyNzUxMC9hbGlnbi10ZXh0LXJpZ2h0LXVzaW5nLWpzcGRmLzI4NDMzMTEzIzI4NDMzMTEzXG4gKi9cbmZ1bmN0aW9uIGF1dG9UYWJsZVRleHQgKHRleHQsIHgsIHksIHN0eWxlcywgZG9jKSB7XG4gICAgc3R5bGVzID0gc3R5bGVzIHx8IHt9O1xuICAgIHZhciBQSFlTSUNBTF9MSU5FX0hFSUdIVCA9IDEuMTU7XG4gICAgdmFyIGsgPSBkb2MuaW50ZXJuYWwuc2NhbGVGYWN0b3I7XG4gICAgdmFyIGZvbnRTaXplID0gZG9jLmludGVybmFsLmdldEZvbnRTaXplKCkgLyBrO1xuICAgIHZhciBsaW5lSGVpZ2h0RmFjdG9yID0gZG9jLmdldExpbmVIZWlnaHRGYWN0b3JcbiAgICAgICAgPyBkb2MuZ2V0TGluZUhlaWdodEZhY3RvcigpXG4gICAgICAgIDogUEhZU0lDQUxfTElORV9IRUlHSFQ7XG4gICAgdmFyIGxpbmVIZWlnaHQgPSBmb250U2l6ZSAqIGxpbmVIZWlnaHRGYWN0b3I7XG4gICAgdmFyIHNwbGl0UmVnZXggPSAvXFxyXFxufFxccnxcXG4vZztcbiAgICB2YXIgc3BsaXRUZXh0ID0gJyc7XG4gICAgdmFyIGxpbmVDb3VudCA9IDE7XG4gICAgaWYgKHN0eWxlcy52YWxpZ24gPT09ICdtaWRkbGUnIHx8XG4gICAgICAgIHN0eWxlcy52YWxpZ24gPT09ICdib3R0b20nIHx8XG4gICAgICAgIHN0eWxlcy5oYWxpZ24gPT09ICdjZW50ZXInIHx8XG4gICAgICAgIHN0eWxlcy5oYWxpZ24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgc3BsaXRUZXh0ID0gdHlwZW9mIHRleHQgPT09ICdzdHJpbmcnID8gdGV4dC5zcGxpdChzcGxpdFJlZ2V4KSA6IHRleHQ7XG4gICAgICAgIGxpbmVDb3VudCA9IHNwbGl0VGV4dC5sZW5ndGggfHwgMTtcbiAgICB9XG4gICAgLy8gQWxpZ24gdGhlIHRvcFxuICAgIHkgKz0gZm9udFNpemUgKiAoMiAtIFBIWVNJQ0FMX0xJTkVfSEVJR0hUKTtcbiAgICBpZiAoc3R5bGVzLnZhbGlnbiA9PT0gJ21pZGRsZScpXG4gICAgICAgIHkgLT0gKGxpbmVDb3VudCAvIDIpICogbGluZUhlaWdodDtcbiAgICBlbHNlIGlmIChzdHlsZXMudmFsaWduID09PSAnYm90dG9tJylcbiAgICAgICAgeSAtPSBsaW5lQ291bnQgKiBsaW5lSGVpZ2h0O1xuICAgIGlmIChzdHlsZXMuaGFsaWduID09PSAnY2VudGVyJyB8fCBzdHlsZXMuaGFsaWduID09PSAncmlnaHQnKSB7XG4gICAgICAgIHZhciBhbGlnblNpemUgPSBmb250U2l6ZTtcbiAgICAgICAgaWYgKHN0eWxlcy5oYWxpZ24gPT09ICdjZW50ZXInKVxuICAgICAgICAgICAgYWxpZ25TaXplICo9IDAuNTtcbiAgICAgICAgaWYgKHNwbGl0VGV4dCAmJiBsaW5lQ291bnQgPj0gMSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaUxpbmUgPSAwOyBpTGluZSA8IHNwbGl0VGV4dC5sZW5ndGg7IGlMaW5lKyspIHtcbiAgICAgICAgICAgICAgICBkb2MudGV4dChzcGxpdFRleHRbaUxpbmVdLCB4IC0gZG9jLmdldFN0cmluZ1VuaXRXaWR0aChzcGxpdFRleHRbaUxpbmVdKSAqIGFsaWduU2l6ZSwgeSk7XG4gICAgICAgICAgICAgICAgeSArPSBsaW5lSGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRvYztcbiAgICAgICAgfVxuICAgICAgICB4IC09IGRvYy5nZXRTdHJpbmdVbml0V2lkdGgodGV4dCkgKiBhbGlnblNpemU7XG4gICAgfVxuICAgIGlmIChzdHlsZXMuaGFsaWduID09PSAnanVzdGlmeScpIHtcbiAgICAgICAgZG9jLnRleHQodGV4dCwgeCwgeSwgeyBtYXhXaWR0aDogc3R5bGVzLm1heFdpZHRoIHx8IDEwMCwgYWxpZ246ICdqdXN0aWZ5JyB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGRvYy50ZXh0KHRleHQsIHgsIHkpO1xuICAgIH1cbiAgICByZXR1cm4gZG9jO1xufVxuXG52YXIgZ2xvYmFsRGVmYXVsdHMgPSB7fTtcbnZhciBEb2NIYW5kbGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERvY0hhbmRsZXIoanNQREZEb2N1bWVudCkge1xuICAgICAgICB0aGlzLmpzUERGRG9jdW1lbnQgPSBqc1BERkRvY3VtZW50O1xuICAgICAgICB0aGlzLnVzZXJTdHlsZXMgPSB7XG4gICAgICAgICAgICAvLyBCbGFjayBmb3IgdmVyc2lvbnMgb2YganNwZGYgd2l0aG91dCBnZXRUZXh0Q29sb3JcbiAgICAgICAgICAgIHRleHRDb2xvcjoganNQREZEb2N1bWVudC5nZXRUZXh0Q29sb3JcbiAgICAgICAgICAgICAgICA/IHRoaXMuanNQREZEb2N1bWVudC5nZXRUZXh0Q29sb3IoKVxuICAgICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgIGZvbnRTaXplOiBqc1BERkRvY3VtZW50LmludGVybmFsLmdldEZvbnRTaXplKCksXG4gICAgICAgICAgICBmb250U3R5bGU6IGpzUERGRG9jdW1lbnQuaW50ZXJuYWwuZ2V0Rm9udCgpLmZvbnRTdHlsZSxcbiAgICAgICAgICAgIGZvbnQ6IGpzUERGRG9jdW1lbnQuaW50ZXJuYWwuZ2V0Rm9udCgpLmZvbnROYW1lLFxuICAgICAgICAgICAgLy8gMCBmb3IgdmVyc2lvbnMgb2YganNwZGYgd2l0aG91dCBnZXRMaW5lV2lkdGhcbiAgICAgICAgICAgIGxpbmVXaWR0aDoganNQREZEb2N1bWVudC5nZXRMaW5lV2lkdGhcbiAgICAgICAgICAgICAgICA/IHRoaXMuanNQREZEb2N1bWVudC5nZXRMaW5lV2lkdGgoKVxuICAgICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgIC8vIEJsYWNrIGZvciB2ZXJzaW9ucyBvZiBqc3BkZiB3aXRob3V0IGdldERyYXdDb2xvclxuICAgICAgICAgICAgbGluZUNvbG9yOiBqc1BERkRvY3VtZW50LmdldERyYXdDb2xvclxuICAgICAgICAgICAgICAgID8gdGhpcy5qc1BERkRvY3VtZW50LmdldERyYXdDb2xvcigpXG4gICAgICAgICAgICAgICAgOiAwLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBEb2NIYW5kbGVyLnNldERlZmF1bHRzID0gZnVuY3Rpb24gKGRlZmF1bHRzLCBkb2MpIHtcbiAgICAgICAgaWYgKGRvYyA9PT0gdm9pZCAwKSB7IGRvYyA9IG51bGw7IH1cbiAgICAgICAgaWYgKGRvYykge1xuICAgICAgICAgICAgZG9jLl9fYXV0b1RhYmxlRG9jdW1lbnREZWZhdWx0cyA9IGRlZmF1bHRzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2xvYmFsRGVmYXVsdHMgPSBkZWZhdWx0cztcbiAgICAgICAgfVxuICAgIH07XG4gICAgRG9jSGFuZGxlci51bmlmeUNvbG9yID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYykpIHtcbiAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBjID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIFtjLCBjLCBjXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgYyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBbY107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRG9jSGFuZGxlci5wcm90b3R5cGUuYXBwbHlTdHlsZXMgPSBmdW5jdGlvbiAoc3R5bGVzLCBmb250T25seSkge1xuICAgICAgICAvLyBGb250IHN0eWxlIG5lZWRzIHRvIGJlIGFwcGxpZWQgYmVmb3JlIGZvbnRcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbW9uYmVuZ3Rzc29uL2pzUERGLUF1dG9UYWJsZS9pc3N1ZXMvNjMyXG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICBpZiAoZm9udE9ubHkgPT09IHZvaWQgMCkgeyBmb250T25seSA9IGZhbHNlOyB9XG4gICAgICAgIGlmIChzdHlsZXMuZm9udFN0eWxlICYmIHRoaXMuanNQREZEb2N1bWVudC5zZXRGb250U3R5bGUpIHtcbiAgICAgICAgICAgIHRoaXMuanNQREZEb2N1bWVudC5zZXRGb250U3R5bGUoc3R5bGVzLmZvbnRTdHlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9kID0gdGhpcy5qc1BERkRvY3VtZW50LmludGVybmFsLmdldEZvbnQoKSwgZm9udFN0eWxlID0gX2QuZm9udFN0eWxlLCBmb250TmFtZSA9IF9kLmZvbnROYW1lO1xuICAgICAgICBpZiAoc3R5bGVzLmZvbnQpXG4gICAgICAgICAgICBmb250TmFtZSA9IHN0eWxlcy5mb250O1xuICAgICAgICBpZiAoc3R5bGVzLmZvbnRTdHlsZSkge1xuICAgICAgICAgICAgZm9udFN0eWxlID0gc3R5bGVzLmZvbnRTdHlsZTtcbiAgICAgICAgICAgIHZhciBhdmFpbGFibGVGb250U3R5bGVzID0gdGhpcy5nZXRGb250TGlzdCgpW2ZvbnROYW1lXTtcbiAgICAgICAgICAgIGlmIChhdmFpbGFibGVGb250U3R5bGVzICYmXG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlRm9udFN0eWxlcy5pbmRleE9mKGZvbnRTdHlsZSkgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgdGhpcy5qc1BERkRvY3VtZW50LnNldEZvbnRTdHlsZSkge1xuICAgICAgICAgICAgICAgIC8vIENvbW1vbiBpc3N1ZSB3YXMgdGhhdCB0aGUgZGVmYXVsdCBib2xkIGluIGhlYWRlcnNcbiAgICAgICAgICAgICAgICAvLyBtYWRlIGN1c3RvbSBmb250cyBub3Qgd29yay4gRm9yIGV4YW1wbGU6XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbW9uYmVuZ3Rzc29uL2pzUERGLUF1dG9UYWJsZS9pc3N1ZXMvNjUzXG4gICAgICAgICAgICAgICAgdGhpcy5qc1BERkRvY3VtZW50LnNldEZvbnRTdHlsZShhdmFpbGFibGVGb250U3R5bGVzWzBdKTtcbiAgICAgICAgICAgICAgICBmb250U3R5bGUgPSBhdmFpbGFibGVGb250U3R5bGVzWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuanNQREZEb2N1bWVudC5zZXRGb250KGZvbnROYW1lLCBmb250U3R5bGUpO1xuICAgICAgICBpZiAoc3R5bGVzLmZvbnRTaXplKVxuICAgICAgICAgICAgdGhpcy5qc1BERkRvY3VtZW50LnNldEZvbnRTaXplKHN0eWxlcy5mb250U2l6ZSk7XG4gICAgICAgIGlmIChmb250T25seSkge1xuICAgICAgICAgICAgcmV0dXJuOyAvLyBQZXJmb3JtYW5jZSBpbXByb3ZlbWVudFxuICAgICAgICB9XG4gICAgICAgIHZhciBjb2xvciA9IERvY0hhbmRsZXIudW5pZnlDb2xvcihzdHlsZXMuZmlsbENvbG9yKTtcbiAgICAgICAgaWYgKGNvbG9yKVxuICAgICAgICAgICAgKF9hID0gdGhpcy5qc1BERkRvY3VtZW50KS5zZXRGaWxsQ29sb3IuYXBwbHkoX2EsIGNvbG9yKTtcbiAgICAgICAgY29sb3IgPSBEb2NIYW5kbGVyLnVuaWZ5Q29sb3Ioc3R5bGVzLnRleHRDb2xvcik7XG4gICAgICAgIGlmIChjb2xvcilcbiAgICAgICAgICAgIChfYiA9IHRoaXMuanNQREZEb2N1bWVudCkuc2V0VGV4dENvbG9yLmFwcGx5KF9iLCBjb2xvcik7XG4gICAgICAgIGNvbG9yID0gRG9jSGFuZGxlci51bmlmeUNvbG9yKHN0eWxlcy5saW5lQ29sb3IpO1xuICAgICAgICBpZiAoY29sb3IpXG4gICAgICAgICAgICAoX2MgPSB0aGlzLmpzUERGRG9jdW1lbnQpLnNldERyYXdDb2xvci5hcHBseShfYywgY29sb3IpO1xuICAgICAgICBpZiAodHlwZW9mIHN0eWxlcy5saW5lV2lkdGggPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB0aGlzLmpzUERGRG9jdW1lbnQuc2V0TGluZVdpZHRoKHN0eWxlcy5saW5lV2lkdGgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBEb2NIYW5kbGVyLnByb3RvdHlwZS5zcGxpdFRleHRUb1NpemUgPSBmdW5jdGlvbiAodGV4dCwgc2l6ZSwgb3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5qc1BERkRvY3VtZW50LnNwbGl0VGV4dFRvU2l6ZSh0ZXh0LCBzaXplLCBvcHRzKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEFkZHMgYSByZWN0YW5nbGUgdG8gdGhlIFBERlxuICAgICAqIEBwYXJhbSB4IENvb3JkaW5hdGUgKGluIHVuaXRzIGRlY2xhcmVkIGF0IGluY2VwdGlvbiBvZiBQREYgZG9jdW1lbnQpIGFnYWluc3QgbGVmdCBlZGdlIG9mIHRoZSBwYWdlXG4gICAgICogQHBhcmFtIHkgQ29vcmRpbmF0ZSAoaW4gdW5pdHMgZGVjbGFyZWQgYXQgaW5jZXB0aW9uIG9mIFBERiBkb2N1bWVudCkgYWdhaW5zdCB1cHBlciBlZGdlIG9mIHRoZSBwYWdlXG4gICAgICogQHBhcmFtIHdpZHRoIFdpZHRoIChpbiB1bml0cyBkZWNsYXJlZCBhdCBpbmNlcHRpb24gb2YgUERGIGRvY3VtZW50KVxuICAgICAqIEBwYXJhbSBoZWlnaHQgSGVpZ2h0IChpbiB1bml0cyBkZWNsYXJlZCBhdCBpbmNlcHRpb24gb2YgUERGIGRvY3VtZW50KVxuICAgICAqIEBwYXJhbSBmaWxsU3R5bGUgQSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgcGFpbnRpbmcgc3R5bGUgb3IgbnVsbC4gVmFsaWQgc3R5bGVzIGluY2x1ZGU6ICdTJyBbZGVmYXVsdF0gLSBzdHJva2UsICdGJyAtIGZpbGwsIGFuZCAnREYnIChvciAnRkQnKSAtIGZpbGwgdGhlbiBzdHJva2UuXG4gICAgICovXG4gICAgRG9jSGFuZGxlci5wcm90b3R5cGUucmVjdCA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmaWxsU3R5bGUpIHtcbiAgICAgICAgLy8gbnVsbCBpcyBleGNsdWRlZCBmcm9tIGZpbGxTdHlsZSBwb3NzaWJsZSB2YWx1ZXMgYmVjYXVzZSBpdCBpc24ndCBuZWVkZWRcbiAgICAgICAgLy8gYW5kIGlzIHByb25lIHRvIGJ1Z3MgYXMgaXQncyB1c2VkIHRvIHBvc3Rwb25lIHNldHRpbmcgdGhlIHN0eWxlXG4gICAgICAgIC8vIGh0dHBzOi8vcmF3Z2l0LmNvbS9NclJpby9qc1BERi9tYXN0ZXIvZG9jcy9qc1BERi5odG1sI3JlY3RcbiAgICAgICAgcmV0dXJuIHRoaXMuanNQREZEb2N1bWVudC5yZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIGZpbGxTdHlsZSk7XG4gICAgfTtcbiAgICBEb2NIYW5kbGVyLnByb3RvdHlwZS5nZXRMYXN0QXV0b1RhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5qc1BERkRvY3VtZW50Lmxhc3RBdXRvVGFibGUgfHwgbnVsbDtcbiAgICB9O1xuICAgIERvY0hhbmRsZXIucHJvdG90eXBlLmdldFRleHRXaWR0aCA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpzUERGRG9jdW1lbnQuZ2V0VGV4dFdpZHRoKHRleHQpO1xuICAgIH07XG4gICAgRG9jSGFuZGxlci5wcm90b3R5cGUuZ2V0RG9jdW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpzUERGRG9jdW1lbnQ7XG4gICAgfTtcbiAgICBEb2NIYW5kbGVyLnByb3RvdHlwZS5zZXRQYWdlID0gZnVuY3Rpb24gKHBhZ2UpIHtcbiAgICAgICAgdGhpcy5qc1BERkRvY3VtZW50LnNldFBhZ2UocGFnZSk7XG4gICAgfTtcbiAgICBEb2NIYW5kbGVyLnByb3RvdHlwZS5hZGRQYWdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5qc1BERkRvY3VtZW50LmFkZFBhZ2UoKTtcbiAgICB9O1xuICAgIERvY0hhbmRsZXIucHJvdG90eXBlLmdldEZvbnRMaXN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5qc1BERkRvY3VtZW50LmdldEZvbnRMaXN0KCk7XG4gICAgfTtcbiAgICBEb2NIYW5kbGVyLnByb3RvdHlwZS5nZXRHbG9iYWxPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsRGVmYXVsdHMgfHwge307XG4gICAgfTtcbiAgICBEb2NIYW5kbGVyLnByb3RvdHlwZS5nZXREb2N1bWVudE9wdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmpzUERGRG9jdW1lbnQuX19hdXRvVGFibGVEb2N1bWVudERlZmF1bHRzIHx8IHt9O1xuICAgIH07XG4gICAgRG9jSGFuZGxlci5wcm90b3R5cGUucGFnZVNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwYWdlU2l6ZSA9IHRoaXMuanNQREZEb2N1bWVudC5pbnRlcm5hbC5wYWdlU2l6ZTtcbiAgICAgICAgLy8gSlNQREYgMS40IHVzZXMgZ2V0IGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIHByb3BlcnRpZXMgb24gcGFnZVNpemVcbiAgICAgICAgaWYgKHBhZ2VTaXplLndpZHRoID09IG51bGwpIHtcbiAgICAgICAgICAgIHBhZ2VTaXplID0geyB3aWR0aDogcGFnZVNpemUuZ2V0V2lkdGgoKSwgaGVpZ2h0OiBwYWdlU2l6ZS5nZXRIZWlnaHQoKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYWdlU2l6ZTtcbiAgICB9O1xuICAgIERvY0hhbmRsZXIucHJvdG90eXBlLnNjYWxlRmFjdG9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5qc1BERkRvY3VtZW50LmludGVybmFsLnNjYWxlRmFjdG9yO1xuICAgIH07XG4gICAgRG9jSGFuZGxlci5wcm90b3R5cGUuZ2V0TGluZUhlaWdodEZhY3RvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRvYyA9IHRoaXMuanNQREZEb2N1bWVudDtcbiAgICAgICAgcmV0dXJuIGRvYy5nZXRMaW5lSGVpZ2h0RmFjdG9yID8gZG9jLmdldExpbmVIZWlnaHRGYWN0b3IoKSA6IDEuMTU7XG4gICAgfTtcbiAgICBEb2NIYW5kbGVyLnByb3RvdHlwZS5nZXRMaW5lSGVpZ2h0ID0gZnVuY3Rpb24gKGZvbnRTaXplKSB7XG4gICAgICAgIHJldHVybiAoZm9udFNpemUgLyB0aGlzLnNjYWxlRmFjdG9yKCkpICogdGhpcy5nZXRMaW5lSGVpZ2h0RmFjdG9yKCk7XG4gICAgfTtcbiAgICBEb2NIYW5kbGVyLnByb3RvdHlwZS5wYWdlTnVtYmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFnZUluZm8gPSB0aGlzLmpzUERGRG9jdW1lbnQuaW50ZXJuYWwuZ2V0Q3VycmVudFBhZ2VJbmZvKCk7XG4gICAgICAgIGlmICghcGFnZUluZm8pIHtcbiAgICAgICAgICAgIC8vIE9ubHkgcmVjZW50IHZlcnNpb25zIG9mIGpzcGRmIGhhcyBwYWdlSW5mb1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuanNQREZEb2N1bWVudC5pbnRlcm5hbC5nZXROdW1iZXJPZlBhZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhZ2VJbmZvLnBhZ2VOdW1iZXI7XG4gICAgfTtcbiAgICByZXR1cm4gRG9jSGFuZGxlcjtcbn0oKSk7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxufTtcblxudmFyIEh0bWxSb3dJbnB1dCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoSHRtbFJvd0lucHV0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEh0bWxSb3dJbnB1dChlbGVtZW50KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gSHRtbFJvd0lucHV0O1xufShBcnJheSkpO1xuLy8gQmFzZSBzdHlsZSBmb3IgYWxsIHRoZW1lc1xuZnVuY3Rpb24gZGVmYXVsdFN0eWxlcyhzY2FsZUZhY3Rvcikge1xuICAgIHJldHVybiB7XG4gICAgICAgIGZvbnQ6ICdoZWx2ZXRpY2EnLCAvLyBoZWx2ZXRpY2EsIHRpbWVzLCBjb3VyaWVyXG4gICAgICAgIGZvbnRTdHlsZTogJ25vcm1hbCcsIC8vIG5vcm1hbCwgYm9sZCwgaXRhbGljLCBib2xkaXRhbGljXG4gICAgICAgIG92ZXJmbG93OiAnbGluZWJyZWFrJywgLy8gbGluZWJyZWFrLCBlbGxpcHNpemUsIHZpc2libGUgb3IgaGlkZGVuXG4gICAgICAgIGZpbGxDb2xvcjogZmFsc2UsIC8vIEVpdGhlciBmYWxzZSBmb3IgdHJhbnNwYXJlbnQsIHJiZyBhcnJheSBlLmcuIFsyNTUsIDI1NSwgMjU1XSBvciBncmF5IGxldmVsIGUuZyAyMDBcbiAgICAgICAgdGV4dENvbG9yOiAyMCxcbiAgICAgICAgaGFsaWduOiAnbGVmdCcsIC8vIGxlZnQsIGNlbnRlciwgcmlnaHQsIGp1c3RpZnlcbiAgICAgICAgdmFsaWduOiAndG9wJywgLy8gdG9wLCBtaWRkbGUsIGJvdHRvbVxuICAgICAgICBmb250U2l6ZTogMTAsXG4gICAgICAgIGNlbGxQYWRkaW5nOiA1IC8gc2NhbGVGYWN0b3IsIC8vIG51bWJlciBvciB7dG9wLGxlZnQscmlnaHQsbGVmdCx2ZXJ0aWNhbCxob3Jpem9udGFsfVxuICAgICAgICBsaW5lQ29sb3I6IDIwMCxcbiAgICAgICAgbGluZVdpZHRoOiAwLFxuICAgICAgICBjZWxsV2lkdGg6ICdhdXRvJywgLy8gJ2F1dG8nfCd3cmFwJ3xudW1iZXJcbiAgICAgICAgbWluQ2VsbEhlaWdodDogMCxcbiAgICAgICAgbWluQ2VsbFdpZHRoOiAwLFxuICAgIH07XG59XG5mdW5jdGlvbiBnZXRUaGVtZShuYW1lKSB7XG4gICAgdmFyIHRoZW1lcyA9IHtcbiAgICAgICAgc3RyaXBlZDoge1xuICAgICAgICAgICAgdGFibGU6IHsgZmlsbENvbG9yOiAyNTUsIHRleHRDb2xvcjogODAsIGZvbnRTdHlsZTogJ25vcm1hbCcgfSxcbiAgICAgICAgICAgIGhlYWQ6IHsgdGV4dENvbG9yOiAyNTUsIGZpbGxDb2xvcjogWzQxLCAxMjgsIDE4NV0sIGZvbnRTdHlsZTogJ2JvbGQnIH0sXG4gICAgICAgICAgICBib2R5OiB7fSxcbiAgICAgICAgICAgIGZvb3Q6IHsgdGV4dENvbG9yOiAyNTUsIGZpbGxDb2xvcjogWzQxLCAxMjgsIDE4NV0sIGZvbnRTdHlsZTogJ2JvbGQnIH0sXG4gICAgICAgICAgICBhbHRlcm5hdGVSb3c6IHsgZmlsbENvbG9yOiAyNDUgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZ3JpZDoge1xuICAgICAgICAgICAgdGFibGU6IHtcbiAgICAgICAgICAgICAgICBmaWxsQ29sb3I6IDI1NSxcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6IDgwLFxuICAgICAgICAgICAgICAgIGZvbnRTdHlsZTogJ25vcm1hbCcsXG4gICAgICAgICAgICAgICAgbGluZVdpZHRoOiAwLjEsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGVhZDoge1xuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogMjU1LFxuICAgICAgICAgICAgICAgIGZpbGxDb2xvcjogWzI2LCAxODgsIDE1Nl0sXG4gICAgICAgICAgICAgICAgZm9udFN0eWxlOiAnYm9sZCcsXG4gICAgICAgICAgICAgICAgbGluZVdpZHRoOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJvZHk6IHt9LFxuICAgICAgICAgICAgZm9vdDoge1xuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogMjU1LFxuICAgICAgICAgICAgICAgIGZpbGxDb2xvcjogWzI2LCAxODgsIDE1Nl0sXG4gICAgICAgICAgICAgICAgZm9udFN0eWxlOiAnYm9sZCcsXG4gICAgICAgICAgICAgICAgbGluZVdpZHRoOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFsdGVybmF0ZVJvdzoge30sXG4gICAgICAgIH0sXG4gICAgICAgIHBsYWluOiB7IGhlYWQ6IHsgZm9udFN0eWxlOiAnYm9sZCcgfSwgZm9vdDogeyBmb250U3R5bGU6ICdib2xkJyB9IH0sXG4gICAgfTtcbiAgICByZXR1cm4gdGhlbWVzW25hbWVdO1xufVxuXG5mdW5jdGlvbiBnZXRTdHJpbmdXaWR0aCh0ZXh0LCBzdHlsZXMsIGRvYykge1xuICAgIGRvYy5hcHBseVN0eWxlcyhzdHlsZXMsIHRydWUpO1xuICAgIHZhciB0ZXh0QXJyID0gQXJyYXkuaXNBcnJheSh0ZXh0KSA/IHRleHQgOiBbdGV4dF07XG4gICAgdmFyIHdpZGVzdExpbmVXaWR0aCA9IHRleHRBcnJcbiAgICAgICAgLm1hcChmdW5jdGlvbiAodGV4dCkgeyByZXR1cm4gZG9jLmdldFRleHRXaWR0aCh0ZXh0KTsgfSlcbiAgICAgICAgLnJlZHVjZShmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gTWF0aC5tYXgoYSwgYik7IH0sIDApO1xuICAgIHJldHVybiB3aWRlc3RMaW5lV2lkdGg7XG59XG5mdW5jdGlvbiBhZGRUYWJsZUJvcmRlcihkb2MsIHRhYmxlLCBzdGFydFBvcywgY3Vyc29yKSB7XG4gICAgdmFyIGxpbmVXaWR0aCA9IHRhYmxlLnNldHRpbmdzLnRhYmxlTGluZVdpZHRoO1xuICAgIHZhciBsaW5lQ29sb3IgPSB0YWJsZS5zZXR0aW5ncy50YWJsZUxpbmVDb2xvcjtcbiAgICBkb2MuYXBwbHlTdHlsZXMoeyBsaW5lV2lkdGg6IGxpbmVXaWR0aCwgbGluZUNvbG9yOiBsaW5lQ29sb3IgfSk7XG4gICAgdmFyIGZpbGxTdHlsZSA9IGdldEZpbGxTdHlsZShsaW5lV2lkdGgsIGZhbHNlKTtcbiAgICBpZiAoZmlsbFN0eWxlKSB7XG4gICAgICAgIGRvYy5yZWN0KHN0YXJ0UG9zLngsIHN0YXJ0UG9zLnksIHRhYmxlLmdldFdpZHRoKGRvYy5wYWdlU2l6ZSgpLndpZHRoKSwgY3Vyc29yLnkgLSBzdGFydFBvcy55LCBmaWxsU3R5bGUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldEZpbGxTdHlsZShsaW5lV2lkdGgsIGZpbGxDb2xvcikge1xuICAgIHZhciBkcmF3TGluZSA9IGxpbmVXaWR0aCA+IDA7XG4gICAgdmFyIGRyYXdCYWNrZ3JvdW5kID0gZmlsbENvbG9yIHx8IGZpbGxDb2xvciA9PT0gMDtcbiAgICBpZiAoZHJhd0xpbmUgJiYgZHJhd0JhY2tncm91bmQpIHtcbiAgICAgICAgcmV0dXJuICdERic7IC8vIEZpbGwgdGhlbiBzdHJva2VcbiAgICB9XG4gICAgZWxzZSBpZiAoZHJhd0xpbmUpIHtcbiAgICAgICAgcmV0dXJuICdTJzsgLy8gT25seSBzdHJva2UgKHRyYW5zcGFyZW50IGJhY2tncm91bmQpXG4gICAgfVxuICAgIGVsc2UgaWYgKGRyYXdCYWNrZ3JvdW5kKSB7XG4gICAgICAgIHJldHVybiAnRic7IC8vIE9ubHkgZmlsbCwgbm8gc3Ryb2tlXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5mdW5jdGlvbiBwYXJzZVNwYWNpbmcodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICB2YWx1ZSA9IHZhbHVlIHx8IGRlZmF1bHRWYWx1ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+PSA0KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRvcDogdmFsdWVbMF0sXG4gICAgICAgICAgICAgICAgcmlnaHQ6IHZhbHVlWzFdLFxuICAgICAgICAgICAgICAgIGJvdHRvbTogdmFsdWVbMl0sXG4gICAgICAgICAgICAgICAgbGVmdDogdmFsdWVbM10sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0b3A6IHZhbHVlWzBdLFxuICAgICAgICAgICAgICAgIHJpZ2h0OiB2YWx1ZVsxXSxcbiAgICAgICAgICAgICAgICBib3R0b206IHZhbHVlWzJdLFxuICAgICAgICAgICAgICAgIGxlZnQ6IHZhbHVlWzFdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdG9wOiB2YWx1ZVswXSxcbiAgICAgICAgICAgICAgICByaWdodDogdmFsdWVbMV0sXG4gICAgICAgICAgICAgICAgYm90dG9tOiB2YWx1ZVswXSxcbiAgICAgICAgICAgICAgICBsZWZ0OiB2YWx1ZVsxXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsdWUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlWzBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS52ZXJ0aWNhbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHZhbHVlLnRvcCA9IHZhbHVlLnZlcnRpY2FsO1xuICAgICAgICAgICAgdmFsdWUuYm90dG9tID0gdmFsdWUudmVydGljYWw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS5ob3Jpem9udGFsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdmFsdWUucmlnaHQgPSB2YWx1ZS5ob3Jpem9udGFsO1xuICAgICAgICAgICAgdmFsdWUubGVmdCA9IHZhbHVlLmhvcml6b250YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxlZnQ6IChfYSA9IHZhbHVlLmxlZnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIHRvcDogKF9iID0gdmFsdWUudG9wKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBkZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICByaWdodDogKF9jID0gdmFsdWUucmlnaHQpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIGJvdHRvbTogKF9kID0gdmFsdWUuYm90dG9tKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBkZWZhdWx0VmFsdWUsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4geyB0b3A6IHZhbHVlLCByaWdodDogdmFsdWUsIGJvdHRvbTogdmFsdWUsIGxlZnQ6IHZhbHVlIH07XG59XG5mdW5jdGlvbiBnZXRQYWdlQXZhaWxhYmxlV2lkdGgoZG9jLCB0YWJsZSkge1xuICAgIHZhciBtYXJnaW5zID0gcGFyc2VTcGFjaW5nKHRhYmxlLnNldHRpbmdzLm1hcmdpbiwgMCk7XG4gICAgcmV0dXJuIGRvYy5wYWdlU2l6ZSgpLndpZHRoIC0gKG1hcmdpbnMubGVmdCArIG1hcmdpbnMucmlnaHQpO1xufVxuXG4vLyBMaW1pdGF0aW9uc1xuLy8gLSBObyBzdXBwb3J0IGZvciBib3JkZXIgc3BhY2luZ1xuLy8gLSBObyBzdXBwb3J0IGZvciB0cmFuc3BhcmVuY3lcbmZ1bmN0aW9uIHBhcnNlQ3NzKHN1cHBvcnRlZEZvbnRzLCBlbGVtZW50LCBzY2FsZUZhY3Rvciwgc3R5bGUsIHdpbmRvdykge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgcHhTY2FsZUZhY3RvciA9IDk2IC8gNzI7XG4gICAgdmFyIGJhY2tncm91bmRDb2xvciA9IHBhcnNlQ29sb3IoZWxlbWVudCwgZnVuY3Rpb24gKGVsZW0pIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW0pWydiYWNrZ3JvdW5kQ29sb3InXTtcbiAgICB9KTtcbiAgICBpZiAoYmFja2dyb3VuZENvbG9yICE9IG51bGwpXG4gICAgICAgIHJlc3VsdC5maWxsQ29sb3IgPSBiYWNrZ3JvdW5kQ29sb3I7XG4gICAgdmFyIHRleHRDb2xvciA9IHBhcnNlQ29sb3IoZWxlbWVudCwgZnVuY3Rpb24gKGVsZW0pIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW0pWydjb2xvciddO1xuICAgIH0pO1xuICAgIGlmICh0ZXh0Q29sb3IgIT0gbnVsbClcbiAgICAgICAgcmVzdWx0LnRleHRDb2xvciA9IHRleHRDb2xvcjtcbiAgICB2YXIgcGFkZGluZyA9IHBhcnNlUGFkZGluZyhzdHlsZSwgc2NhbGVGYWN0b3IpO1xuICAgIGlmIChwYWRkaW5nKVxuICAgICAgICByZXN1bHQuY2VsbFBhZGRpbmcgPSBwYWRkaW5nO1xuICAgIHZhciBib3JkZXJDb2xvclNpZGUgPSAnYm9yZGVyVG9wQ29sb3InO1xuICAgIHZhciBmaW5hbFNjYWxlRmFjdG9yID0gcHhTY2FsZUZhY3RvciAqIHNjYWxlRmFjdG9yO1xuICAgIHZhciBidHcgPSBzdHlsZS5ib3JkZXJUb3BXaWR0aDtcbiAgICBpZiAoc3R5bGUuYm9yZGVyQm90dG9tV2lkdGggPT09IGJ0dyAmJlxuICAgICAgICBzdHlsZS5ib3JkZXJSaWdodFdpZHRoID09PSBidHcgJiZcbiAgICAgICAgc3R5bGUuYm9yZGVyTGVmdFdpZHRoID09PSBidHcpIHtcbiAgICAgICAgdmFyIGJvcmRlcldpZHRoID0gKHBhcnNlRmxvYXQoYnR3KSB8fCAwKSAvIGZpbmFsU2NhbGVGYWN0b3I7XG4gICAgICAgIGlmIChib3JkZXJXaWR0aClcbiAgICAgICAgICAgIHJlc3VsdC5saW5lV2lkdGggPSBib3JkZXJXaWR0aDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdC5saW5lV2lkdGggPSB7XG4gICAgICAgICAgICB0b3A6IChwYXJzZUZsb2F0KHN0eWxlLmJvcmRlclRvcFdpZHRoKSB8fCAwKSAvIGZpbmFsU2NhbGVGYWN0b3IsXG4gICAgICAgICAgICByaWdodDogKHBhcnNlRmxvYXQoc3R5bGUuYm9yZGVyUmlnaHRXaWR0aCkgfHwgMCkgLyBmaW5hbFNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgYm90dG9tOiAocGFyc2VGbG9hdChzdHlsZS5ib3JkZXJCb3R0b21XaWR0aCkgfHwgMCkgLyBmaW5hbFNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgbGVmdDogKHBhcnNlRmxvYXQoc3R5bGUuYm9yZGVyTGVmdFdpZHRoKSB8fCAwKSAvIGZpbmFsU2NhbGVGYWN0b3IsXG4gICAgICAgIH07XG4gICAgICAgIC8vIENob29zZSBib3JkZXIgY29sb3Igb2YgZmlyc3QgYXZhaWxhYmxlIHNpZGVcbiAgICAgICAgLy8gY291bGQgYmUgaW1wcm92ZWQgYnkgc3VwcG9ydGluZyBvYmplY3QgYXMgbGluZUNvbG9yXG4gICAgICAgIGlmICghcmVzdWx0LmxpbmVXaWR0aC50b3ApIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQubGluZVdpZHRoLnJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyQ29sb3JTaWRlID0gJ2JvcmRlclJpZ2h0Q29sb3InO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0LmxpbmVXaWR0aC5ib3R0b20pIHtcbiAgICAgICAgICAgICAgICBib3JkZXJDb2xvclNpZGUgPSAnYm9yZGVyQm90dG9tQ29sb3InO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0LmxpbmVXaWR0aC5sZWZ0KSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyQ29sb3JTaWRlID0gJ2JvcmRlckxlZnRDb2xvcic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIGJvcmRlckNvbG9yID0gcGFyc2VDb2xvcihlbGVtZW50LCBmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgICByZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbSlbYm9yZGVyQ29sb3JTaWRlXTtcbiAgICB9KTtcbiAgICBpZiAoYm9yZGVyQ29sb3IgIT0gbnVsbClcbiAgICAgICAgcmVzdWx0LmxpbmVDb2xvciA9IGJvcmRlckNvbG9yO1xuICAgIHZhciBhY2NlcHRlZCA9IFsnbGVmdCcsICdyaWdodCcsICdjZW50ZXInLCAnanVzdGlmeSddO1xuICAgIGlmIChhY2NlcHRlZC5pbmRleE9mKHN0eWxlLnRleHRBbGlnbikgIT09IC0xKSB7XG4gICAgICAgIHJlc3VsdC5oYWxpZ24gPSBzdHlsZS50ZXh0QWxpZ247XG4gICAgfVxuICAgIGFjY2VwdGVkID0gWydtaWRkbGUnLCAnYm90dG9tJywgJ3RvcCddO1xuICAgIGlmIChhY2NlcHRlZC5pbmRleE9mKHN0eWxlLnZlcnRpY2FsQWxpZ24pICE9PSAtMSkge1xuICAgICAgICByZXN1bHQudmFsaWduID0gc3R5bGUudmVydGljYWxBbGlnbjtcbiAgICB9XG4gICAgdmFyIHJlcyA9IHBhcnNlSW50KHN0eWxlLmZvbnRTaXplIHx8ICcnKTtcbiAgICBpZiAoIWlzTmFOKHJlcykpXG4gICAgICAgIHJlc3VsdC5mb250U2l6ZSA9IHJlcyAvIHB4U2NhbGVGYWN0b3I7XG4gICAgdmFyIGZvbnRTdHlsZSA9IHBhcnNlRm9udFN0eWxlKHN0eWxlKTtcbiAgICBpZiAoZm9udFN0eWxlKVxuICAgICAgICByZXN1bHQuZm9udFN0eWxlID0gZm9udFN0eWxlO1xuICAgIHZhciBmb250ID0gKHN0eWxlLmZvbnRGYW1pbHkgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHN1cHBvcnRlZEZvbnRzLmluZGV4T2YoZm9udCkgIT09IC0xKSB7XG4gICAgICAgIHJlc3VsdC5mb250ID0gZm9udDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIHBhcnNlRm9udFN0eWxlKHN0eWxlKSB7XG4gICAgdmFyIHJlcyA9ICcnO1xuICAgIGlmIChzdHlsZS5mb250V2VpZ2h0ID09PSAnYm9sZCcgfHxcbiAgICAgICAgc3R5bGUuZm9udFdlaWdodCA9PT0gJ2JvbGRlcicgfHxcbiAgICAgICAgcGFyc2VJbnQoc3R5bGUuZm9udFdlaWdodCkgPj0gNzAwKSB7XG4gICAgICAgIHJlcyA9ICdib2xkJztcbiAgICB9XG4gICAgaWYgKHN0eWxlLmZvbnRTdHlsZSA9PT0gJ2l0YWxpYycgfHwgc3R5bGUuZm9udFN0eWxlID09PSAnb2JsaXF1ZScpIHtcbiAgICAgICAgcmVzICs9ICdpdGFsaWMnO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gcGFyc2VDb2xvcihlbGVtZW50LCBzdHlsZUdldHRlcikge1xuICAgIHZhciBjc3NDb2xvciA9IHJlYWxDb2xvcihlbGVtZW50LCBzdHlsZUdldHRlcik7XG4gICAgaWYgKCFjc3NDb2xvcilcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgdmFyIHJnYmEgPSBjc3NDb2xvci5tYXRjaCgvXnJnYmE/XFwoKFxcZCspLFxccyooXFxkKyksXFxzKihcXGQrKSg/OixcXHMqKFxcZCpcXC4/XFxkKikpP1xcKSQvKTtcbiAgICBpZiAoIXJnYmEgfHwgIUFycmF5LmlzQXJyYXkocmdiYSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBjb2xvciA9IFtcbiAgICAgICAgcGFyc2VJbnQocmdiYVsxXSksXG4gICAgICAgIHBhcnNlSW50KHJnYmFbMl0pLFxuICAgICAgICBwYXJzZUludChyZ2JhWzNdKSxcbiAgICBdO1xuICAgIHZhciBhbHBoYSA9IHBhcnNlSW50KHJnYmFbNF0pO1xuICAgIGlmIChhbHBoYSA9PT0gMCB8fCBpc05hTihjb2xvclswXSkgfHwgaXNOYU4oY29sb3JbMV0pIHx8IGlzTmFOKGNvbG9yWzJdKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNvbG9yO1xufVxuZnVuY3Rpb24gcmVhbENvbG9yKGVsZW0sIHN0eWxlR2V0dGVyKSB7XG4gICAgdmFyIGJnID0gc3R5bGVHZXR0ZXIoZWxlbSk7XG4gICAgaWYgKGJnID09PSAncmdiYSgwLCAwLCAwLCAwKScgfHxcbiAgICAgICAgYmcgPT09ICd0cmFuc3BhcmVudCcgfHxcbiAgICAgICAgYmcgPT09ICdpbml0aWFsJyB8fFxuICAgICAgICBiZyA9PT0gJ2luaGVyaXQnKSB7XG4gICAgICAgIGlmIChlbGVtLnBhcmVudEVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlYWxDb2xvcihlbGVtLnBhcmVudEVsZW1lbnQsIHN0eWxlR2V0dGVyKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBiZztcbiAgICB9XG59XG5mdW5jdGlvbiBwYXJzZVBhZGRpbmcoc3R5bGUsIHNjYWxlRmFjdG9yKSB7XG4gICAgdmFyIHZhbCA9IFtcbiAgICAgICAgc3R5bGUucGFkZGluZ1RvcCxcbiAgICAgICAgc3R5bGUucGFkZGluZ1JpZ2h0LFxuICAgICAgICBzdHlsZS5wYWRkaW5nQm90dG9tLFxuICAgICAgICBzdHlsZS5wYWRkaW5nTGVmdCxcbiAgICBdO1xuICAgIHZhciBweFNjYWxlRmFjdG9yID0gOTYgLyAoNzIgLyBzY2FsZUZhY3Rvcik7XG4gICAgdmFyIGxpbmVQYWRkaW5nID0gKHBhcnNlSW50KHN0eWxlLmxpbmVIZWlnaHQpIC0gcGFyc2VJbnQoc3R5bGUuZm9udFNpemUpKSAvIHNjYWxlRmFjdG9yIC8gMjtcbiAgICB2YXIgaW5wdXRQYWRkaW5nID0gdmFsLm1hcChmdW5jdGlvbiAobikge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQobiB8fCAnMCcpIC8gcHhTY2FsZUZhY3RvcjtcbiAgICB9KTtcbiAgICB2YXIgcGFkZGluZyA9IHBhcnNlU3BhY2luZyhpbnB1dFBhZGRpbmcsIDApO1xuICAgIGlmIChsaW5lUGFkZGluZyA+IHBhZGRpbmcudG9wKSB7XG4gICAgICAgIHBhZGRpbmcudG9wID0gbGluZVBhZGRpbmc7XG4gICAgfVxuICAgIGlmIChsaW5lUGFkZGluZyA+IHBhZGRpbmcuYm90dG9tKSB7XG4gICAgICAgIHBhZGRpbmcuYm90dG9tID0gbGluZVBhZGRpbmc7XG4gICAgfVxuICAgIHJldHVybiBwYWRkaW5nO1xufVxuXG5mdW5jdGlvbiBwYXJzZUh0bWwoZG9jLCBpbnB1dCwgd2luZG93LCBpbmNsdWRlSGlkZGVuSHRtbCwgdXNlQ3NzKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBpZiAoaW5jbHVkZUhpZGRlbkh0bWwgPT09IHZvaWQgMCkgeyBpbmNsdWRlSGlkZGVuSHRtbCA9IGZhbHNlOyB9XG4gICAgaWYgKHVzZUNzcyA9PT0gdm9pZCAwKSB7IHVzZUNzcyA9IGZhbHNlOyB9XG4gICAgdmFyIHRhYmxlRWxlbWVudDtcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0YWJsZUVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQucXVlcnlTZWxlY3RvcihpbnB1dCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0YWJsZUVsZW1lbnQgPSBpbnB1dDtcbiAgICB9XG4gICAgdmFyIHN1cHBvcnRlZEZvbnRzID0gT2JqZWN0LmtleXMoZG9jLmdldEZvbnRMaXN0KCkpO1xuICAgIHZhciBzY2FsZUZhY3RvciA9IGRvYy5zY2FsZUZhY3RvcigpO1xuICAgIHZhciBoZWFkID0gW10sIGJvZHkgPSBbXSwgZm9vdCA9IFtdO1xuICAgIGlmICghdGFibGVFbGVtZW50KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0h0bWwgdGFibGUgY291bGQgbm90IGJlIGZvdW5kIHdpdGggaW5wdXQ6ICcsIGlucHV0KTtcbiAgICAgICAgcmV0dXJuIHsgaGVhZDogaGVhZCwgYm9keTogYm9keSwgZm9vdDogZm9vdCB9O1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYmxlRWxlbWVudC5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlbGVtZW50ID0gdGFibGVFbGVtZW50LnJvd3NbaV07XG4gICAgICAgIHZhciB0YWdOYW1lID0gKF9iID0gKF9hID0gZWxlbWVudCA9PT0gbnVsbCB8fCBlbGVtZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbGVtZW50LnBhcmVudEVsZW1lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50YWdOYW1lKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdmFyIHJvdyA9IHBhcnNlUm93Q29udGVudChzdXBwb3J0ZWRGb250cywgc2NhbGVGYWN0b3IsIHdpbmRvdywgZWxlbWVudCwgaW5jbHVkZUhpZGRlbkh0bWwsIHVzZUNzcyk7XG4gICAgICAgIGlmICghcm93KVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmICh0YWdOYW1lID09PSAndGhlYWQnKSB7XG4gICAgICAgICAgICBoZWFkLnB1c2gocm93KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0YWdOYW1lID09PSAndGZvb3QnKSB7XG4gICAgICAgICAgICBmb290LnB1c2gocm93KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFkZCB0byBib2R5IGJvdGggaWYgcGFyZW50IGlzIHRib2R5IG9yIHRhYmxlXG4gICAgICAgICAgICBib2R5LnB1c2gocm93KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBoZWFkOiBoZWFkLCBib2R5OiBib2R5LCBmb290OiBmb290IH07XG59XG5mdW5jdGlvbiBwYXJzZVJvd0NvbnRlbnQoc3VwcG9ydGVkRm9udHMsIHNjYWxlRmFjdG9yLCB3aW5kb3csIHJvdywgaW5jbHVkZUhpZGRlbiwgdXNlQ3NzKSB7XG4gICAgdmFyIHJlc3VsdFJvdyA9IG5ldyBIdG1sUm93SW5wdXQocm93KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvdy5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2VsbCA9IHJvdy5jZWxsc1tpXTtcbiAgICAgICAgdmFyIHN0eWxlXzEgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjZWxsKTtcbiAgICAgICAgaWYgKGluY2x1ZGVIaWRkZW4gfHwgc3R5bGVfMS5kaXNwbGF5ICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHZhciBjZWxsU3R5bGVzID0gdm9pZCAwO1xuICAgICAgICAgICAgaWYgKHVzZUNzcykge1xuICAgICAgICAgICAgICAgIGNlbGxTdHlsZXMgPSBwYXJzZUNzcyhzdXBwb3J0ZWRGb250cywgY2VsbCwgc2NhbGVGYWN0b3IsIHN0eWxlXzEsIHdpbmRvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRSb3cucHVzaCh7XG4gICAgICAgICAgICAgICAgcm93U3BhbjogY2VsbC5yb3dTcGFuLFxuICAgICAgICAgICAgICAgIGNvbFNwYW46IGNlbGwuY29sU3BhbixcbiAgICAgICAgICAgICAgICBzdHlsZXM6IGNlbGxTdHlsZXMsXG4gICAgICAgICAgICAgICAgX2VsZW1lbnQ6IGNlbGwsXG4gICAgICAgICAgICAgICAgY29udGVudDogcGFyc2VDZWxsQ29udGVudChjZWxsKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHJvdyk7XG4gICAgaWYgKHJlc3VsdFJvdy5sZW5ndGggPiAwICYmIChpbmNsdWRlSGlkZGVuIHx8IHN0eWxlLmRpc3BsYXkgIT09ICdub25lJykpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFJvdztcbiAgICB9XG59XG5mdW5jdGlvbiBwYXJzZUNlbGxDb250ZW50KG9yZ0NlbGwpIHtcbiAgICAvLyBXb3JrIG9uIGNsb25lZCBub2RlIHRvIG1ha2Ugc3VyZSBubyBjaGFuZ2VzIGFyZSBhcHBsaWVkIHRvIGh0bWwgdGFibGVcbiAgICB2YXIgY2VsbCA9IG9yZ0NlbGwuY2xvbmVOb2RlKHRydWUpO1xuICAgIC8vIFJlbW92ZSBleHRyYSBzcGFjZSBhbmQgbGluZSBicmVha3MgaW4gbWFya3VwIHRvIG1ha2UgaXQgbW9yZSBzaW1pbGFyIHRvXG4gICAgLy8gd2hhdCB3b3VsZCBiZSBzaG93biBpbiBodG1sXG4gICAgY2VsbC5pbm5lckhUTUwgPSBjZWxsLmlubmVySFRNTC5yZXBsYWNlKC9cXG4vZywgJycpLnJlcGxhY2UoLyArL2csICcgJyk7XG4gICAgLy8gUHJlc2VydmUgPGJyPiB0YWdzIGFzIGxpbmUgYnJlYWtzIGluIHRoZSBwZGZcbiAgICBjZWxsLmlubmVySFRNTCA9IGNlbGwuaW5uZXJIVE1MXG4gICAgICAgIC5zcGxpdCgvPGJyLio/Pi8pIC8vc3RhcnQgd2l0aCAnPGJyJyBhbmQgZW5kcyB3aXRoICc+Jy5cbiAgICAgICAgLm1hcChmdW5jdGlvbiAocGFydCkgeyByZXR1cm4gcGFydC50cmltKCk7IH0pXG4gICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAvLyBpbm5lclRleHQgZm9yIGllXG4gICAgcmV0dXJuIGNlbGwuaW5uZXJUZXh0IHx8IGNlbGwudGV4dENvbnRlbnQgfHwgJyc7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSW5wdXQoZ2xvYmFsLCBkb2N1bWVudCwgY3VycmVudCkge1xuICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSBbZ2xvYmFsLCBkb2N1bWVudCwgY3VycmVudF07IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gX2FbX2ldO1xuICAgICAgICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBvcHRpb25zIHBhcmFtZXRlciBzaG91bGQgYmUgb2YgdHlwZSBvYmplY3QsIGlzOiAnICsgdHlwZW9mIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnN0YXJ0WSAmJiB0eXBlb2Ygb3B0aW9ucy5zdGFydFkgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIHZhbHVlIGZvciBzdGFydFkgb3B0aW9uJywgb3B0aW9ucy5zdGFydFkpO1xuICAgICAgICAgICAgZGVsZXRlIG9wdGlvbnMuc3RhcnRZO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3NpZ25cbmZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHMsIHMxLCBzMiwgczMpIHtcbiAgICBpZiAodGFyZ2V0ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Jyk7XG4gICAgfVxuICAgIHZhciB0byA9IE9iamVjdCh0YXJnZXQpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBhcmd1bWVudHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgICAgdmFyIG5leHRTb3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICBpZiAobmV4dFNvdXJjZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBTa2lwIG92ZXIgaWYgdW5kZWZpbmVkIG9yIG51bGxcbiAgICAgICAgICAgIGZvciAodmFyIG5leHRLZXkgaW4gbmV4dFNvdXJjZSkge1xuICAgICAgICAgICAgICAgIC8vIEF2b2lkIGJ1Z3Mgd2hlbiBoYXNPd25Qcm9wZXJ0eSBpcyBzaGFkb3dlZFxuICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmV4dFNvdXJjZSwgbmV4dEtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9bbmV4dEtleV0gPSBuZXh0U291cmNlW25leHRLZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG87XG59XG5cbmZ1bmN0aW9uIHBhcnNlSW5wdXQoZCwgY3VycmVudCkge1xuICAgIHZhciBkb2MgPSBuZXcgRG9jSGFuZGxlcihkKTtcbiAgICB2YXIgZG9jdW1lbnQgPSBkb2MuZ2V0RG9jdW1lbnRPcHRpb25zKCk7XG4gICAgdmFyIGdsb2JhbCA9IGRvYy5nZXRHbG9iYWxPcHRpb25zKCk7XG4gICAgdmFsaWRhdGVJbnB1dChnbG9iYWwsIGRvY3VtZW50LCBjdXJyZW50KTtcbiAgICB2YXIgb3B0aW9ucyA9IGFzc2lnbih7fSwgZ2xvYmFsLCBkb2N1bWVudCwgY3VycmVudCk7XG4gICAgdmFyIHdpbjtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luID0gd2luZG93O1xuICAgIH1cbiAgICB2YXIgc3R5bGVzID0gcGFyc2VTdHlsZXMoZ2xvYmFsLCBkb2N1bWVudCwgY3VycmVudCk7XG4gICAgdmFyIGhvb2tzID0gcGFyc2VIb29rcyhnbG9iYWwsIGRvY3VtZW50LCBjdXJyZW50KTtcbiAgICB2YXIgc2V0dGluZ3MgPSBwYXJzZVNldHRpbmdzKGRvYywgb3B0aW9ucyk7XG4gICAgdmFyIGNvbnRlbnQgPSBwYXJzZUNvbnRlbnQkMShkb2MsIG9wdGlvbnMsIHdpbik7XG4gICAgcmV0dXJuIHsgaWQ6IGN1cnJlbnQudGFibGVJZCwgY29udGVudDogY29udGVudCwgaG9va3M6IGhvb2tzLCBzdHlsZXM6IHN0eWxlcywgc2V0dGluZ3M6IHNldHRpbmdzIH07XG59XG5mdW5jdGlvbiBwYXJzZVN0eWxlcyhnSW5wdXQsIGRJbnB1dCwgY0lucHV0KSB7XG4gICAgdmFyIHN0eWxlT3B0aW9ucyA9IHtcbiAgICAgICAgc3R5bGVzOiB7fSxcbiAgICAgICAgaGVhZFN0eWxlczoge30sXG4gICAgICAgIGJvZHlTdHlsZXM6IHt9LFxuICAgICAgICBmb290U3R5bGVzOiB7fSxcbiAgICAgICAgYWx0ZXJuYXRlUm93U3R5bGVzOiB7fSxcbiAgICAgICAgY29sdW1uU3R5bGVzOiB7fSxcbiAgICB9O1xuICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgaWYgKHByb3AgPT09ICdjb2x1bW5TdHlsZXMnKSB7XG4gICAgICAgICAgICB2YXIgZ2xvYmFsID0gZ0lucHV0W3Byb3BdO1xuICAgICAgICAgICAgdmFyIGRvY3VtZW50XzEgPSBkSW5wdXRbcHJvcF07XG4gICAgICAgICAgICB2YXIgY3VycmVudCA9IGNJbnB1dFtwcm9wXTtcbiAgICAgICAgICAgIHN0eWxlT3B0aW9ucy5jb2x1bW5TdHlsZXMgPSBhc3NpZ24oe30sIGdsb2JhbCwgZG9jdW1lbnRfMSwgY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgYWxsT3B0aW9ucyA9IFtnSW5wdXQsIGRJbnB1dCwgY0lucHV0XTtcbiAgICAgICAgICAgIHZhciBzdHlsZXMgPSBhbGxPcHRpb25zLm1hcChmdW5jdGlvbiAob3B0cykgeyByZXR1cm4gb3B0c1twcm9wXSB8fCB7fTsgfSk7XG4gICAgICAgICAgICBzdHlsZU9wdGlvbnNbcHJvcF0gPSBhc3NpZ24oe30sIHN0eWxlc1swXSwgc3R5bGVzWzFdLCBzdHlsZXNbMl0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gT2JqZWN0LmtleXMoc3R5bGVPcHRpb25zKTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIHByb3AgPSBfYVtfaV07XG4gICAgICAgIF9sb29wXzEocHJvcCk7XG4gICAgfVxuICAgIHJldHVybiBzdHlsZU9wdGlvbnM7XG59XG5mdW5jdGlvbiBwYXJzZUhvb2tzKGdsb2JhbCwgZG9jdW1lbnQsIGN1cnJlbnQpIHtcbiAgICB2YXIgYWxsT3B0aW9ucyA9IFtnbG9iYWwsIGRvY3VtZW50LCBjdXJyZW50XTtcbiAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICBkaWRQYXJzZUNlbGw6IFtdLFxuICAgICAgICB3aWxsRHJhd0NlbGw6IFtdLFxuICAgICAgICBkaWREcmF3Q2VsbDogW10sXG4gICAgICAgIHdpbGxEcmF3UGFnZTogW10sXG4gICAgICAgIGRpZERyYXdQYWdlOiBbXSxcbiAgICB9O1xuICAgIGZvciAodmFyIF9pID0gMCwgYWxsT3B0aW9uc18xID0gYWxsT3B0aW9uczsgX2kgPCBhbGxPcHRpb25zXzEubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gYWxsT3B0aW9uc18xW19pXTtcbiAgICAgICAgaWYgKG9wdGlvbnMuZGlkUGFyc2VDZWxsKVxuICAgICAgICAgICAgcmVzdWx0LmRpZFBhcnNlQ2VsbC5wdXNoKG9wdGlvbnMuZGlkUGFyc2VDZWxsKTtcbiAgICAgICAgaWYgKG9wdGlvbnMud2lsbERyYXdDZWxsKVxuICAgICAgICAgICAgcmVzdWx0LndpbGxEcmF3Q2VsbC5wdXNoKG9wdGlvbnMud2lsbERyYXdDZWxsKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuZGlkRHJhd0NlbGwpXG4gICAgICAgICAgICByZXN1bHQuZGlkRHJhd0NlbGwucHVzaChvcHRpb25zLmRpZERyYXdDZWxsKTtcbiAgICAgICAgaWYgKG9wdGlvbnMud2lsbERyYXdQYWdlKVxuICAgICAgICAgICAgcmVzdWx0LndpbGxEcmF3UGFnZS5wdXNoKG9wdGlvbnMud2lsbERyYXdQYWdlKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuZGlkRHJhd1BhZ2UpXG4gICAgICAgICAgICByZXN1bHQuZGlkRHJhd1BhZ2UucHVzaChvcHRpb25zLmRpZERyYXdQYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIHBhcnNlU2V0dGluZ3MoZG9jLCBvcHRpb25zKSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nLCBfaCwgX2osIF9rLCBfbCwgX207XG4gICAgdmFyIG1hcmdpbiA9IHBhcnNlU3BhY2luZyhvcHRpb25zLm1hcmdpbiwgNDAgLyBkb2Muc2NhbGVGYWN0b3IoKSk7XG4gICAgdmFyIHN0YXJ0WSA9IChfYSA9IGdldFN0YXJ0WShkb2MsIG9wdGlvbnMuc3RhcnRZKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbWFyZ2luLnRvcDtcbiAgICB2YXIgc2hvd0Zvb3Q7XG4gICAgaWYgKG9wdGlvbnMuc2hvd0Zvb3QgPT09IHRydWUpIHtcbiAgICAgICAgc2hvd0Zvb3QgPSAnZXZlcnlQYWdlJztcbiAgICB9XG4gICAgZWxzZSBpZiAob3B0aW9ucy5zaG93Rm9vdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgc2hvd0Zvb3QgPSAnbmV2ZXInO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc2hvd0Zvb3QgPSAoX2IgPSBvcHRpb25zLnNob3dGb290KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnZXZlcnlQYWdlJztcbiAgICB9XG4gICAgdmFyIHNob3dIZWFkO1xuICAgIGlmIChvcHRpb25zLnNob3dIZWFkID09PSB0cnVlKSB7XG4gICAgICAgIHNob3dIZWFkID0gJ2V2ZXJ5UGFnZSc7XG4gICAgfVxuICAgIGVsc2UgaWYgKG9wdGlvbnMuc2hvd0hlYWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHNob3dIZWFkID0gJ25ldmVyJztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNob3dIZWFkID0gKF9jID0gb3B0aW9ucy5zaG93SGVhZCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogJ2V2ZXJ5UGFnZSc7XG4gICAgfVxuICAgIHZhciB1c2VDc3MgPSAoX2QgPSBvcHRpb25zLnVzZUNzcykgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogZmFsc2U7XG4gICAgdmFyIHRoZW1lID0gb3B0aW9ucy50aGVtZSB8fCAodXNlQ3NzID8gJ3BsYWluJyA6ICdzdHJpcGVkJyk7XG4gICAgdmFyIGhvcml6b250YWxQYWdlQnJlYWsgPSAhIW9wdGlvbnMuaG9yaXpvbnRhbFBhZ2VCcmVhaztcbiAgICB2YXIgaG9yaXpvbnRhbFBhZ2VCcmVha1JlcGVhdCA9IChfZSA9IG9wdGlvbnMuaG9yaXpvbnRhbFBhZ2VCcmVha1JlcGVhdCkgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogbnVsbDtcbiAgICByZXR1cm4ge1xuICAgICAgICBpbmNsdWRlSGlkZGVuSHRtbDogKF9mID0gb3B0aW9ucy5pbmNsdWRlSGlkZGVuSHRtbCkgIT09IG51bGwgJiYgX2YgIT09IHZvaWQgMCA/IF9mIDogZmFsc2UsXG4gICAgICAgIHVzZUNzczogdXNlQ3NzLFxuICAgICAgICB0aGVtZTogdGhlbWUsXG4gICAgICAgIHN0YXJ0WTogc3RhcnRZLFxuICAgICAgICBtYXJnaW46IG1hcmdpbixcbiAgICAgICAgcGFnZUJyZWFrOiAoX2cgPSBvcHRpb25zLnBhZ2VCcmVhaykgIT09IG51bGwgJiYgX2cgIT09IHZvaWQgMCA/IF9nIDogJ2F1dG8nLFxuICAgICAgICByb3dQYWdlQnJlYWs6IChfaCA9IG9wdGlvbnMucm93UGFnZUJyZWFrKSAhPT0gbnVsbCAmJiBfaCAhPT0gdm9pZCAwID8gX2ggOiAnYXV0bycsXG4gICAgICAgIHRhYmxlV2lkdGg6IChfaiA9IG9wdGlvbnMudGFibGVXaWR0aCkgIT09IG51bGwgJiYgX2ogIT09IHZvaWQgMCA/IF9qIDogJ2F1dG8nLFxuICAgICAgICBzaG93SGVhZDogc2hvd0hlYWQsXG4gICAgICAgIHNob3dGb290OiBzaG93Rm9vdCxcbiAgICAgICAgdGFibGVMaW5lV2lkdGg6IChfayA9IG9wdGlvbnMudGFibGVMaW5lV2lkdGgpICE9PSBudWxsICYmIF9rICE9PSB2b2lkIDAgPyBfayA6IDAsXG4gICAgICAgIHRhYmxlTGluZUNvbG9yOiAoX2wgPSBvcHRpb25zLnRhYmxlTGluZUNvbG9yKSAhPT0gbnVsbCAmJiBfbCAhPT0gdm9pZCAwID8gX2wgOiAyMDAsXG4gICAgICAgIGhvcml6b250YWxQYWdlQnJlYWs6IGhvcml6b250YWxQYWdlQnJlYWssXG4gICAgICAgIGhvcml6b250YWxQYWdlQnJlYWtSZXBlYXQ6IGhvcml6b250YWxQYWdlQnJlYWtSZXBlYXQsXG4gICAgICAgIGhvcml6b250YWxQYWdlQnJlYWtCZWhhdmlvdXI6IChfbSA9IG9wdGlvbnMuaG9yaXpvbnRhbFBhZ2VCcmVha0JlaGF2aW91cikgIT09IG51bGwgJiYgX20gIT09IHZvaWQgMCA/IF9tIDogJ2FmdGVyQWxsUm93cycsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldFN0YXJ0WShkb2MsIHVzZXJTdGFydFkpIHtcbiAgICB2YXIgcHJldmlvdXMgPSBkb2MuZ2V0TGFzdEF1dG9UYWJsZSgpO1xuICAgIHZhciBzZiA9IGRvYy5zY2FsZUZhY3RvcigpO1xuICAgIHZhciBjdXJyZW50UGFnZSA9IGRvYy5wYWdlTnVtYmVyKCk7XG4gICAgdmFyIGlzU2FtZVBhZ2VBc1ByZXZpb3VzVGFibGUgPSBmYWxzZTtcbiAgICBpZiAocHJldmlvdXMgJiYgcHJldmlvdXMuc3RhcnRQYWdlTnVtYmVyKSB7XG4gICAgICAgIHZhciBlbmRpbmdQYWdlID0gcHJldmlvdXMuc3RhcnRQYWdlTnVtYmVyICsgcHJldmlvdXMucGFnZU51bWJlciAtIDE7XG4gICAgICAgIGlzU2FtZVBhZ2VBc1ByZXZpb3VzVGFibGUgPSBlbmRpbmdQYWdlID09PSBjdXJyZW50UGFnZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB1c2VyU3RhcnRZID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gdXNlclN0YXJ0WTtcbiAgICB9XG4gICAgZWxzZSBpZiAodXNlclN0YXJ0WSA9PSBudWxsIHx8IHVzZXJTdGFydFkgPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChpc1NhbWVQYWdlQXNQcmV2aW91c1RhYmxlICYmIChwcmV2aW91cyA9PT0gbnVsbCB8fCBwcmV2aW91cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJldmlvdXMuZmluYWxZKSAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBTb21lIHVzZXJzIGhhZCBpc3N1ZXMgd2l0aCBvdmVybGFwcGluZyB0YWJsZXMgd2hlbiB0aGV5IHVzZWQgbXVsdGlwbGVcbiAgICAgICAgICAgIC8vIHRhYmxlcyB3aXRob3V0IHNldHRpbmcgc3RhcnRZIHNvIHNldHRpbmcgaXQgaGVyZSB0byBhIHNlbnNpYmxlIGRlZmF1bHQuXG4gICAgICAgICAgICByZXR1cm4gcHJldmlvdXMuZmluYWxZICsgMjAgLyBzZjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIHBhcnNlQ29udGVudCQxKGRvYywgb3B0aW9ucywgd2luZG93KSB7XG4gICAgdmFyIGhlYWQgPSBvcHRpb25zLmhlYWQgfHwgW107XG4gICAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHkgfHwgW107XG4gICAgdmFyIGZvb3QgPSBvcHRpb25zLmZvb3QgfHwgW107XG4gICAgaWYgKG9wdGlvbnMuaHRtbCkge1xuICAgICAgICB2YXIgaGlkZGVuID0gb3B0aW9ucy5pbmNsdWRlSGlkZGVuSHRtbDtcbiAgICAgICAgaWYgKHdpbmRvdykge1xuICAgICAgICAgICAgdmFyIGh0bWxDb250ZW50ID0gcGFyc2VIdG1sKGRvYywgb3B0aW9ucy5odG1sLCB3aW5kb3csIGhpZGRlbiwgb3B0aW9ucy51c2VDc3MpIHx8IHt9O1xuICAgICAgICAgICAgaGVhZCA9IGh0bWxDb250ZW50LmhlYWQgfHwgaGVhZDtcbiAgICAgICAgICAgIGJvZHkgPSBodG1sQ29udGVudC5ib2R5IHx8IGhlYWQ7XG4gICAgICAgICAgICBmb290ID0gaHRtbENvbnRlbnQuZm9vdCB8fCBoZWFkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ2Fubm90IHBhcnNlIGh0bWwgaW4gbm9uIGJyb3dzZXIgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgY29sdW1ucyA9IG9wdGlvbnMuY29sdW1ucyB8fCBwYXJzZUNvbHVtbnMoaGVhZCwgYm9keSwgZm9vdCk7XG4gICAgcmV0dXJuIHsgY29sdW1uczogY29sdW1ucywgaGVhZDogaGVhZCwgYm9keTogYm9keSwgZm9vdDogZm9vdCB9O1xufVxuZnVuY3Rpb24gcGFyc2VDb2x1bW5zKGhlYWQsIGJvZHksIGZvb3QpIHtcbiAgICB2YXIgZmlyc3RSb3cgPSBoZWFkWzBdIHx8IGJvZHlbMF0gfHwgZm9vdFswXSB8fCBbXTtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgT2JqZWN0LmtleXMoZmlyc3RSb3cpXG4gICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4ga2V5ICE9PSAnX2VsZW1lbnQnOyB9KVxuICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciBjb2xTcGFuID0gMTtcbiAgICAgICAgdmFyIGlucHV0O1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaXJzdFJvdykpIHtcbiAgICAgICAgICAgIGlucHV0ID0gZmlyc3RSb3dbcGFyc2VJbnQoa2V5KV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpbnB1dCA9IGZpcnN0Um93W2tleV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb2xTcGFuID0gKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnB1dC5jb2xTcGFuKSB8fCAxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sU3BhbjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgaWQgPSB2b2lkIDA7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaXJzdFJvdykpIHtcbiAgICAgICAgICAgICAgICBpZCA9IHJlc3VsdC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZCA9IGtleSArIChpID4gMCA/IFwiX1wiLmNvbmNhdChpKSA6ICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciByb3dSZXN1bHQgPSB7IGRhdGFLZXk6IGlkIH07XG4gICAgICAgICAgICByZXN1bHQucHVzaChyb3dSZXN1bHQpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxudmFyIEhvb2tEYXRhID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEhvb2tEYXRhKGRvYywgdGFibGUsIGN1cnNvcikge1xuICAgICAgICB0aGlzLnRhYmxlID0gdGFibGU7XG4gICAgICAgIHRoaXMucGFnZU51bWJlciA9IHRhYmxlLnBhZ2VOdW1iZXI7XG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSB0YWJsZS5zZXR0aW5ncztcbiAgICAgICAgdGhpcy5jdXJzb3IgPSBjdXJzb3I7XG4gICAgICAgIHRoaXMuZG9jID0gZG9jLmdldERvY3VtZW50KCk7XG4gICAgfVxuICAgIHJldHVybiBIb29rRGF0YTtcbn0oKSk7XG52YXIgQ2VsbEhvb2tEYXRhID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhDZWxsSG9va0RhdGEsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQ2VsbEhvb2tEYXRhKGRvYywgdGFibGUsIGNlbGwsIHJvdywgY29sdW1uLCBjdXJzb3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZG9jLCB0YWJsZSwgY3Vyc29yKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jZWxsID0gY2VsbDtcbiAgICAgICAgX3RoaXMucm93ID0gcm93O1xuICAgICAgICBfdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIF90aGlzLnNlY3Rpb24gPSByb3cuc2VjdGlvbjtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gQ2VsbEhvb2tEYXRhO1xufShIb29rRGF0YSkpO1xuXG52YXIgVGFibGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVGFibGUoaW5wdXQsIGNvbnRlbnQpIHtcbiAgICAgICAgdGhpcy5wYWdlTnVtYmVyID0gMTtcbiAgICAgICAgdGhpcy5pZCA9IGlucHV0LmlkO1xuICAgICAgICB0aGlzLnNldHRpbmdzID0gaW5wdXQuc2V0dGluZ3M7XG4gICAgICAgIHRoaXMuc3R5bGVzID0gaW5wdXQuc3R5bGVzO1xuICAgICAgICB0aGlzLmhvb2tzID0gaW5wdXQuaG9va3M7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IGNvbnRlbnQuY29sdW1ucztcbiAgICAgICAgdGhpcy5oZWFkID0gY29udGVudC5oZWFkO1xuICAgICAgICB0aGlzLmJvZHkgPSBjb250ZW50LmJvZHk7XG4gICAgICAgIHRoaXMuZm9vdCA9IGNvbnRlbnQuZm9vdDtcbiAgICB9XG4gICAgVGFibGUucHJvdG90eXBlLmdldEhlYWRIZWlnaHQgPSBmdW5jdGlvbiAoY29sdW1ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5oZWFkLnJlZHVjZShmdW5jdGlvbiAoYWNjLCByb3cpIHsgcmV0dXJuIGFjYyArIHJvdy5nZXRNYXhDZWxsSGVpZ2h0KGNvbHVtbnMpOyB9LCAwKTtcbiAgICB9O1xuICAgIFRhYmxlLnByb3RvdHlwZS5nZXRGb290SGVpZ2h0ID0gZnVuY3Rpb24gKGNvbHVtbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9vdC5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcm93KSB7IHJldHVybiBhY2MgKyByb3cuZ2V0TWF4Q2VsbEhlaWdodChjb2x1bW5zKTsgfSwgMCk7XG4gICAgfTtcbiAgICBUYWJsZS5wcm90b3R5cGUuYWxsUm93cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVhZC5jb25jYXQodGhpcy5ib2R5KS5jb25jYXQodGhpcy5mb290KTtcbiAgICB9O1xuICAgIFRhYmxlLnByb3RvdHlwZS5jYWxsQ2VsbEhvb2tzID0gZnVuY3Rpb24gKGRvYywgaGFuZGxlcnMsIGNlbGwsIHJvdywgY29sdW1uLCBjdXJzb3IpIHtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBoYW5kbGVyc18xID0gaGFuZGxlcnM7IF9pIDwgaGFuZGxlcnNfMS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGVyID0gaGFuZGxlcnNfMVtfaV07XG4gICAgICAgICAgICB2YXIgZGF0YSA9IG5ldyBDZWxsSG9va0RhdGEoZG9jLCB0aGlzLCBjZWxsLCByb3csIGNvbHVtbiwgY3Vyc29yKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBoYW5kbGVyKGRhdGEpID09PSBmYWxzZTtcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0ZXh0IGlzIGFsd2F5cyBzdHJpbmdbXSBzaW5jZSB1c2VyIGNhbiBhc3NpZ24gc3RyaW5nXG4gICAgICAgICAgICBjZWxsLnRleHQgPSBBcnJheS5pc0FycmF5KGNlbGwudGV4dCkgPyBjZWxsLnRleHQgOiBbY2VsbC50ZXh0XTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBUYWJsZS5wcm90b3R5cGUuY2FsbEVuZFBhZ2VIb29rcyA9IGZ1bmN0aW9uIChkb2MsIGN1cnNvcikge1xuICAgICAgICBkb2MuYXBwbHlTdHlsZXMoZG9jLnVzZXJTdHlsZXMpO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5ob29rcy5kaWREcmF3UGFnZTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGVyID0gX2FbX2ldO1xuICAgICAgICAgICAgaGFuZGxlcihuZXcgSG9va0RhdGEoZG9jLCB0aGlzLCBjdXJzb3IpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVGFibGUucHJvdG90eXBlLmNhbGxXaWxsRHJhd1BhZ2VIb29rcyA9IGZ1bmN0aW9uIChkb2MsIGN1cnNvcikge1xuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5ob29rcy53aWxsRHJhd1BhZ2U7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlciA9IF9hW19pXTtcbiAgICAgICAgICAgIGhhbmRsZXIobmV3IEhvb2tEYXRhKGRvYywgdGhpcywgY3Vyc29yKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRhYmxlLnByb3RvdHlwZS5nZXRXaWR0aCA9IGZ1bmN0aW9uIChwYWdlV2lkdGgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNldHRpbmdzLnRhYmxlV2lkdGggPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy50YWJsZVdpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc2V0dGluZ3MudGFibGVXaWR0aCA9PT0gJ3dyYXAnKSB7XG4gICAgICAgICAgICB2YXIgd3JhcHBlZFdpZHRoID0gdGhpcy5jb2x1bW5zLnJlZHVjZShmdW5jdGlvbiAodG90YWwsIGNvbCkgeyByZXR1cm4gdG90YWwgKyBjb2wud3JhcHBlZFdpZHRoOyB9LCAwKTtcbiAgICAgICAgICAgIHJldHVybiB3cmFwcGVkV2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbWFyZ2luID0gdGhpcy5zZXR0aW5ncy5tYXJnaW47XG4gICAgICAgICAgICByZXR1cm4gcGFnZVdpZHRoIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQ7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBUYWJsZTtcbn0oKSk7XG52YXIgUm93ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFJvdyhyYXcsIGluZGV4LCBzZWN0aW9uLCBjZWxscywgc3BhbnNNdWx0aXBsZVBhZ2VzKSB7XG4gICAgICAgIGlmIChzcGFuc011bHRpcGxlUGFnZXMgPT09IHZvaWQgMCkgeyBzcGFuc011bHRpcGxlUGFnZXMgPSBmYWxzZTsgfVxuICAgICAgICB0aGlzLmhlaWdodCA9IDA7XG4gICAgICAgIHRoaXMucmF3ID0gcmF3O1xuICAgICAgICBpZiAocmF3IGluc3RhbmNlb2YgSHRtbFJvd0lucHV0KSB7XG4gICAgICAgICAgICB0aGlzLnJhdyA9IHJhdy5fZWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IHJhdy5fZWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMuc2VjdGlvbiA9IHNlY3Rpb247XG4gICAgICAgIHRoaXMuY2VsbHMgPSBjZWxscztcbiAgICAgICAgdGhpcy5zcGFuc011bHRpcGxlUGFnZXMgPSBzcGFuc011bHRpcGxlUGFnZXM7XG4gICAgfVxuICAgIFJvdy5wcm90b3R5cGUuZ2V0TWF4Q2VsbEhlaWdodCA9IGZ1bmN0aW9uIChjb2x1bW5zKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHJldHVybiBjb2x1bW5zLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBjb2x1bW4pIHsgdmFyIF9hOyByZXR1cm4gTWF0aC5tYXgoYWNjLCAoKF9hID0gX3RoaXMuY2VsbHNbY29sdW1uLmluZGV4XSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmhlaWdodCkgfHwgMCk7IH0sIDApO1xuICAgIH07XG4gICAgUm93LnByb3RvdHlwZS5oYXNSb3dTcGFuID0gZnVuY3Rpb24gKGNvbHVtbnMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcmV0dXJuIChjb2x1bW5zLmZpbHRlcihmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgICAgICB2YXIgY2VsbCA9IF90aGlzLmNlbGxzW2NvbHVtbi5pbmRleF07XG4gICAgICAgICAgICBpZiAoIWNlbGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIGNlbGwucm93U3BhbiA+IDE7XG4gICAgICAgIH0pLmxlbmd0aCA+IDApO1xuICAgIH07XG4gICAgUm93LnByb3RvdHlwZS5jYW5FbnRpcmVSb3dGaXQgPSBmdW5jdGlvbiAoaGVpZ2h0LCBjb2x1bW5zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE1heENlbGxIZWlnaHQoY29sdW1ucykgPD0gaGVpZ2h0O1xuICAgIH07XG4gICAgUm93LnByb3RvdHlwZS5nZXRNaW5pbXVtUm93SGVpZ2h0ID0gZnVuY3Rpb24gKGNvbHVtbnMsIGRvYykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICByZXR1cm4gY29sdW1ucy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgY29sdW1uKSB7XG4gICAgICAgICAgICB2YXIgY2VsbCA9IF90aGlzLmNlbGxzW2NvbHVtbi5pbmRleF07XG4gICAgICAgICAgICBpZiAoIWNlbGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB2YXIgbGluZUhlaWdodCA9IGRvYy5nZXRMaW5lSGVpZ2h0KGNlbGwuc3R5bGVzLmZvbnRTaXplKTtcbiAgICAgICAgICAgIHZhciB2UGFkZGluZyA9IGNlbGwucGFkZGluZygndmVydGljYWwnKTtcbiAgICAgICAgICAgIHZhciBvbmVSb3dIZWlnaHQgPSB2UGFkZGluZyArIGxpbmVIZWlnaHQ7XG4gICAgICAgICAgICByZXR1cm4gb25lUm93SGVpZ2h0ID4gYWNjID8gb25lUm93SGVpZ2h0IDogYWNjO1xuICAgICAgICB9LCAwKTtcbiAgICB9O1xuICAgIHJldHVybiBSb3c7XG59KCkpO1xudmFyIENlbGwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ2VsbChyYXcsIHN0eWxlcywgc2VjdGlvbikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuY29udGVudEhlaWdodCA9IDA7XG4gICAgICAgIHRoaXMuY29udGVudFdpZHRoID0gMDtcbiAgICAgICAgdGhpcy53cmFwcGVkV2lkdGggPSAwO1xuICAgICAgICB0aGlzLm1pblJlYWRhYmxlV2lkdGggPSAwO1xuICAgICAgICB0aGlzLm1pbldpZHRoID0gMDtcbiAgICAgICAgdGhpcy53aWR0aCA9IDA7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gMDtcbiAgICAgICAgdGhpcy54ID0gMDtcbiAgICAgICAgdGhpcy55ID0gMDtcbiAgICAgICAgdGhpcy5zdHlsZXMgPSBzdHlsZXM7XG4gICAgICAgIHRoaXMuc2VjdGlvbiA9IHNlY3Rpb247XG4gICAgICAgIHRoaXMucmF3ID0gcmF3O1xuICAgICAgICB2YXIgY29udGVudCA9IHJhdztcbiAgICAgICAgaWYgKHJhdyAhPSBudWxsICYmIHR5cGVvZiByYXcgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHJhdykpIHtcbiAgICAgICAgICAgIHRoaXMucm93U3BhbiA9IHJhdy5yb3dTcGFuIHx8IDE7XG4gICAgICAgICAgICB0aGlzLmNvbFNwYW4gPSByYXcuY29sU3BhbiB8fCAxO1xuICAgICAgICAgICAgY29udGVudCA9IChfYSA9IHJhdy5jb250ZW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiByYXc7XG4gICAgICAgICAgICBpZiAocmF3Ll9lbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yYXcgPSByYXcuX2VsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvd1NwYW4gPSAxO1xuICAgICAgICAgICAgdGhpcy5jb2xTcGFuID0gMTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTdHJpbmdpZnkgMCBhbmQgZmFsc2UsIGJ1dCBub3QgdW5kZWZpbmVkIG9yIG51bGxcbiAgICAgICAgdmFyIHRleHQgPSBjb250ZW50ICE9IG51bGwgPyAnJyArIGNvbnRlbnQgOiAnJztcbiAgICAgICAgdmFyIHNwbGl0UmVnZXggPSAvXFxyXFxufFxccnxcXG4vZztcbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dC5zcGxpdChzcGxpdFJlZ2V4KTtcbiAgICB9XG4gICAgQ2VsbC5wcm90b3R5cGUuZ2V0VGV4dFBvcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHk7XG4gICAgICAgIGlmICh0aGlzLnN0eWxlcy52YWxpZ24gPT09ICd0b3AnKSB7XG4gICAgICAgICAgICB5ID0gdGhpcy55ICsgdGhpcy5wYWRkaW5nKCd0b3AnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnN0eWxlcy52YWxpZ24gPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgICB5ID0gdGhpcy55ICsgdGhpcy5oZWlnaHQgLSB0aGlzLnBhZGRpbmcoJ2JvdHRvbScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIG5ldEhlaWdodCA9IHRoaXMuaGVpZ2h0IC0gdGhpcy5wYWRkaW5nKCd2ZXJ0aWNhbCcpO1xuICAgICAgICAgICAgeSA9IHRoaXMueSArIG5ldEhlaWdodCAvIDIgKyB0aGlzLnBhZGRpbmcoJ3RvcCcpO1xuICAgICAgICB9XG4gICAgICAgIHZhciB4O1xuICAgICAgICBpZiAodGhpcy5zdHlsZXMuaGFsaWduID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICB4ID0gdGhpcy54ICsgdGhpcy53aWR0aCAtIHRoaXMucGFkZGluZygncmlnaHQnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnN0eWxlcy5oYWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICAgICAgICB2YXIgbmV0V2lkdGggPSB0aGlzLndpZHRoIC0gdGhpcy5wYWRkaW5nKCdob3Jpem9udGFsJyk7XG4gICAgICAgICAgICB4ID0gdGhpcy54ICsgbmV0V2lkdGggLyAyICsgdGhpcy5wYWRkaW5nKCdsZWZ0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB4ID0gdGhpcy54ICsgdGhpcy5wYWRkaW5nKCdsZWZ0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgeDogeCwgeTogeSB9O1xuICAgIH07XG4gICAgLy8gVE9ETyAodjQpOiByZXBsYWNlIHBhcmFtZXRlcnMgd2l0aCBvbmx5IChsaW5lSGVpZ2h0KVxuICAgIENlbGwucHJvdG90eXBlLmdldENvbnRlbnRIZWlnaHQgPSBmdW5jdGlvbiAoc2NhbGVGYWN0b3IsIGxpbmVIZWlnaHRGYWN0b3IpIHtcbiAgICAgICAgaWYgKGxpbmVIZWlnaHRGYWN0b3IgPT09IHZvaWQgMCkgeyBsaW5lSGVpZ2h0RmFjdG9yID0gMS4xNTsgfVxuICAgICAgICB2YXIgbGluZUNvdW50ID0gQXJyYXkuaXNBcnJheSh0aGlzLnRleHQpID8gdGhpcy50ZXh0Lmxlbmd0aCA6IDE7XG4gICAgICAgIHZhciBsaW5lSGVpZ2h0ID0gKHRoaXMuc3R5bGVzLmZvbnRTaXplIC8gc2NhbGVGYWN0b3IpICogbGluZUhlaWdodEZhY3RvcjtcbiAgICAgICAgdmFyIGhlaWdodCA9IGxpbmVDb3VudCAqIGxpbmVIZWlnaHQgKyB0aGlzLnBhZGRpbmcoJ3ZlcnRpY2FsJyk7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChoZWlnaHQsIHRoaXMuc3R5bGVzLm1pbkNlbGxIZWlnaHQpO1xuICAgIH07XG4gICAgQ2VsbC5wcm90b3R5cGUucGFkZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHZhciBwYWRkaW5nID0gcGFyc2VTcGFjaW5nKHRoaXMuc3R5bGVzLmNlbGxQYWRkaW5nLCAwKTtcbiAgICAgICAgaWYgKG5hbWUgPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgICAgIHJldHVybiBwYWRkaW5nLnRvcCArIHBhZGRpbmcuYm90dG9tO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5hbWUgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgICAgcmV0dXJuIHBhZGRpbmcubGVmdCArIHBhZGRpbmcucmlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcGFkZGluZ1tuYW1lXTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIENlbGw7XG59KCkpO1xudmFyIENvbHVtbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb2x1bW4oZGF0YUtleSwgcmF3LCBpbmRleCkge1xuICAgICAgICB0aGlzLndyYXBwZWRXaWR0aCA9IDA7XG4gICAgICAgIHRoaXMubWluUmVhZGFibGVXaWR0aCA9IDA7XG4gICAgICAgIHRoaXMubWluV2lkdGggPSAwO1xuICAgICAgICB0aGlzLndpZHRoID0gMDtcbiAgICAgICAgdGhpcy5kYXRhS2V5ID0gZGF0YUtleTtcbiAgICAgICAgdGhpcy5yYXcgPSByYXc7XG4gICAgICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICB9XG4gICAgQ29sdW1uLnByb3RvdHlwZS5nZXRNYXhDdXN0b21DZWxsV2lkdGggPSBmdW5jdGlvbiAodGFibGUpIHtcbiAgICAgICAgdmFyIG1heCA9IDA7XG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0YWJsZS5hbGxSb3dzKCk7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICB2YXIgcm93ID0gX2FbX2ldO1xuICAgICAgICAgICAgdmFyIGNlbGwgPSByb3cuY2VsbHNbdGhpcy5pbmRleF07XG4gICAgICAgICAgICBpZiAoY2VsbCAmJiB0eXBlb2YgY2VsbC5zdHlsZXMuY2VsbFdpZHRoID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIG1heCA9IE1hdGgubWF4KG1heCwgY2VsbC5zdHlsZXMuY2VsbFdpZHRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4O1xuICAgIH07XG4gICAgcmV0dXJuIENvbHVtbjtcbn0oKSk7XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBjb2x1bW4gd2lkdGhzXG4gKi9cbmZ1bmN0aW9uIGNhbGN1bGF0ZVdpZHRocyhkb2MsIHRhYmxlKSB7XG4gICAgY2FsY3VsYXRlKGRvYywgdGFibGUpO1xuICAgIHZhciByZXNpemFibGVDb2x1bW5zID0gW107XG4gICAgdmFyIGluaXRpYWxUYWJsZVdpZHRoID0gMDtcbiAgICB0YWJsZS5jb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgICB2YXIgY3VzdG9tV2lkdGggPSBjb2x1bW4uZ2V0TWF4Q3VzdG9tQ2VsbFdpZHRoKHRhYmxlKTtcbiAgICAgICAgaWYgKGN1c3RvbVdpZHRoKSB7XG4gICAgICAgICAgICAvLyBmaW5hbCBjb2x1bW4gd2lkdGhcbiAgICAgICAgICAgIGNvbHVtbi53aWR0aCA9IGN1c3RvbVdpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gaW5pdGlhbCBjb2x1bW4gd2lkdGggKHdpbGwgYmUgcmVzaXplZClcbiAgICAgICAgICAgIGNvbHVtbi53aWR0aCA9IGNvbHVtbi53cmFwcGVkV2lkdGg7XG4gICAgICAgICAgICByZXNpemFibGVDb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgICBpbml0aWFsVGFibGVXaWR0aCArPSBjb2x1bW4ud2lkdGg7XG4gICAgfSk7XG4gICAgLy8gd2lkdGggZGlmZmVyZW5jZSB0aGF0IG5lZWRzIHRvIGJlIGRpc3RyaWJ1dGVkXG4gICAgdmFyIHJlc2l6ZVdpZHRoID0gdGFibGUuZ2V0V2lkdGgoZG9jLnBhZ2VTaXplKCkud2lkdGgpIC0gaW5pdGlhbFRhYmxlV2lkdGg7XG4gICAgLy8gZmlyc3QgcmVzaXplIGF0dGVtcHQ6IHdpdGggcmVzcGVjdCB0byBtaW5SZWFkYWJsZVdpZHRoIGFuZCBtaW5XaWR0aFxuICAgIGlmIChyZXNpemVXaWR0aCkge1xuICAgICAgICByZXNpemVXaWR0aCA9IHJlc2l6ZUNvbHVtbnMocmVzaXphYmxlQ29sdW1ucywgcmVzaXplV2lkdGgsIGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1heChjb2x1bW4ubWluUmVhZGFibGVXaWR0aCwgY29sdW1uLm1pbldpZHRoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIHNlY29uZCByZXNpemUgYXR0ZW1wdDogaWdub3JlIG1pblJlYWRhYmxlV2lkdGggYnV0IHJlc3BlY3QgbWluV2lkdGhcbiAgICBpZiAocmVzaXplV2lkdGgpIHtcbiAgICAgICAgcmVzaXplV2lkdGggPSByZXNpemVDb2x1bW5zKHJlc2l6YWJsZUNvbHVtbnMsIHJlc2l6ZVdpZHRoLCBmdW5jdGlvbiAoY29sdW1uKSB7IHJldHVybiBjb2x1bW4ubWluV2lkdGg7IH0pO1xuICAgIH1cbiAgICByZXNpemVXaWR0aCA9IE1hdGguYWJzKHJlc2l6ZVdpZHRoKTtcbiAgICBpZiAoIXRhYmxlLnNldHRpbmdzLmhvcml6b250YWxQYWdlQnJlYWsgJiZcbiAgICAgICAgcmVzaXplV2lkdGggPiAwLjEgLyBkb2Muc2NhbGVGYWN0b3IoKSkge1xuICAgICAgICAvLyBUYWJsZSBjYW4ndCBnZXQgc21hbGxlciBkdWUgdG8gY3VzdG9tLXdpZHRoIG9yIG1pbldpZHRoIHJlc3RyaWN0aW9uc1xuICAgICAgICAvLyBXZSBjYW4ndCByZWFsbHkgZG8gbXVjaCBoZXJlLiBVcCB0byB1c2VyIHRvIGZvciBleGFtcGxlXG4gICAgICAgIC8vIHJlZHVjZSBmb250IHNpemUsIGluY3JlYXNlIHBhZ2Ugc2l6ZSBvciByZW1vdmUgY3VzdG9tIGNlbGwgd2lkdGhzXG4gICAgICAgIC8vIHRvIGFsbG93IG1vcmUgY29sdW1ucyB0byBiZSByZWR1Y2VkIGluIHNpemVcbiAgICAgICAgcmVzaXplV2lkdGggPSByZXNpemVXaWR0aCA8IDEgPyByZXNpemVXaWR0aCA6IE1hdGgucm91bmQocmVzaXplV2lkdGgpO1xuICAgICAgICBjb25zb2xlLmxvZyhcIk9mIHRoZSB0YWJsZSBjb250ZW50LCBcIi5jb25jYXQocmVzaXplV2lkdGgsIFwiIHVuaXRzIHdpZHRoIGNvdWxkIG5vdCBmaXQgcGFnZVwiKSk7XG4gICAgfVxuICAgIGFwcGx5Q29sU3BhbnModGFibGUpO1xuICAgIGZpdENvbnRlbnQodGFibGUsIGRvYyk7XG4gICAgYXBwbHlSb3dTcGFucyh0YWJsZSk7XG59XG5mdW5jdGlvbiBjYWxjdWxhdGUoZG9jLCB0YWJsZSkge1xuICAgIHZhciBzZiA9IGRvYy5zY2FsZUZhY3RvcigpO1xuICAgIHZhciBob3Jpem9udGFsUGFnZUJyZWFrID0gdGFibGUuc2V0dGluZ3MuaG9yaXpvbnRhbFBhZ2VCcmVhaztcbiAgICB2YXIgYXZhaWxhYmxlUGFnZVdpZHRoID0gZ2V0UGFnZUF2YWlsYWJsZVdpZHRoKGRvYywgdGFibGUpO1xuICAgIHRhYmxlLmFsbFJvd3MoKS5mb3JFYWNoKGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRhYmxlLmNvbHVtbnM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICB2YXIgY29sdW1uID0gX2FbX2ldO1xuICAgICAgICAgICAgdmFyIGNlbGwgPSByb3cuY2VsbHNbY29sdW1uLmluZGV4XTtcbiAgICAgICAgICAgIGlmICghY2VsbClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHZhciBob29rcyA9IHRhYmxlLmhvb2tzLmRpZFBhcnNlQ2VsbDtcbiAgICAgICAgICAgIHRhYmxlLmNhbGxDZWxsSG9va3MoZG9jLCBob29rcywgY2VsbCwgcm93LCBjb2x1bW4sIG51bGwpO1xuICAgICAgICAgICAgdmFyIHBhZGRpbmcgPSBjZWxsLnBhZGRpbmcoJ2hvcml6b250YWwnKTtcbiAgICAgICAgICAgIGNlbGwuY29udGVudFdpZHRoID0gZ2V0U3RyaW5nV2lkdGgoY2VsbC50ZXh0LCBjZWxsLnN0eWxlcywgZG9jKSArIHBhZGRpbmc7XG4gICAgICAgICAgICAvLyBVc2luZyBbXlxcU1xcdTAwQTBdIGluc3RlYWQgb2YgXFxzIGVuc3VyZXMgdGhhdCB3ZSBzcGxpdCB0aGUgdGV4dCBvbiBhbGxcbiAgICAgICAgICAgIC8vIHdoaXRlc3BhY2UgZXhjZXB0IG5vbi1icmVha2luZyBzcGFjZXMgKFxcdTAwQTApLiBXZSBuZWVkIHRvIHByZXNlcnZlXG4gICAgICAgICAgICAvLyB0aGVtIGluIHRoZSBzcGxpdCBwcm9jZXNzIHRvIGVuc3VyZSBjb3JyZWN0IHdvcmQgc2VwYXJhdGlvbiBhbmQgd2lkdGhcbiAgICAgICAgICAgIC8vIGNhbGN1bGF0aW9uLlxuICAgICAgICAgICAgdmFyIGxvbmdlc3RXb3JkV2lkdGggPSBnZXRTdHJpbmdXaWR0aChjZWxsLnRleHQuam9pbignICcpLnNwbGl0KC9bXlxcU1xcdTAwQTBdKy8pLCBjZWxsLnN0eWxlcywgZG9jKTtcbiAgICAgICAgICAgIGNlbGwubWluUmVhZGFibGVXaWR0aCA9IGxvbmdlc3RXb3JkV2lkdGggKyBjZWxsLnBhZGRpbmcoJ2hvcml6b250YWwnKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2VsbC5zdHlsZXMuY2VsbFdpZHRoID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIGNlbGwubWluV2lkdGggPSBjZWxsLnN0eWxlcy5jZWxsV2lkdGg7XG4gICAgICAgICAgICAgICAgY2VsbC53cmFwcGVkV2lkdGggPSBjZWxsLnN0eWxlcy5jZWxsV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjZWxsLnN0eWxlcy5jZWxsV2lkdGggPT09ICd3cmFwJyB8fFxuICAgICAgICAgICAgICAgIGhvcml6b250YWxQYWdlQnJlYWsgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAvLyBjZWxsIHdpZHRoIHNob3VsZCBub3QgYmUgbW9yZSB0aGFuIGF2YWlsYWJsZSBwYWdlIHdpZHRoXG4gICAgICAgICAgICAgICAgaWYgKGNlbGwuY29udGVudFdpZHRoID4gYXZhaWxhYmxlUGFnZVdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwubWluV2lkdGggPSBhdmFpbGFibGVQYWdlV2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwud3JhcHBlZFdpZHRoID0gYXZhaWxhYmxlUGFnZVdpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2VsbC5taW5XaWR0aCA9IGNlbGwuY29udGVudFdpZHRoO1xuICAgICAgICAgICAgICAgICAgICBjZWxsLndyYXBwZWRXaWR0aCA9IGNlbGwuY29udGVudFdpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGF1dG9cbiAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdE1pbldpZHRoID0gMTAgLyBzZjtcbiAgICAgICAgICAgICAgICBjZWxsLm1pbldpZHRoID0gY2VsbC5zdHlsZXMubWluQ2VsbFdpZHRoIHx8IGRlZmF1bHRNaW5XaWR0aDtcbiAgICAgICAgICAgICAgICBjZWxsLndyYXBwZWRXaWR0aCA9IGNlbGwuY29udGVudFdpZHRoO1xuICAgICAgICAgICAgICAgIGlmIChjZWxsLm1pbldpZHRoID4gY2VsbC53cmFwcGVkV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2VsbC53cmFwcGVkV2lkdGggPSBjZWxsLm1pbldpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHRhYmxlLmFsbFJvd3MoKS5mb3JFYWNoKGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRhYmxlLmNvbHVtbnM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICB2YXIgY29sdW1uID0gX2FbX2ldO1xuICAgICAgICAgICAgdmFyIGNlbGwgPSByb3cuY2VsbHNbY29sdW1uLmluZGV4XTtcbiAgICAgICAgICAgIC8vIEZvciBub3cgd2UgaWdub3JlIHRoZSBtaW5XaWR0aCBhbmQgd3JhcHBlZFdpZHRoIG9mIGNvbHNwYW4gY2VsbHMgd2hlbiBjYWxjdWxhdGluZyBjb2xzcGFuIHdpZHRocy5cbiAgICAgICAgICAgIC8vIENvdWxkIHByb2JhYmx5IGJlIGltcHJvdmVkIHVwb24gaG93ZXZlci5cbiAgICAgICAgICAgIGlmIChjZWxsICYmIGNlbGwuY29sU3BhbiA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGNvbHVtbi53cmFwcGVkV2lkdGggPSBNYXRoLm1heChjb2x1bW4ud3JhcHBlZFdpZHRoLCBjZWxsLndyYXBwZWRXaWR0aCk7XG4gICAgICAgICAgICAgICAgY29sdW1uLm1pbldpZHRoID0gTWF0aC5tYXgoY29sdW1uLm1pbldpZHRoLCBjZWxsLm1pbldpZHRoKTtcbiAgICAgICAgICAgICAgICBjb2x1bW4ubWluUmVhZGFibGVXaWR0aCA9IE1hdGgubWF4KGNvbHVtbi5taW5SZWFkYWJsZVdpZHRoLCBjZWxsLm1pblJlYWRhYmxlV2lkdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gUmVzcGVjdCBjZWxsV2lkdGggc2V0IGluIGNvbHVtblN0eWxlcyBldmVuIGlmIHRoZXJlIGlzIG5vIGNlbGxzIGZvciB0aGlzIGNvbHVtblxuICAgICAgICAgICAgICAgIC8vIG9yIGlmIHRoZSBjb2x1bW4gb25seSBoYXZlIGNvbHNwYW4gY2VsbHMuIFNpbmNlIHRoZSB3aWR0aCBvZiBjb2xzcGFuIGNlbGxzXG4gICAgICAgICAgICAgICAgLy8gZG9lcyBub3QgYWZmZWN0IHRoZSB3aWR0aCBvZiBjb2x1bW5zLCBzZXR0aW5nIGNvbHVtblN0eWxlcyBjZWxsV2lkdGggZW5hYmxlcyB0aGVcbiAgICAgICAgICAgICAgICAvLyB1c2VyIHRvIGF0IGxlYXN0IGRvIGl0IG1hbnVhbGx5LlxuICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBwZXJmZWN0IGZvciBub3cgc2luY2UgZm9yIGV4YW1wbGUgcm93IGFuZCB0YWJsZSBzdHlsZXMgYXJlXG4gICAgICAgICAgICAgICAgLy8gbm90IGFjY291bnRlZCBmb3JcbiAgICAgICAgICAgICAgICB2YXIgY29sdW1uU3R5bGVzID0gdGFibGUuc3R5bGVzLmNvbHVtblN0eWxlc1tjb2x1bW4uZGF0YUtleV0gfHxcbiAgICAgICAgICAgICAgICAgICAgdGFibGUuc3R5bGVzLmNvbHVtblN0eWxlc1tjb2x1bW4uaW5kZXhdIHx8XG4gICAgICAgICAgICAgICAgICAgIHt9O1xuICAgICAgICAgICAgICAgIHZhciBjZWxsV2lkdGggPSBjb2x1bW5TdHlsZXMuY2VsbFdpZHRoIHx8IGNvbHVtblN0eWxlcy5taW5DZWxsV2lkdGg7XG4gICAgICAgICAgICAgICAgaWYgKGNlbGxXaWR0aCAmJiB0eXBlb2YgY2VsbFdpZHRoID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4ubWluV2lkdGggPSBjZWxsV2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi53cmFwcGVkV2lkdGggPSBjZWxsV2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNlbGwpIHtcbiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgYWxsIGNvbHVtbnMgZ2V0IGF0IGxlYXN0IG1pbiB3aWR0aCBldmVuIHRob3VnaCB3aWR0aCBjYWxjdWxhdGlvbnMgYXJlIG5vdCBiYXNlZCBvbiB0aGVtXG4gICAgICAgICAgICAgICAgaWYgKGNlbGwuY29sU3BhbiA+IDEgJiYgIWNvbHVtbi5taW5XaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4ubWluV2lkdGggPSBjZWxsLm1pbldpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY2VsbC5jb2xTcGFuID4gMSAmJiAhY29sdW1uLndyYXBwZWRXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4ud3JhcHBlZFdpZHRoID0gY2VsbC5taW5XaWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8qKlxuICogRGlzdHJpYnV0ZSByZXNpemVXaWR0aCBvbiBwYXNzZWQgcmVzaXphYmxlIGNvbHVtbnNcbiAqL1xuZnVuY3Rpb24gcmVzaXplQ29sdW1ucyhjb2x1bW5zLCByZXNpemVXaWR0aCwgZ2V0TWluV2lkdGgpIHtcbiAgICB2YXIgaW5pdGlhbFJlc2l6ZVdpZHRoID0gcmVzaXplV2lkdGg7XG4gICAgdmFyIHN1bVdyYXBwZWRXaWR0aCA9IGNvbHVtbnMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGNvbHVtbikgeyByZXR1cm4gYWNjICsgY29sdW1uLndyYXBwZWRXaWR0aDsgfSwgMCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjb2x1bW4gPSBjb2x1bW5zW2ldO1xuICAgICAgICB2YXIgcmF0aW8gPSBjb2x1bW4ud3JhcHBlZFdpZHRoIC8gc3VtV3JhcHBlZFdpZHRoO1xuICAgICAgICB2YXIgc3VnZ2VzdGVkQ2hhbmdlID0gaW5pdGlhbFJlc2l6ZVdpZHRoICogcmF0aW87XG4gICAgICAgIHZhciBzdWdnZXN0ZWRXaWR0aCA9IGNvbHVtbi53aWR0aCArIHN1Z2dlc3RlZENoYW5nZTtcbiAgICAgICAgdmFyIG1pbldpZHRoID0gZ2V0TWluV2lkdGgoY29sdW1uKTtcbiAgICAgICAgdmFyIG5ld1dpZHRoID0gc3VnZ2VzdGVkV2lkdGggPCBtaW5XaWR0aCA/IG1pbldpZHRoIDogc3VnZ2VzdGVkV2lkdGg7XG4gICAgICAgIHJlc2l6ZVdpZHRoIC09IG5ld1dpZHRoIC0gY29sdW1uLndpZHRoO1xuICAgICAgICBjb2x1bW4ud2lkdGggPSBuZXdXaWR0aDtcbiAgICB9XG4gICAgcmVzaXplV2lkdGggPSBNYXRoLnJvdW5kKHJlc2l6ZVdpZHRoICogMWUxMCkgLyAxZTEwO1xuICAgIC8vIFJ1biB0aGUgcmVzaXplciBhZ2FpbiBpZiB0aGVyZSdzIHJlbWFpbmluZyB3aWR0aCBuZWVkc1xuICAgIC8vIHRvIGJlIGRpc3RyaWJ1dGVkIGFuZCB0aGVyZSdyZSBjb2x1bW5zIHRoYXQgY2FuIGJlIHJlc2l6ZWRcbiAgICBpZiAocmVzaXplV2lkdGgpIHtcbiAgICAgICAgdmFyIHJlc2l6YWJsZUNvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcihmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzaXplV2lkdGggPCAwXG4gICAgICAgICAgICAgICAgPyBjb2x1bW4ud2lkdGggPiBnZXRNaW5XaWR0aChjb2x1bW4pIC8vIGNoZWNrIGlmIGNvbHVtbiBjYW4gc2hyaW5rXG4gICAgICAgICAgICAgICAgOiB0cnVlOyAvLyBjaGVjayBpZiBjb2x1bW4gY2FuIGdyb3dcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXNpemFibGVDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmVzaXplV2lkdGggPSByZXNpemVDb2x1bW5zKHJlc2l6YWJsZUNvbHVtbnMsIHJlc2l6ZVdpZHRoLCBnZXRNaW5XaWR0aCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc2l6ZVdpZHRoO1xufVxuZnVuY3Rpb24gYXBwbHlSb3dTcGFucyh0YWJsZSkge1xuICAgIHZhciByb3dTcGFuQ2VsbHMgPSB7fTtcbiAgICB2YXIgY29sUm93U3BhbnNMZWZ0ID0gMTtcbiAgICB2YXIgYWxsID0gdGFibGUuYWxsUm93cygpO1xuICAgIGZvciAodmFyIHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCBhbGwubGVuZ3RoOyByb3dJbmRleCsrKSB7XG4gICAgICAgIHZhciByb3cgPSBhbGxbcm93SW5kZXhdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGFibGUuY29sdW1uczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIHZhciBjb2x1bW4gPSBfYVtfaV07XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHJvd1NwYW5DZWxsc1tjb2x1bW4uaW5kZXhdO1xuICAgICAgICAgICAgaWYgKGNvbFJvd1NwYW5zTGVmdCA+IDEpIHtcbiAgICAgICAgICAgICAgICBjb2xSb3dTcGFuc0xlZnQtLTtcbiAgICAgICAgICAgICAgICBkZWxldGUgcm93LmNlbGxzW2NvbHVtbi5pbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5jZWxsLmhlaWdodCArPSByb3cuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGNvbFJvd1NwYW5zTGVmdCA9IGRhdGEuY2VsbC5jb2xTcGFuO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSByb3cuY2VsbHNbY29sdW1uLmluZGV4XTtcbiAgICAgICAgICAgICAgICBkYXRhLmxlZnQtLTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5sZWZ0IDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvd1NwYW5DZWxsc1tjb2x1bW4uaW5kZXhdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBjZWxsID0gcm93LmNlbGxzW2NvbHVtbi5pbmRleF07XG4gICAgICAgICAgICAgICAgaWYgKCFjZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjZWxsLmhlaWdodCA9IHJvdy5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgaWYgKGNlbGwucm93U3BhbiA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlbWFpbmluZyA9IGFsbC5sZW5ndGggLSByb3dJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlZnQgPSBjZWxsLnJvd1NwYW4gPiByZW1haW5pbmcgPyByZW1haW5pbmcgOiBjZWxsLnJvd1NwYW47XG4gICAgICAgICAgICAgICAgICAgIHJvd1NwYW5DZWxsc1tjb2x1bW4uaW5kZXhdID0geyBjZWxsOiBjZWxsLCBsZWZ0OiBsZWZ0LCByb3c6IHJvdyB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGFwcGx5Q29sU3BhbnModGFibGUpIHtcbiAgICB2YXIgYWxsID0gdGFibGUuYWxsUm93cygpO1xuICAgIGZvciAodmFyIHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCBhbGwubGVuZ3RoOyByb3dJbmRleCsrKSB7XG4gICAgICAgIHZhciByb3cgPSBhbGxbcm93SW5kZXhdO1xuICAgICAgICB2YXIgY29sU3BhbkNlbGwgPSBudWxsO1xuICAgICAgICB2YXIgY29tYmluZWRDb2xTcGFuV2lkdGggPSAwO1xuICAgICAgICB2YXIgY29sU3BhbnNMZWZ0ID0gMDtcbiAgICAgICAgZm9yICh2YXIgY29sdW1uSW5kZXggPSAwOyBjb2x1bW5JbmRleCA8IHRhYmxlLmNvbHVtbnMubGVuZ3RoOyBjb2x1bW5JbmRleCsrKSB7XG4gICAgICAgICAgICB2YXIgY29sdW1uID0gdGFibGUuY29sdW1uc1tjb2x1bW5JbmRleF07XG4gICAgICAgICAgICAvLyBXaWR0aCBhbmQgY29sc3BhblxuICAgICAgICAgICAgY29sU3BhbnNMZWZ0IC09IDE7XG4gICAgICAgICAgICBpZiAoY29sU3BhbnNMZWZ0ID4gMSAmJiB0YWJsZS5jb2x1bW5zW2NvbHVtbkluZGV4ICsgMV0pIHtcbiAgICAgICAgICAgICAgICBjb21iaW5lZENvbFNwYW5XaWR0aCArPSBjb2x1bW4ud2lkdGg7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHJvdy5jZWxsc1tjb2x1bW4uaW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29sU3BhbkNlbGwpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IGNvbFNwYW5DZWxsO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSByb3cuY2VsbHNbY29sdW1uLmluZGV4XTtcbiAgICAgICAgICAgICAgICBjb2xTcGFuQ2VsbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgY2VsbC53aWR0aCA9IGNvbHVtbi53aWR0aCArIGNvbWJpbmVkQ29sU3BhbldpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGNlbGwgPSByb3cuY2VsbHNbY29sdW1uLmluZGV4XTtcbiAgICAgICAgICAgICAgICBpZiAoIWNlbGwpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbFNwYW5zTGVmdCA9IGNlbGwuY29sU3BhbjtcbiAgICAgICAgICAgICAgICBjb21iaW5lZENvbFNwYW5XaWR0aCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGNlbGwuY29sU3BhbiA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbkNlbGwgPSBjZWxsO1xuICAgICAgICAgICAgICAgICAgICBjb21iaW5lZENvbFNwYW5XaWR0aCArPSBjb2x1bW4ud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjZWxsLndpZHRoID0gY29sdW1uLndpZHRoICsgY29tYmluZWRDb2xTcGFuV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBmaXRDb250ZW50KHRhYmxlLCBkb2MpIHtcbiAgICB2YXIgcm93U3BhbkhlaWdodCA9IHsgY291bnQ6IDAsIGhlaWdodDogMCB9O1xuICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0YWJsZS5hbGxSb3dzKCk7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhciByb3cgPSBfYVtfaV07XG4gICAgICAgIGZvciAodmFyIF9iID0gMCwgX2MgPSB0YWJsZS5jb2x1bW5zOyBfYiA8IF9jLmxlbmd0aDsgX2IrKykge1xuICAgICAgICAgICAgdmFyIGNvbHVtbiA9IF9jW19iXTtcbiAgICAgICAgICAgIHZhciBjZWxsID0gcm93LmNlbGxzW2NvbHVtbi5pbmRleF07XG4gICAgICAgICAgICBpZiAoIWNlbGwpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBkb2MuYXBwbHlTdHlsZXMoY2VsbC5zdHlsZXMsIHRydWUpO1xuICAgICAgICAgICAgdmFyIHRleHRTcGFjZSA9IGNlbGwud2lkdGggLSBjZWxsLnBhZGRpbmcoJ2hvcml6b250YWwnKTtcbiAgICAgICAgICAgIGlmIChjZWxsLnN0eWxlcy5vdmVyZmxvdyA9PT0gJ2xpbmVicmVhaycpIHtcbiAgICAgICAgICAgICAgICAvLyBBZGQgb25lIHB0IHRvIHRleHRTcGFjZSB0byBmaXggcm91bmRpbmcgZXJyb3JcbiAgICAgICAgICAgICAgICBjZWxsLnRleHQgPSBkb2Muc3BsaXRUZXh0VG9TaXplKGNlbGwudGV4dCwgdGV4dFNwYWNlICsgMSAvIGRvYy5zY2FsZUZhY3RvcigpLCB7IGZvbnRTaXplOiBjZWxsLnN0eWxlcy5mb250U2l6ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNlbGwuc3R5bGVzLm92ZXJmbG93ID09PSAnZWxsaXBzaXplJykge1xuICAgICAgICAgICAgICAgIGNlbGwudGV4dCA9IGVsbGlwc2l6ZShjZWxsLnRleHQsIHRleHRTcGFjZSwgY2VsbC5zdHlsZXMsIGRvYywgJy4uLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2VsbC5zdHlsZXMub3ZlcmZsb3cgPT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICAgICAgY2VsbC50ZXh0ID0gZWxsaXBzaXplKGNlbGwudGV4dCwgdGV4dFNwYWNlLCBjZWxsLnN0eWxlcywgZG9jLCAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgY2VsbC5zdHlsZXMub3ZlcmZsb3cgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gY2VsbC5zdHlsZXMub3ZlcmZsb3coY2VsbC50ZXh0LCB0ZXh0U3BhY2UpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBjZWxsLnRleHQgPSBbcmVzdWx0XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwudGV4dCA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjZWxsLmNvbnRlbnRIZWlnaHQgPSBjZWxsLmdldENvbnRlbnRIZWlnaHQoZG9jLnNjYWxlRmFjdG9yKCksIGRvYy5nZXRMaW5lSGVpZ2h0RmFjdG9yKCkpO1xuICAgICAgICAgICAgdmFyIHJlYWxDb250ZW50SGVpZ2h0ID0gY2VsbC5jb250ZW50SGVpZ2h0IC8gY2VsbC5yb3dTcGFuO1xuICAgICAgICAgICAgaWYgKGNlbGwucm93U3BhbiA+IDEgJiZcbiAgICAgICAgICAgICAgICByb3dTcGFuSGVpZ2h0LmNvdW50ICogcm93U3BhbkhlaWdodC5oZWlnaHQgPFxuICAgICAgICAgICAgICAgICAgICByZWFsQ29udGVudEhlaWdodCAqIGNlbGwucm93U3Bhbikge1xuICAgICAgICAgICAgICAgIHJvd1NwYW5IZWlnaHQgPSB7IGhlaWdodDogcmVhbENvbnRlbnRIZWlnaHQsIGNvdW50OiBjZWxsLnJvd1NwYW4gfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJvd1NwYW5IZWlnaHQgJiYgcm93U3BhbkhlaWdodC5jb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICBpZiAocm93U3BhbkhlaWdodC5oZWlnaHQgPiByZWFsQ29udGVudEhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICByZWFsQ29udGVudEhlaWdodCA9IHJvd1NwYW5IZWlnaHQuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZWFsQ29udGVudEhlaWdodCA+IHJvdy5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICByb3cuaGVpZ2h0ID0gcmVhbENvbnRlbnRIZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcm93U3BhbkhlaWdodC5jb3VudC0tO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGVsbGlwc2l6ZSh0ZXh0LCB3aWR0aCwgc3R5bGVzLCBkb2MsIG92ZXJmbG93KSB7XG4gICAgcmV0dXJuIHRleHQubWFwKGZ1bmN0aW9uIChzdHIpIHsgcmV0dXJuIGVsbGlwc2l6ZVN0cihzdHIsIHdpZHRoLCBzdHlsZXMsIGRvYywgb3ZlcmZsb3cpOyB9KTtcbn1cbmZ1bmN0aW9uIGVsbGlwc2l6ZVN0cih0ZXh0LCB3aWR0aCwgc3R5bGVzLCBkb2MsIG92ZXJmbG93KSB7XG4gICAgdmFyIHByZWNpc2lvbiA9IDEwMDAwICogZG9jLnNjYWxlRmFjdG9yKCk7XG4gICAgd2lkdGggPSBNYXRoLmNlaWwod2lkdGggKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uO1xuICAgIGlmICh3aWR0aCA+PSBnZXRTdHJpbmdXaWR0aCh0ZXh0LCBzdHlsZXMsIGRvYykpIHtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICAgIHdoaWxlICh3aWR0aCA8IGdldFN0cmluZ1dpZHRoKHRleHQgKyBvdmVyZmxvdywgc3R5bGVzLCBkb2MpKSB7XG4gICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgdGV4dC5sZW5ndGggLSAxKTtcbiAgICB9XG4gICAgcmV0dXJuIHRleHQudHJpbSgpICsgb3ZlcmZsb3c7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVRhYmxlKGpzUERGRG9jLCBpbnB1dCkge1xuICAgIHZhciBkb2MgPSBuZXcgRG9jSGFuZGxlcihqc1BERkRvYyk7XG4gICAgdmFyIGNvbnRlbnQgPSBwYXJzZUNvbnRlbnQoaW5wdXQsIGRvYy5zY2FsZUZhY3RvcigpKTtcbiAgICB2YXIgdGFibGUgPSBuZXcgVGFibGUoaW5wdXQsIGNvbnRlbnQpO1xuICAgIGNhbGN1bGF0ZVdpZHRocyhkb2MsIHRhYmxlKTtcbiAgICBkb2MuYXBwbHlTdHlsZXMoZG9jLnVzZXJTdHlsZXMpO1xuICAgIHJldHVybiB0YWJsZTtcbn1cbmZ1bmN0aW9uIHBhcnNlQ29udGVudChpbnB1dCwgc2YpIHtcbiAgICB2YXIgY29udGVudCA9IGlucHV0LmNvbnRlbnQ7XG4gICAgdmFyIGNvbHVtbnMgPSBjcmVhdGVDb2x1bW5zKGNvbnRlbnQuY29sdW1ucyk7XG4gICAgLy8gSWYgbm8gaGVhZCBvciBmb290IGlzIHNldCwgdHJ5IGdlbmVyYXRpbmcgaXQgd2l0aCBjb250ZW50IGZyb20gY29sdW1uc1xuICAgIGlmIChjb250ZW50LmhlYWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBzZWN0aW9uUm93ID0gZ2VuZXJhdGVTZWN0aW9uUm93KGNvbHVtbnMsICdoZWFkJyk7XG4gICAgICAgIGlmIChzZWN0aW9uUm93KVxuICAgICAgICAgICAgY29udGVudC5oZWFkLnB1c2goc2VjdGlvblJvdyk7XG4gICAgfVxuICAgIGlmIChjb250ZW50LmZvb3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBzZWN0aW9uUm93ID0gZ2VuZXJhdGVTZWN0aW9uUm93KGNvbHVtbnMsICdmb290Jyk7XG4gICAgICAgIGlmIChzZWN0aW9uUm93KVxuICAgICAgICAgICAgY29udGVudC5mb290LnB1c2goc2VjdGlvblJvdyk7XG4gICAgfVxuICAgIHZhciB0aGVtZSA9IGlucHV0LnNldHRpbmdzLnRoZW1lO1xuICAgIHZhciBzdHlsZXMgPSBpbnB1dC5zdHlsZXM7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY29sdW1uczogY29sdW1ucyxcbiAgICAgICAgaGVhZDogcGFyc2VTZWN0aW9uKCdoZWFkJywgY29udGVudC5oZWFkLCBjb2x1bW5zLCBzdHlsZXMsIHRoZW1lLCBzZiksXG4gICAgICAgIGJvZHk6IHBhcnNlU2VjdGlvbignYm9keScsIGNvbnRlbnQuYm9keSwgY29sdW1ucywgc3R5bGVzLCB0aGVtZSwgc2YpLFxuICAgICAgICBmb290OiBwYXJzZVNlY3Rpb24oJ2Zvb3QnLCBjb250ZW50LmZvb3QsIGNvbHVtbnMsIHN0eWxlcywgdGhlbWUsIHNmKSxcbiAgICB9O1xufVxuZnVuY3Rpb24gcGFyc2VTZWN0aW9uKHNlY3Rpb25OYW1lLCBzZWN0aW9uUm93cywgY29sdW1ucywgc3R5bGVQcm9wcywgdGhlbWUsIHNjYWxlRmFjdG9yKSB7XG4gICAgdmFyIHJvd1NwYW5zTGVmdEZvckNvbHVtbiA9IHt9O1xuICAgIHZhciByZXN1bHQgPSBzZWN0aW9uUm93cy5tYXAoZnVuY3Rpb24gKHJhd1Jvdywgcm93SW5kZXgpIHtcbiAgICAgICAgdmFyIHNraXBwZWRSb3dGb3JSb3dTcGFucyA9IDA7XG4gICAgICAgIHZhciBjZWxscyA9IHt9O1xuICAgICAgICB2YXIgY29sU3BhbnNBZGRlZCA9IDA7XG4gICAgICAgIHZhciBjb2x1bW5TcGFuc0xlZnQgPSAwO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGNvbHVtbnNfMSA9IGNvbHVtbnM7IF9pIDwgY29sdW1uc18xLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgdmFyIGNvbHVtbiA9IGNvbHVtbnNfMVtfaV07XG4gICAgICAgICAgICBpZiAocm93U3BhbnNMZWZ0Rm9yQ29sdW1uW2NvbHVtbi5pbmRleF0gPT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgIHJvd1NwYW5zTGVmdEZvckNvbHVtbltjb2x1bW4uaW5kZXhdLmxlZnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uU3BhbnNMZWZ0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByYXdDZWxsID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyYXdSb3cpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByYXdDZWxsID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdSb3dbY29sdW1uLmluZGV4IC0gY29sU3BhbnNBZGRlZCAtIHNraXBwZWRSb3dGb3JSb3dTcGFuc107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByYXdDZWxsID0gcmF3Um93W2NvbHVtbi5kYXRhS2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbElucHV0U3R5bGVzID0ge307XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmF3Q2VsbCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkocmF3Q2VsbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxJbnB1dFN0eWxlcyA9IChyYXdDZWxsID09PSBudWxsIHx8IHJhd0NlbGwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJhd0NlbGwuc3R5bGVzKSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgc3R5bGVzID0gY2VsbFN0eWxlcyhzZWN0aW9uTmFtZSwgY29sdW1uLCByb3dJbmRleCwgdGhlbWUsIHN0eWxlUHJvcHMsIHNjYWxlRmFjdG9yLCBjZWxsSW5wdXRTdHlsZXMpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKHJhd0NlbGwsIHN0eWxlcywgc2VjdGlvbk5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAvLyBkYXRhS2V5IGlzIG5vdCB1c2VkIGludGVybmFsbHkgbm8gbW9yZSBidXQga2VlcCBmb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBpbiBob29rc1xuICAgICAgICAgICAgICAgICAgICBjZWxsc1tjb2x1bW4uZGF0YUtleV0gPSBjZWxsO1xuICAgICAgICAgICAgICAgICAgICBjZWxsc1tjb2x1bW4uaW5kZXhdID0gY2VsbDtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uU3BhbnNMZWZ0ID0gY2VsbC5jb2xTcGFuIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgcm93U3BhbnNMZWZ0Rm9yQ29sdW1uW2NvbHVtbi5pbmRleF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBjZWxsLnJvd1NwYW4gLSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZXM6IGNvbHVtblNwYW5zTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtblNwYW5zTGVmdC0tO1xuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuc0FkZGVkKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcm93U3BhbnNMZWZ0Rm9yQ29sdW1uW2NvbHVtbi5pbmRleF0ubGVmdC0tO1xuICAgICAgICAgICAgICAgIGNvbHVtblNwYW5zTGVmdCA9IHJvd1NwYW5zTGVmdEZvckNvbHVtbltjb2x1bW4uaW5kZXhdLnRpbWVzO1xuICAgICAgICAgICAgICAgIHNraXBwZWRSb3dGb3JSb3dTcGFucysrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUm93KHJhd1Jvdywgcm93SW5kZXgsIHNlY3Rpb25OYW1lLCBjZWxscyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdlbmVyYXRlU2VjdGlvblJvdyhjb2x1bW5zLCBzZWN0aW9uKSB7XG4gICAgdmFyIHNlY3Rpb25Sb3cgPSB7fTtcbiAgICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbCkge1xuICAgICAgICBpZiAoY29sLnJhdyAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBnZXRTZWN0aW9uVGl0bGUoc2VjdGlvbiwgY29sLnJhdyk7XG4gICAgICAgICAgICBpZiAodGl0bGUgIT0gbnVsbClcbiAgICAgICAgICAgICAgICBzZWN0aW9uUm93W2NvbC5kYXRhS2V5XSA9IHRpdGxlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHNlY3Rpb25Sb3cpLmxlbmd0aCA+IDAgPyBzZWN0aW9uUm93IDogbnVsbDtcbn1cbmZ1bmN0aW9uIGdldFNlY3Rpb25UaXRsZShzZWN0aW9uLCBjb2x1bW4pIHtcbiAgICBpZiAoc2VjdGlvbiA9PT0gJ2hlYWQnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29sdW1uID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5oZWFkZXIgfHwgbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgY29sdW1uID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgY29sdW1uID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChzZWN0aW9uID09PSAnZm9vdCcgJiYgdHlwZW9mIGNvbHVtbiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5mb290ZXI7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gY3JlYXRlQ29sdW1ucyhjb2x1bW5zKSB7XG4gICAgcmV0dXJuIGNvbHVtbnMubWFwKGZ1bmN0aW9uIChpbnB1dCwgaW5kZXgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAga2V5ID0gKF9hID0gaW5wdXQuZGF0YUtleSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogaW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBrZXkgPSBpbmRleDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENvbHVtbihrZXksIGlucHV0LCBpbmRleCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBjZWxsU3R5bGVzKHNlY3Rpb25OYW1lLCBjb2x1bW4sIHJvd0luZGV4LCB0aGVtZU5hbWUsIHN0eWxlcywgc2NhbGVGYWN0b3IsIGNlbGxJbnB1dFN0eWxlcykge1xuICAgIHZhciB0aGVtZSA9IGdldFRoZW1lKHRoZW1lTmFtZSk7XG4gICAgdmFyIHNlY3Rpb25TdHlsZXM7XG4gICAgaWYgKHNlY3Rpb25OYW1lID09PSAnaGVhZCcpIHtcbiAgICAgICAgc2VjdGlvblN0eWxlcyA9IHN0eWxlcy5oZWFkU3R5bGVzO1xuICAgIH1cbiAgICBlbHNlIGlmIChzZWN0aW9uTmFtZSA9PT0gJ2JvZHknKSB7XG4gICAgICAgIHNlY3Rpb25TdHlsZXMgPSBzdHlsZXMuYm9keVN0eWxlcztcbiAgICB9XG4gICAgZWxzZSBpZiAoc2VjdGlvbk5hbWUgPT09ICdmb290Jykge1xuICAgICAgICBzZWN0aW9uU3R5bGVzID0gc3R5bGVzLmZvb3RTdHlsZXM7XG4gICAgfVxuICAgIHZhciBvdGhlclN0eWxlcyA9IGFzc2lnbih7fSwgdGhlbWUudGFibGUsIHRoZW1lW3NlY3Rpb25OYW1lXSwgc3R5bGVzLnN0eWxlcywgc2VjdGlvblN0eWxlcyk7XG4gICAgdmFyIGNvbHVtblN0eWxlcyA9IHN0eWxlcy5jb2x1bW5TdHlsZXNbY29sdW1uLmRhdGFLZXldIHx8XG4gICAgICAgIHN0eWxlcy5jb2x1bW5TdHlsZXNbY29sdW1uLmluZGV4XSB8fFxuICAgICAgICB7fTtcbiAgICB2YXIgY29sU3R5bGVzID0gc2VjdGlvbk5hbWUgPT09ICdib2R5JyA/IGNvbHVtblN0eWxlcyA6IHt9O1xuICAgIHZhciByb3dTdHlsZXMgPSBzZWN0aW9uTmFtZSA9PT0gJ2JvZHknICYmIHJvd0luZGV4ICUgMiA9PT0gMFxuICAgICAgICA/IGFzc2lnbih7fSwgdGhlbWUuYWx0ZXJuYXRlUm93LCBzdHlsZXMuYWx0ZXJuYXRlUm93U3R5bGVzKVxuICAgICAgICA6IHt9O1xuICAgIHZhciBkZWZhdWx0U3R5bGUgPSBkZWZhdWx0U3R5bGVzKHNjYWxlRmFjdG9yKTtcbiAgICB2YXIgdGhlbWVTdHlsZXMgPSBhc3NpZ24oe30sIGRlZmF1bHRTdHlsZSwgb3RoZXJTdHlsZXMsIHJvd1N0eWxlcywgY29sU3R5bGVzKTtcbiAgICByZXR1cm4gYXNzaWduKHRoZW1lU3R5bGVzLCBjZWxsSW5wdXRTdHlsZXMpO1xufVxuXG4vLyBnZXQgY29sdW1ucyBjYW4gYmUgZml0IGludG8gcGFnZVxuZnVuY3Rpb24gZ2V0Q29sdW1uc0NhbkZpdEluUGFnZShkb2MsIHRhYmxlLCBjb25maWcpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKGNvbmZpZyA9PT0gdm9pZCAwKSB7IGNvbmZpZyA9IHt9OyB9XG4gICAgLy8gR2V0IHBhZ2Ugd2lkdGhcbiAgICB2YXIgcmVtYWluaW5nV2lkdGggPSBnZXRQYWdlQXZhaWxhYmxlV2lkdGgoZG9jLCB0YWJsZSk7XG4gICAgLy8gR2V0IGNvbHVtbiBkYXRhIGtleSB0byByZXBlYXRcbiAgICB2YXIgcmVwZWF0Q29sdW1uc01hcCA9IG5ldyBNYXAoKTtcbiAgICB2YXIgY29sSW5kZXhlcyA9IFtdO1xuICAgIHZhciBjb2x1bW5zID0gW107XG4gICAgdmFyIGhvcml6b250YWxQYWdlQnJlYWtSZXBlYXQgPSBbXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0YWJsZS5zZXR0aW5ncy5ob3Jpem9udGFsUGFnZUJyZWFrUmVwZWF0KSkge1xuICAgICAgICBob3Jpem9udGFsUGFnZUJyZWFrUmVwZWF0ID0gdGFibGUuc2V0dGluZ3MuaG9yaXpvbnRhbFBhZ2VCcmVha1JlcGVhdDtcbiAgICAgICAgLy8gSXQgY2FuIGJlIGEgc2luZ2xlIHZhbHVlIG9mIHR5cGUgc3RyaW5nIG9yIG51bWJlciAoZXZlbiBudW1iZXI6IDApXG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiB0YWJsZS5zZXR0aW5ncy5ob3Jpem9udGFsUGFnZUJyZWFrUmVwZWF0ID09PSAnc3RyaW5nJyB8fFxuICAgICAgICB0eXBlb2YgdGFibGUuc2V0dGluZ3MuaG9yaXpvbnRhbFBhZ2VCcmVha1JlcGVhdCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaG9yaXpvbnRhbFBhZ2VCcmVha1JlcGVhdCA9IFt0YWJsZS5zZXR0aW5ncy5ob3Jpem9udGFsUGFnZUJyZWFrUmVwZWF0XTtcbiAgICB9XG4gICAgLy8gQ29kZSB0byByZXBlYXQgdGhlIGdpdmVuIGNvbHVtbiBpbiBzcGxpdCBwYWdlc1xuICAgIGhvcml6b250YWxQYWdlQnJlYWtSZXBlYXQuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgICAgdmFyIGNvbCA9IHRhYmxlLmNvbHVtbnMuZmluZChmdW5jdGlvbiAoaXRlbSkgeyByZXR1cm4gaXRlbS5kYXRhS2V5ID09PSBmaWVsZCB8fCBpdGVtLmluZGV4ID09PSBmaWVsZDsgfSk7XG4gICAgICAgIGlmIChjb2wgJiYgIXJlcGVhdENvbHVtbnNNYXAuaGFzKGNvbC5pbmRleCkpIHtcbiAgICAgICAgICAgIHJlcGVhdENvbHVtbnNNYXAuc2V0KGNvbC5pbmRleCwgdHJ1ZSk7XG4gICAgICAgICAgICBjb2xJbmRleGVzLnB1c2goY29sLmluZGV4KTtcbiAgICAgICAgICAgIGNvbHVtbnMucHVzaCh0YWJsZS5jb2x1bW5zW2NvbC5pbmRleF0pO1xuICAgICAgICAgICAgcmVtYWluaW5nV2lkdGggLT0gY29sLndyYXBwZWRXaWR0aDtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHZhciBmaXJzdCA9IHRydWU7XG4gICAgdmFyIGkgPSAoX2EgPSBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcuc3RhcnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDA7IC8vIG1ha2Ugc3VyZSBjb3V0ZXIgaXMgaW5pdGlhdGVkIG91dHNpZGUgdGhlIGxvb3BcbiAgICB3aGlsZSAoaSA8IHRhYmxlLmNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIFByZXZlbnQgZHVwbGljYXRlc1xuICAgICAgICBpZiAocmVwZWF0Q29sdW1uc01hcC5oYXMoaSkpIHtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb2xXaWR0aCA9IHRhYmxlLmNvbHVtbnNbaV0ud3JhcHBlZFdpZHRoO1xuICAgICAgICAvLyBUYWtlIGF0IGxlYXN0IG9uZSBjb2x1bW4gZXZlbiBpZiBpdCBkb2Vzbid0IGZpdFxuICAgICAgICBpZiAoZmlyc3QgfHwgcmVtYWluaW5nV2lkdGggPj0gY29sV2lkdGgpIHtcbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7XG4gICAgICAgICAgICBjb2xJbmRleGVzLnB1c2goaSk7XG4gICAgICAgICAgICBjb2x1bW5zLnB1c2godGFibGUuY29sdW1uc1tpXSk7XG4gICAgICAgICAgICByZW1haW5pbmdXaWR0aCAtPSBjb2xXaWR0aDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIHsgY29sSW5kZXhlczogY29sSW5kZXhlcywgY29sdW1uczogY29sdW1ucywgbGFzdEluZGV4OiBpIC0gMSB9O1xufVxuZnVuY3Rpb24gY2FsY3VsYXRlQWxsQ29sdW1uc0NhbkZpdEluUGFnZShkb2MsIHRhYmxlKSB7XG4gICAgdmFyIGFsbFJlc3VsdHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYmxlLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGdldENvbHVtbnNDYW5GaXRJblBhZ2UoZG9jLCB0YWJsZSwgeyBzdGFydDogaSB9KTtcbiAgICAgICAgaWYgKHJlc3VsdC5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgYWxsUmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgICAgICBpID0gcmVzdWx0Lmxhc3RJbmRleDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWxsUmVzdWx0cztcbn1cblxuZnVuY3Rpb24gZHJhd1RhYmxlKGpzUERGRG9jLCB0YWJsZSkge1xuICAgIHZhciBzZXR0aW5ncyA9IHRhYmxlLnNldHRpbmdzO1xuICAgIHZhciBzdGFydFkgPSBzZXR0aW5ncy5zdGFydFk7XG4gICAgdmFyIG1hcmdpbiA9IHNldHRpbmdzLm1hcmdpbjtcbiAgICB2YXIgY3Vyc29yID0geyB4OiBtYXJnaW4ubGVmdCwgeTogc3RhcnRZIH07XG4gICAgdmFyIHNlY3Rpb25zSGVpZ2h0ID0gdGFibGUuZ2V0SGVhZEhlaWdodCh0YWJsZS5jb2x1bW5zKSArIHRhYmxlLmdldEZvb3RIZWlnaHQodGFibGUuY29sdW1ucyk7XG4gICAgdmFyIG1pblRhYmxlQm90dG9tUG9zID0gc3RhcnRZICsgbWFyZ2luLmJvdHRvbSArIHNlY3Rpb25zSGVpZ2h0O1xuICAgIGlmIChzZXR0aW5ncy5wYWdlQnJlYWsgPT09ICdhdm9pZCcpIHtcbiAgICAgICAgdmFyIHJvd3MgPSB0YWJsZS5ib2R5O1xuICAgICAgICB2YXIgdGFibGVIZWlnaHQgPSByb3dzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCByb3cpIHsgcmV0dXJuIGFjYyArIHJvdy5oZWlnaHQ7IH0sIDApO1xuICAgICAgICBtaW5UYWJsZUJvdHRvbVBvcyArPSB0YWJsZUhlaWdodDtcbiAgICB9XG4gICAgdmFyIGRvYyA9IG5ldyBEb2NIYW5kbGVyKGpzUERGRG9jKTtcbiAgICBpZiAoc2V0dGluZ3MucGFnZUJyZWFrID09PSAnYWx3YXlzJyB8fFxuICAgICAgICAoc2V0dGluZ3Muc3RhcnRZICE9IG51bGwgJiYgbWluVGFibGVCb3R0b21Qb3MgPiBkb2MucGFnZVNpemUoKS5oZWlnaHQpKSB7XG4gICAgICAgIG5leHRQYWdlKGRvYyk7XG4gICAgICAgIGN1cnNvci55ID0gbWFyZ2luLnRvcDtcbiAgICB9XG4gICAgdGFibGUuY2FsbFdpbGxEcmF3UGFnZUhvb2tzKGRvYywgY3Vyc29yKTtcbiAgICB2YXIgc3RhcnRQb3MgPSBhc3NpZ24oe30sIGN1cnNvcik7XG4gICAgdGFibGUuc3RhcnRQYWdlTnVtYmVyID0gZG9jLnBhZ2VOdW1iZXIoKTtcbiAgICBpZiAoc2V0dGluZ3MuaG9yaXpvbnRhbFBhZ2VCcmVhaykge1xuICAgICAgICAvLyBtYW5hZ2VkIGZsb3cgZm9yIHNwbGl0IGNvbHVtbnNcbiAgICAgICAgcHJpbnRUYWJsZVdpdGhIb3Jpem9udGFsUGFnZUJyZWFrKGRvYywgdGFibGUsIHN0YXJ0UG9zLCBjdXJzb3IpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gbm9ybWFsIGZsb3dcbiAgICAgICAgZG9jLmFwcGx5U3R5bGVzKGRvYy51c2VyU3R5bGVzKTtcbiAgICAgICAgaWYgKHNldHRpbmdzLnNob3dIZWFkID09PSAnZmlyc3RQYWdlJyB8fFxuICAgICAgICAgICAgc2V0dGluZ3Muc2hvd0hlYWQgPT09ICdldmVyeVBhZ2UnKSB7XG4gICAgICAgICAgICB0YWJsZS5oZWFkLmZvckVhY2goZnVuY3Rpb24gKHJvdykge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmludFJvdyhkb2MsIHRhYmxlLCByb3csIGN1cnNvciwgdGFibGUuY29sdW1ucyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkb2MuYXBwbHlTdHlsZXMoZG9jLnVzZXJTdHlsZXMpO1xuICAgICAgICB0YWJsZS5ib2R5LmZvckVhY2goZnVuY3Rpb24gKHJvdywgaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBpc0xhc3RSb3cgPSBpbmRleCA9PT0gdGFibGUuYm9keS5sZW5ndGggLSAxO1xuICAgICAgICAgICAgcHJpbnRGdWxsUm93KGRvYywgdGFibGUsIHJvdywgaXNMYXN0Um93LCBzdGFydFBvcywgY3Vyc29yLCB0YWJsZS5jb2x1bW5zKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRvYy5hcHBseVN0eWxlcyhkb2MudXNlclN0eWxlcyk7XG4gICAgICAgIGlmIChzZXR0aW5ncy5zaG93Rm9vdCA9PT0gJ2xhc3RQYWdlJyB8fCBzZXR0aW5ncy5zaG93Rm9vdCA9PT0gJ2V2ZXJ5UGFnZScpIHtcbiAgICAgICAgICAgIHRhYmxlLmZvb3QuZm9yRWFjaChmdW5jdGlvbiAocm93KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByaW50Um93KGRvYywgdGFibGUsIHJvdywgY3Vyc29yLCB0YWJsZS5jb2x1bW5zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZFRhYmxlQm9yZGVyKGRvYywgdGFibGUsIHN0YXJ0UG9zLCBjdXJzb3IpO1xuICAgIHRhYmxlLmNhbGxFbmRQYWdlSG9va3MoZG9jLCBjdXJzb3IpO1xuICAgIHRhYmxlLmZpbmFsWSA9IGN1cnNvci55O1xuICAgIGpzUERGRG9jLmxhc3RBdXRvVGFibGUgPSB0YWJsZTtcbiAgICBkb2MuYXBwbHlTdHlsZXMoZG9jLnVzZXJTdHlsZXMpO1xufVxuZnVuY3Rpb24gcHJpbnRUYWJsZVdpdGhIb3Jpem9udGFsUGFnZUJyZWFrKGRvYywgdGFibGUsIHN0YXJ0UG9zLCBjdXJzb3IpIHtcbiAgICAvLyBjYWxjdWxhdGUgd2lkdGggb2YgY29sdW1ucyBhbmQgcmVuZGVyIG9ubHkgdGhvc2Ugd2hpY2ggY2FuIGZpdCBpbnRvIHBhZ2VcbiAgICB2YXIgYWxsQ29sdW1uc0NhbkZpdFJlc3VsdCA9IGNhbGN1bGF0ZUFsbENvbHVtbnNDYW5GaXRJblBhZ2UoZG9jLCB0YWJsZSk7XG4gICAgdmFyIHNldHRpbmdzID0gdGFibGUuc2V0dGluZ3M7XG4gICAgaWYgKHNldHRpbmdzLmhvcml6b250YWxQYWdlQnJlYWtCZWhhdmlvdXIgPT09ICdhZnRlckFsbFJvd3MnKSB7XG4gICAgICAgIGFsbENvbHVtbnNDYW5GaXRSZXN1bHQuZm9yRWFjaChmdW5jdGlvbiAoY29sc0FuZEluZGV4ZXMsIGluZGV4KSB7XG4gICAgICAgICAgICBkb2MuYXBwbHlTdHlsZXMoZG9jLnVzZXJTdHlsZXMpO1xuICAgICAgICAgICAgLy8gYWRkIHBhZ2UgdG8gcHJpbnQgbmV4dCBjb2x1bW5zIGluIG5ldyBwYWdlXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gV2hlbiBhZGRpbmcgYSBwYWdlIGhlcmUsIG1ha2Ugc3VyZSBub3QgdG8gcHJpbnQgdGhlIGZvb3RlcnNcbiAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIHRoZXkgd2VyZSBhbHJlYWR5IHByaW50ZWQgYmVmb3JlIG9uIHRoaXMgc2FtZSBsb29wXG4gICAgICAgICAgICAgICAgYWRkUGFnZShkb2MsIHRhYmxlLCBzdGFydFBvcywgY3Vyc29yLCBjb2xzQW5kSW5kZXhlcy5jb2x1bW5zLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHByaW50IGhlYWQgZm9yIHNlbGVjdGVkIGNvbHVtbnNcbiAgICAgICAgICAgICAgICBwcmludEhlYWQoZG9jLCB0YWJsZSwgY3Vyc29yLCBjb2xzQW5kSW5kZXhlcy5jb2x1bW5zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHByaW50IGJvZHkgJiBmb290ZXIgZm9yIHNlbGVjdGVkIGNvbHVtbnNcbiAgICAgICAgICAgIHByaW50Qm9keShkb2MsIHRhYmxlLCBzdGFydFBvcywgY3Vyc29yLCBjb2xzQW5kSW5kZXhlcy5jb2x1bW5zKTtcbiAgICAgICAgICAgIHByaW50Rm9vdChkb2MsIHRhYmxlLCBjdXJzb3IsIGNvbHNBbmRJbmRleGVzLmNvbHVtbnMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBsYXN0Um93SW5kZXhPZkxhc3RQYWdlXzEgPSAtMTtcbiAgICAgICAgdmFyIGZpcnN0Q29sdW1uc1RvRml0UmVzdWx0ID0gYWxsQ29sdW1uc0NhbkZpdFJlc3VsdFswXTtcbiAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBQcmludCB0aGUgZmlyc3QgY29sdW1ucywgdGFraW5nIG5vdGUgb2YgdGhlIGxhc3Qgcm93IHByaW50ZWRcbiAgICAgICAgICAgIHZhciBsYXN0UHJpbnRlZFJvd0luZGV4ID0gbGFzdFJvd0luZGV4T2ZMYXN0UGFnZV8xO1xuICAgICAgICAgICAgaWYgKGZpcnN0Q29sdW1uc1RvRml0UmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgZG9jLmFwcGx5U3R5bGVzKGRvYy51c2VyU3R5bGVzKTtcbiAgICAgICAgICAgICAgICB2YXIgZmlyc3RDb2x1bW5zVG9GaXQgPSBmaXJzdENvbHVtbnNUb0ZpdFJlc3VsdC5jb2x1bW5zO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0Um93SW5kZXhPZkxhc3RQYWdlXzEgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGFkZGluZyBhIHBhZ2UgaGVyZSwgbWFrZSBzdXJlIG5vdCB0byBwcmludCB0aGUgZm9vdGVyc1xuICAgICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIHRoZXkgd2VyZSBhbHJlYWR5IHByaW50ZWQgYmVmb3JlIG9uIHRoaXMgc2FtZSBsb29wXG4gICAgICAgICAgICAgICAgICAgIGFkZFBhZ2UoZG9jLCB0YWJsZSwgc3RhcnRQb3MsIGN1cnNvciwgZmlyc3RDb2x1bW5zVG9GaXQsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcHJpbnRIZWFkKGRvYywgdGFibGUsIGN1cnNvciwgZmlyc3RDb2x1bW5zVG9GaXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsYXN0UHJpbnRlZFJvd0luZGV4ID0gcHJpbnRCb2R5V2l0aG91dFBhZ2VCcmVha3MoZG9jLCB0YWJsZSwgbGFzdFJvd0luZGV4T2ZMYXN0UGFnZV8xICsgMSwgY3Vyc29yLCBmaXJzdENvbHVtbnNUb0ZpdCk7XG4gICAgICAgICAgICAgICAgcHJpbnRGb290KGRvYywgdGFibGUsIGN1cnNvciwgZmlyc3RDb2x1bW5zVG9GaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2hlY2sgaG93IG1hbnkgcm93cyB3ZXJlIHByaW50ZWQsIHNvIHRoYXQgdGhlIG5leHQgY29sdW1ucyB3b3VsZCBub3QgcHJpbnQgbW9yZSByb3dzIHRoYW4gdGhhdFxuICAgICAgICAgICAgdmFyIG1heE51bWJlck9mUm93cyA9IGxhc3RQcmludGVkUm93SW5kZXggLSBsYXN0Um93SW5kZXhPZkxhc3RQYWdlXzE7XG4gICAgICAgICAgICAvLyBQcmludCB0aGUgbmV4dCBjb2x1bW5zLCBuZXZlciBleGNlZGluZyBtYXhOdW1iZXJPZlJvd3NcbiAgICAgICAgICAgIGFsbENvbHVtbnNDYW5GaXRSZXN1bHQuc2xpY2UoMSkuZm9yRWFjaChmdW5jdGlvbiAoY29sc0FuZEluZGV4ZXMpIHtcbiAgICAgICAgICAgICAgICBkb2MuYXBwbHlTdHlsZXMoZG9jLnVzZXJTdHlsZXMpO1xuICAgICAgICAgICAgICAgIC8vIFdoZW4gYWRkaW5nIGEgcGFnZSBoZXJlLCBtYWtlIHN1cmUgbm90IHRvIHByaW50IHRoZSBmb290ZXJzXG4gICAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGV5IHdlcmUgYWxyZWFkeSBwcmludGVkIGJlZm9yZSBvbiB0aGlzIHNhbWUgbG9vcFxuICAgICAgICAgICAgICAgIGFkZFBhZ2UoZG9jLCB0YWJsZSwgc3RhcnRQb3MsIGN1cnNvciwgY29sc0FuZEluZGV4ZXMuY29sdW1ucywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgcHJpbnRCb2R5V2l0aG91dFBhZ2VCcmVha3MoZG9jLCB0YWJsZSwgbGFzdFJvd0luZGV4T2ZMYXN0UGFnZV8xICsgMSwgY3Vyc29yLCBjb2xzQW5kSW5kZXhlcy5jb2x1bW5zLCBtYXhOdW1iZXJPZlJvd3MpO1xuICAgICAgICAgICAgICAgIHByaW50Rm9vdChkb2MsIHRhYmxlLCBjdXJzb3IsIGNvbHNBbmRJbmRleGVzLmNvbHVtbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsYXN0Um93SW5kZXhPZkxhc3RQYWdlXzEgPSBsYXN0UHJpbnRlZFJvd0luZGV4O1xuICAgICAgICB9O1xuICAgICAgICB3aGlsZSAobGFzdFJvd0luZGV4T2ZMYXN0UGFnZV8xIDwgdGFibGUuYm9keS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBfbG9vcF8xKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBwcmludEhlYWQoZG9jLCB0YWJsZSwgY3Vyc29yLCBjb2x1bW5zKSB7XG4gICAgdmFyIHNldHRpbmdzID0gdGFibGUuc2V0dGluZ3M7XG4gICAgZG9jLmFwcGx5U3R5bGVzKGRvYy51c2VyU3R5bGVzKTtcbiAgICBpZiAoc2V0dGluZ3Muc2hvd0hlYWQgPT09ICdmaXJzdFBhZ2UnIHx8IHNldHRpbmdzLnNob3dIZWFkID09PSAnZXZlcnlQYWdlJykge1xuICAgICAgICB0YWJsZS5oZWFkLmZvckVhY2goZnVuY3Rpb24gKHJvdykgeyByZXR1cm4gcHJpbnRSb3coZG9jLCB0YWJsZSwgcm93LCBjdXJzb3IsIGNvbHVtbnMpOyB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiBwcmludEJvZHkoZG9jLCB0YWJsZSwgc3RhcnRQb3MsIGN1cnNvciwgY29sdW1ucykge1xuICAgIGRvYy5hcHBseVN0eWxlcyhkb2MudXNlclN0eWxlcyk7XG4gICAgdGFibGUuYm9keS5mb3JFYWNoKGZ1bmN0aW9uIChyb3csIGluZGV4KSB7XG4gICAgICAgIHZhciBpc0xhc3RSb3cgPSBpbmRleCA9PT0gdGFibGUuYm9keS5sZW5ndGggLSAxO1xuICAgICAgICBwcmludEZ1bGxSb3coZG9jLCB0YWJsZSwgcm93LCBpc0xhc3RSb3csIHN0YXJ0UG9zLCBjdXJzb3IsIGNvbHVtbnMpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gcHJpbnRCb2R5V2l0aG91dFBhZ2VCcmVha3MoZG9jLCB0YWJsZSwgc3RhcnRSb3dJbmRleCwgY3Vyc29yLCBjb2x1bW5zLCBtYXhOdW1iZXJPZlJvd3MpIHtcbiAgICBkb2MuYXBwbHlTdHlsZXMoZG9jLnVzZXJTdHlsZXMpO1xuICAgIG1heE51bWJlck9mUm93cyA9IG1heE51bWJlck9mUm93cyAhPT0gbnVsbCAmJiBtYXhOdW1iZXJPZlJvd3MgIT09IHZvaWQgMCA/IG1heE51bWJlck9mUm93cyA6IHRhYmxlLmJvZHkubGVuZ3RoO1xuICAgIHZhciBlbmRSb3dJbmRleCA9IE1hdGgubWluKHN0YXJ0Um93SW5kZXggKyBtYXhOdW1iZXJPZlJvd3MsIHRhYmxlLmJvZHkubGVuZ3RoKTtcbiAgICB2YXIgbGFzdFByaW50ZWRSb3dJbmRleCA9IC0xO1xuICAgIHZhciByb3dzID0gdGFibGUuYm9keS5zbGljZShzdGFydFJvd0luZGV4LCBlbmRSb3dJbmRleCk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHJvd3MubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHZhciByb3cgPSByb3dzW2luZGV4XTtcbiAgICAgICAgdmFyIGlzTGFzdFJvdyA9IHN0YXJ0Um93SW5kZXggKyBpbmRleCA9PT0gdGFibGUuYm9keS5sZW5ndGggLSAxO1xuICAgICAgICB2YXIgcmVtYWluaW5nU3BhY2UgPSBnZXRSZW1haW5pbmdQYWdlU3BhY2UoZG9jLCB0YWJsZSwgaXNMYXN0Um93LCBjdXJzb3IpO1xuICAgICAgICBpZiAocm93LmNhbkVudGlyZVJvd0ZpdChyZW1haW5pbmdTcGFjZSwgY29sdW1ucykpIHtcbiAgICAgICAgICAgIHByaW50Um93KGRvYywgdGFibGUsIHJvdywgY3Vyc29yLCBjb2x1bW5zKTtcbiAgICAgICAgICAgIGxhc3RQcmludGVkUm93SW5kZXggPSBzdGFydFJvd0luZGV4ICsgaW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbGFzdFByaW50ZWRSb3dJbmRleDtcbn1cbmZ1bmN0aW9uIHByaW50Rm9vdChkb2MsIHRhYmxlLCBjdXJzb3IsIGNvbHVtbnMpIHtcbiAgICB2YXIgc2V0dGluZ3MgPSB0YWJsZS5zZXR0aW5ncztcbiAgICBkb2MuYXBwbHlTdHlsZXMoZG9jLnVzZXJTdHlsZXMpO1xuICAgIGlmIChzZXR0aW5ncy5zaG93Rm9vdCA9PT0gJ2xhc3RQYWdlJyB8fCBzZXR0aW5ncy5zaG93Rm9vdCA9PT0gJ2V2ZXJ5UGFnZScpIHtcbiAgICAgICAgdGFibGUuZm9vdC5mb3JFYWNoKGZ1bmN0aW9uIChyb3cpIHsgcmV0dXJuIHByaW50Um93KGRvYywgdGFibGUsIHJvdywgY3Vyc29yLCBjb2x1bW5zKTsgfSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0UmVtYWluaW5nTGluZUNvdW50KGNlbGwsIHJlbWFpbmluZ1BhZ2VTcGFjZSwgZG9jKSB7XG4gICAgdmFyIGxpbmVIZWlnaHQgPSBkb2MuZ2V0TGluZUhlaWdodChjZWxsLnN0eWxlcy5mb250U2l6ZSk7XG4gICAgdmFyIHZQYWRkaW5nID0gY2VsbC5wYWRkaW5nKCd2ZXJ0aWNhbCcpO1xuICAgIHZhciByZW1haW5pbmdMaW5lcyA9IE1hdGguZmxvb3IoKHJlbWFpbmluZ1BhZ2VTcGFjZSAtIHZQYWRkaW5nKSAvIGxpbmVIZWlnaHQpO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCByZW1haW5pbmdMaW5lcyk7XG59XG5mdW5jdGlvbiBtb2RpZnlSb3dUb0ZpdChyb3csIHJlbWFpbmluZ1BhZ2VTcGFjZSwgdGFibGUsIGRvYykge1xuICAgIHZhciBjZWxscyA9IHt9O1xuICAgIHJvdy5zcGFuc011bHRpcGxlUGFnZXMgPSB0cnVlO1xuICAgIHJvdy5oZWlnaHQgPSAwO1xuICAgIHZhciByb3dIZWlnaHQgPSAwO1xuICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0YWJsZS5jb2x1bW5zOyBfaSA8IF9hLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXIgY29sdW1uID0gX2FbX2ldO1xuICAgICAgICB2YXIgY2VsbCA9IHJvdy5jZWxsc1tjb2x1bW4uaW5kZXhdO1xuICAgICAgICBpZiAoIWNlbGwpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNlbGwudGV4dCkpIHtcbiAgICAgICAgICAgIGNlbGwudGV4dCA9IFtjZWxsLnRleHRdO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZW1haW5kZXJDZWxsID0gbmV3IENlbGwoY2VsbC5yYXcsIGNlbGwuc3R5bGVzLCBjZWxsLnNlY3Rpb24pO1xuICAgICAgICByZW1haW5kZXJDZWxsID0gYXNzaWduKHJlbWFpbmRlckNlbGwsIGNlbGwpO1xuICAgICAgICByZW1haW5kZXJDZWxsLnRleHQgPSBbXTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ0xpbmVDb3VudCA9IGdldFJlbWFpbmluZ0xpbmVDb3VudChjZWxsLCByZW1haW5pbmdQYWdlU3BhY2UsIGRvYyk7XG4gICAgICAgIGlmIChjZWxsLnRleHQubGVuZ3RoID4gcmVtYWluaW5nTGluZUNvdW50KSB7XG4gICAgICAgICAgICByZW1haW5kZXJDZWxsLnRleHQgPSBjZWxsLnRleHQuc3BsaWNlKHJlbWFpbmluZ0xpbmVDb3VudCwgY2VsbC50ZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNjYWxlRmFjdG9yID0gZG9jLnNjYWxlRmFjdG9yKCk7XG4gICAgICAgIHZhciBsaW5lSGVpZ2h0RmFjdG9yID0gZG9jLmdldExpbmVIZWlnaHRGYWN0b3IoKTtcbiAgICAgICAgY2VsbC5jb250ZW50SGVpZ2h0ID0gY2VsbC5nZXRDb250ZW50SGVpZ2h0KHNjYWxlRmFjdG9yLCBsaW5lSGVpZ2h0RmFjdG9yKTtcbiAgICAgICAgaWYgKGNlbGwuY29udGVudEhlaWdodCA+PSByZW1haW5pbmdQYWdlU3BhY2UpIHtcbiAgICAgICAgICAgIGNlbGwuY29udGVudEhlaWdodCA9IHJlbWFpbmluZ1BhZ2VTcGFjZTtcbiAgICAgICAgICAgIHJlbWFpbmRlckNlbGwuc3R5bGVzLm1pbkNlbGxIZWlnaHQgLT0gcmVtYWluaW5nUGFnZVNwYWNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZWxsLmNvbnRlbnRIZWlnaHQgPiByb3cuaGVpZ2h0KSB7XG4gICAgICAgICAgICByb3cuaGVpZ2h0ID0gY2VsbC5jb250ZW50SGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHJlbWFpbmRlckNlbGwuY29udGVudEhlaWdodCA9IHJlbWFpbmRlckNlbGwuZ2V0Q29udGVudEhlaWdodChzY2FsZUZhY3RvciwgbGluZUhlaWdodEZhY3Rvcik7XG4gICAgICAgIGlmIChyZW1haW5kZXJDZWxsLmNvbnRlbnRIZWlnaHQgPiByb3dIZWlnaHQpIHtcbiAgICAgICAgICAgIHJvd0hlaWdodCA9IHJlbWFpbmRlckNlbGwuY29udGVudEhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBjZWxsc1tjb2x1bW4uaW5kZXhdID0gcmVtYWluZGVyQ2VsbDtcbiAgICB9XG4gICAgdmFyIHJlbWFpbmRlclJvdyA9IG5ldyBSb3cocm93LnJhdywgLTEsIHJvdy5zZWN0aW9uLCBjZWxscywgdHJ1ZSk7XG4gICAgcmVtYWluZGVyUm93LmhlaWdodCA9IHJvd0hlaWdodDtcbiAgICBmb3IgKHZhciBfYiA9IDAsIF9jID0gdGFibGUuY29sdW1uczsgX2IgPCBfYy5sZW5ndGg7IF9iKyspIHtcbiAgICAgICAgdmFyIGNvbHVtbiA9IF9jW19iXTtcbiAgICAgICAgdmFyIHJlbWFpbmRlckNlbGwgPSByZW1haW5kZXJSb3cuY2VsbHNbY29sdW1uLmluZGV4XTtcbiAgICAgICAgaWYgKHJlbWFpbmRlckNlbGwpIHtcbiAgICAgICAgICAgIHJlbWFpbmRlckNlbGwuaGVpZ2h0ID0gcmVtYWluZGVyUm93LmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2VsbCA9IHJvdy5jZWxsc1tjb2x1bW4uaW5kZXhdO1xuICAgICAgICBpZiAoY2VsbCkge1xuICAgICAgICAgICAgY2VsbC5oZWlnaHQgPSByb3cuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZW1haW5kZXJSb3c7XG59XG5mdW5jdGlvbiBzaG91bGRQcmludE9uQ3VycmVudFBhZ2UoZG9jLCByb3csIHJlbWFpbmluZ1BhZ2VTcGFjZSwgdGFibGUpIHtcbiAgICB2YXIgcGFnZUhlaWdodCA9IGRvYy5wYWdlU2l6ZSgpLmhlaWdodDtcbiAgICB2YXIgbWFyZ2luID0gdGFibGUuc2V0dGluZ3MubWFyZ2luO1xuICAgIHZhciBtYXJnaW5IZWlnaHQgPSBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbTtcbiAgICB2YXIgbWF4Um93SGVpZ2h0ID0gcGFnZUhlaWdodCAtIG1hcmdpbkhlaWdodDtcbiAgICBpZiAocm93LnNlY3Rpb24gPT09ICdib2R5Jykge1xuICAgICAgICAvLyBTaG91bGQgYWxzbyB0YWtlIGludG8gYWNjb3VudCB0aGF0IGhlYWQgYW5kIGZvb3QgaXMgbm90XG4gICAgICAgIC8vIG9uIGV2ZXJ5IHBhZ2Ugd2l0aCBzb21lIHNldHRpbmdzXG4gICAgICAgIG1heFJvd0hlaWdodCAtPVxuICAgICAgICAgICAgdGFibGUuZ2V0SGVhZEhlaWdodCh0YWJsZS5jb2x1bW5zKSArIHRhYmxlLmdldEZvb3RIZWlnaHQodGFibGUuY29sdW1ucyk7XG4gICAgfVxuICAgIHZhciBtaW5Sb3dIZWlnaHQgPSByb3cuZ2V0TWluaW11bVJvd0hlaWdodCh0YWJsZS5jb2x1bW5zLCBkb2MpO1xuICAgIHZhciBtaW5Sb3dGaXRzID0gbWluUm93SGVpZ2h0IDwgcmVtYWluaW5nUGFnZVNwYWNlO1xuICAgIGlmIChtaW5Sb3dIZWlnaHQgPiBtYXhSb3dIZWlnaHQpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJXaWxsIG5vdCBiZSBhYmxlIHRvIHByaW50IHJvdyBcIi5jb25jYXQocm93LmluZGV4LCBcIiBjb3JyZWN0bHkgc2luY2UgaXQncyBtaW5pbXVtIGhlaWdodCBpcyBsYXJnZXIgdGhhbiBwYWdlIGhlaWdodFwiKSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoIW1pblJvd0ZpdHMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgcm93SGFzUm93U3BhbkNlbGwgPSByb3cuaGFzUm93U3Bhbih0YWJsZS5jb2x1bW5zKTtcbiAgICB2YXIgcm93SGlnaGVyVGhhblBhZ2UgPSByb3cuZ2V0TWF4Q2VsbEhlaWdodCh0YWJsZS5jb2x1bW5zKSA+IG1heFJvd0hlaWdodDtcbiAgICBpZiAocm93SGlnaGVyVGhhblBhZ2UpIHtcbiAgICAgICAgaWYgKHJvd0hhc1Jvd1NwYW5DZWxsKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlRoZSBjb250ZW50IG9mIHJvdyBcIi5jb25jYXQocm93LmluZGV4LCBcIiB3aWxsIG5vdCBiZSBkcmF3biBjb3JyZWN0bHkgc2luY2UgZHJhd2luZyByb3dzIHdpdGggYSBoZWlnaHQgbGFyZ2VyIHRoYW4gdGhlIHBhZ2UgaGVpZ2h0IGFuZCBoYXMgY2VsbHMgd2l0aCByb3dzcGFucyBpcyBub3Qgc3VwcG9ydGVkLlwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChyb3dIYXNSb3dTcGFuQ2VsbCkge1xuICAgICAgICAvLyBDdXJyZW50bHkgYSBuZXcgcGFnZSBpcyByZXF1aXJlZCB3aGVuZXZlciBhIHJvd3NwYW4gcm93IGRvbid0IGZpdCBhIHBhZ2UuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRhYmxlLnNldHRpbmdzLnJvd1BhZ2VCcmVhayA9PT0gJ2F2b2lkJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIEluIGFsbCBvdGhlciBjYXNlcyBwcmludCB0aGUgcm93IG9uIGN1cnJlbnQgcGFnZVxuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gcHJpbnRGdWxsUm93KGRvYywgdGFibGUsIHJvdywgaXNMYXN0Um93LCBzdGFydFBvcywgY3Vyc29yLCBjb2x1bW5zKSB7XG4gICAgdmFyIHJlbWFpbmluZ1NwYWNlID0gZ2V0UmVtYWluaW5nUGFnZVNwYWNlKGRvYywgdGFibGUsIGlzTGFzdFJvdywgY3Vyc29yKTtcbiAgICBpZiAocm93LmNhbkVudGlyZVJvd0ZpdChyZW1haW5pbmdTcGFjZSwgY29sdW1ucykpIHtcbiAgICAgICAgLy8gVGhlIHJvdyBmaXRzIGluIHRoZSBjdXJyZW50IHBhZ2VcbiAgICAgICAgcHJpbnRSb3coZG9jLCB0YWJsZSwgcm93LCBjdXJzb3IsIGNvbHVtbnMpO1xuICAgIH1cbiAgICBlbHNlIGlmIChzaG91bGRQcmludE9uQ3VycmVudFBhZ2UoZG9jLCByb3csIHJlbWFpbmluZ1NwYWNlLCB0YWJsZSkpIHtcbiAgICAgICAgLy8gVGhlIHJvdyBnZXRzIHNwbGl0IGluIHR3byBoZXJlLCBlYWNoIHBpZWNlIGluIG9uZSBwYWdlXG4gICAgICAgIHZhciByZW1haW5kZXJSb3cgPSBtb2RpZnlSb3dUb0ZpdChyb3csIHJlbWFpbmluZ1NwYWNlLCB0YWJsZSwgZG9jKTtcbiAgICAgICAgcHJpbnRSb3coZG9jLCB0YWJsZSwgcm93LCBjdXJzb3IsIGNvbHVtbnMpO1xuICAgICAgICBhZGRQYWdlKGRvYywgdGFibGUsIHN0YXJ0UG9zLCBjdXJzb3IsIGNvbHVtbnMpO1xuICAgICAgICBwcmludEZ1bGxSb3coZG9jLCB0YWJsZSwgcmVtYWluZGVyUm93LCBpc0xhc3RSb3csIHN0YXJ0UG9zLCBjdXJzb3IsIGNvbHVtbnMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gVGhlIHJvdyBnZXQgcHJpbnRlZCBlbnRpcmVsbHkgb24gdGhlIG5leHQgcGFnZVxuICAgICAgICBhZGRQYWdlKGRvYywgdGFibGUsIHN0YXJ0UG9zLCBjdXJzb3IsIGNvbHVtbnMpO1xuICAgICAgICBwcmludEZ1bGxSb3coZG9jLCB0YWJsZSwgcm93LCBpc0xhc3RSb3csIHN0YXJ0UG9zLCBjdXJzb3IsIGNvbHVtbnMpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHByaW50Um93KGRvYywgdGFibGUsIHJvdywgY3Vyc29yLCBjb2x1bW5zKSB7XG4gICAgY3Vyc29yLnggPSB0YWJsZS5zZXR0aW5ncy5tYXJnaW4ubGVmdDtcbiAgICBmb3IgKHZhciBfaSA9IDAsIGNvbHVtbnNfMSA9IGNvbHVtbnM7IF9pIDwgY29sdW1uc18xLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXIgY29sdW1uID0gY29sdW1uc18xW19pXTtcbiAgICAgICAgdmFyIGNlbGwgPSByb3cuY2VsbHNbY29sdW1uLmluZGV4XTtcbiAgICAgICAgaWYgKCFjZWxsKSB7XG4gICAgICAgICAgICBjdXJzb3IueCArPSBjb2x1bW4ud2lkdGg7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBkb2MuYXBwbHlTdHlsZXMoY2VsbC5zdHlsZXMpO1xuICAgICAgICBjZWxsLnggPSBjdXJzb3IueDtcbiAgICAgICAgY2VsbC55ID0gY3Vyc29yLnk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0YWJsZS5jYWxsQ2VsbEhvb2tzKGRvYywgdGFibGUuaG9va3Mud2lsbERyYXdDZWxsLCBjZWxsLCByb3csIGNvbHVtbiwgY3Vyc29yKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGN1cnNvci54ICs9IGNvbHVtbi53aWR0aDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGRyYXdDZWxsUmVjdChkb2MsIGNlbGwsIGN1cnNvcik7XG4gICAgICAgIHZhciB0ZXh0UG9zID0gY2VsbC5nZXRUZXh0UG9zKCk7XG4gICAgICAgIGF1dG9UYWJsZVRleHQoY2VsbC50ZXh0LCB0ZXh0UG9zLngsIHRleHRQb3MueSwge1xuICAgICAgICAgICAgaGFsaWduOiBjZWxsLnN0eWxlcy5oYWxpZ24sXG4gICAgICAgICAgICB2YWxpZ246IGNlbGwuc3R5bGVzLnZhbGlnbixcbiAgICAgICAgICAgIG1heFdpZHRoOiBNYXRoLmNlaWwoY2VsbC53aWR0aCAtIGNlbGwucGFkZGluZygnbGVmdCcpIC0gY2VsbC5wYWRkaW5nKCdyaWdodCcpKSxcbiAgICAgICAgfSwgZG9jLmdldERvY3VtZW50KCkpO1xuICAgICAgICB0YWJsZS5jYWxsQ2VsbEhvb2tzKGRvYywgdGFibGUuaG9va3MuZGlkRHJhd0NlbGwsIGNlbGwsIHJvdywgY29sdW1uLCBjdXJzb3IpO1xuICAgICAgICBjdXJzb3IueCArPSBjb2x1bW4ud2lkdGg7XG4gICAgfVxuICAgIGN1cnNvci55ICs9IHJvdy5oZWlnaHQ7XG59XG5mdW5jdGlvbiBkcmF3Q2VsbFJlY3QoZG9jLCBjZWxsLCBjdXJzb3IpIHtcbiAgICB2YXIgY2VsbFN0eWxlcyA9IGNlbGwuc3R5bGVzO1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW1vbmJlbmd0c3Nvbi9qc1BERi1BdXRvVGFibGUvaXNzdWVzLzc3NFxuICAgIC8vIFRPRE8gKHY0KTogYmV0dGVyIHNvbHV0aW9uP1xuICAgIGRvYy5nZXREb2N1bWVudCgpLnNldEZpbGxDb2xvcihkb2MuZ2V0RG9jdW1lbnQoKS5nZXRGaWxsQ29sb3IoKSk7XG4gICAgaWYgKHR5cGVvZiBjZWxsU3R5bGVzLmxpbmVXaWR0aCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgLy8gRHJhdyBjZWxsIGJhY2tncm91bmQgd2l0aCBub3JtYWwgYm9yZGVyc1xuICAgICAgICB2YXIgZmlsbFN0eWxlID0gZ2V0RmlsbFN0eWxlKGNlbGxTdHlsZXMubGluZVdpZHRoLCBjZWxsU3R5bGVzLmZpbGxDb2xvcik7XG4gICAgICAgIGlmIChmaWxsU3R5bGUpIHtcbiAgICAgICAgICAgIGRvYy5yZWN0KGNlbGwueCwgY3Vyc29yLnksIGNlbGwud2lkdGgsIGNlbGwuaGVpZ2h0LCBmaWxsU3R5bGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjZWxsU3R5bGVzLmxpbmVXaWR0aCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gRHJhdyBjZWxsIGJhY2tncm91bmRcbiAgICAgICAgaWYgKGNlbGxTdHlsZXMuZmlsbENvbG9yKSB7XG4gICAgICAgICAgICBkb2MucmVjdChjZWxsLngsIGN1cnNvci55LCBjZWxsLndpZHRoLCBjZWxsLmhlaWdodCwgJ0YnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBEcmF3IGNlbGwgaW5kaXZpZHVhbCBib3JkZXJzXG4gICAgICAgIGRyYXdDZWxsQm9yZGVycyhkb2MsIGNlbGwsIGN1cnNvciwgY2VsbFN0eWxlcy5saW5lV2lkdGgpO1xuICAgIH1cbn1cbi8qKlxuICogRHJhdyBhbGwgc3BlY2lmaWVkIGJvcmRlcnMuIEJvcmRlcnMgYXJlIGNlbnRlcmVkIG9uIGNlbGwncyBlZGdlIGFuZCBsZW5ndGhlbmVkXG4gKiB0byBvdmVybGFwIHdpdGggbmVpZ2hib3VycyB0byBjcmVhdGUgc2hhcnAgY29ybmVycy5cbiAqIEBwYXJhbSBkb2NcbiAqIEBwYXJhbSBjZWxsXG4gKiBAcGFyYW0gY3Vyc29yXG4gKiBAcGFyYW0gZmlsbENvbG9yXG4gKiBAcGFyYW0gbGluZVdpZHRoXG4gKi9cbmZ1bmN0aW9uIGRyYXdDZWxsQm9yZGVycyhkb2MsIGNlbGwsIGN1cnNvciwgbGluZVdpZHRoKSB7XG4gICAgdmFyIHgxLCB5MSwgeDIsIHkyO1xuICAgIGlmIChsaW5lV2lkdGgudG9wKSB7XG4gICAgICAgIHgxID0gY3Vyc29yLng7XG4gICAgICAgIHkxID0gY3Vyc29yLnk7XG4gICAgICAgIHgyID0gY3Vyc29yLnggKyBjZWxsLndpZHRoO1xuICAgICAgICB5MiA9IGN1cnNvci55O1xuICAgICAgICBpZiAobGluZVdpZHRoLnJpZ2h0KSB7XG4gICAgICAgICAgICB4MiArPSAwLjUgKiBsaW5lV2lkdGgucmlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbmVXaWR0aC5sZWZ0KSB7XG4gICAgICAgICAgICB4MSAtPSAwLjUgKiBsaW5lV2lkdGgubGVmdDtcbiAgICAgICAgfVxuICAgICAgICBkcmF3TGluZShsaW5lV2lkdGgudG9wLCB4MSwgeTEsIHgyLCB5Mik7XG4gICAgfVxuICAgIGlmIChsaW5lV2lkdGguYm90dG9tKSB7XG4gICAgICAgIHgxID0gY3Vyc29yLng7XG4gICAgICAgIHkxID0gY3Vyc29yLnkgKyBjZWxsLmhlaWdodDtcbiAgICAgICAgeDIgPSBjdXJzb3IueCArIGNlbGwud2lkdGg7XG4gICAgICAgIHkyID0gY3Vyc29yLnkgKyBjZWxsLmhlaWdodDtcbiAgICAgICAgaWYgKGxpbmVXaWR0aC5yaWdodCkge1xuICAgICAgICAgICAgeDIgKz0gMC41ICogbGluZVdpZHRoLnJpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaW5lV2lkdGgubGVmdCkge1xuICAgICAgICAgICAgeDEgLT0gMC41ICogbGluZVdpZHRoLmxlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgZHJhd0xpbmUobGluZVdpZHRoLmJvdHRvbSwgeDEsIHkxLCB4MiwgeTIpO1xuICAgIH1cbiAgICBpZiAobGluZVdpZHRoLmxlZnQpIHtcbiAgICAgICAgeDEgPSBjdXJzb3IueDtcbiAgICAgICAgeTEgPSBjdXJzb3IueTtcbiAgICAgICAgeDIgPSBjdXJzb3IueDtcbiAgICAgICAgeTIgPSBjdXJzb3IueSArIGNlbGwuaGVpZ2h0O1xuICAgICAgICBpZiAobGluZVdpZHRoLnRvcCkge1xuICAgICAgICAgICAgeTEgLT0gMC41ICogbGluZVdpZHRoLnRvcDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGluZVdpZHRoLmJvdHRvbSkge1xuICAgICAgICAgICAgeTIgKz0gMC41ICogbGluZVdpZHRoLmJvdHRvbTtcbiAgICAgICAgfVxuICAgICAgICBkcmF3TGluZShsaW5lV2lkdGgubGVmdCwgeDEsIHkxLCB4MiwgeTIpO1xuICAgIH1cbiAgICBpZiAobGluZVdpZHRoLnJpZ2h0KSB7XG4gICAgICAgIHgxID0gY3Vyc29yLnggKyBjZWxsLndpZHRoO1xuICAgICAgICB5MSA9IGN1cnNvci55O1xuICAgICAgICB4MiA9IGN1cnNvci54ICsgY2VsbC53aWR0aDtcbiAgICAgICAgeTIgPSBjdXJzb3IueSArIGNlbGwuaGVpZ2h0O1xuICAgICAgICBpZiAobGluZVdpZHRoLnRvcCkge1xuICAgICAgICAgICAgeTEgLT0gMC41ICogbGluZVdpZHRoLnRvcDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGluZVdpZHRoLmJvdHRvbSkge1xuICAgICAgICAgICAgeTIgKz0gMC41ICogbGluZVdpZHRoLmJvdHRvbTtcbiAgICAgICAgfVxuICAgICAgICBkcmF3TGluZShsaW5lV2lkdGgucmlnaHQsIHgxLCB5MSwgeDIsIHkyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZHJhd0xpbmUod2lkdGgsIHgxLCB5MSwgeDIsIHkyKSB7XG4gICAgICAgIGRvYy5nZXREb2N1bWVudCgpLnNldExpbmVXaWR0aCh3aWR0aCk7XG4gICAgICAgIGRvYy5nZXREb2N1bWVudCgpLmxpbmUoeDEsIHkxLCB4MiwgeTIsICdTJyk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0UmVtYWluaW5nUGFnZVNwYWNlKGRvYywgdGFibGUsIGlzTGFzdFJvdywgY3Vyc29yKSB7XG4gICAgdmFyIGJvdHRvbUNvbnRlbnRIZWlnaHQgPSB0YWJsZS5zZXR0aW5ncy5tYXJnaW4uYm90dG9tO1xuICAgIHZhciBzaG93Rm9vdCA9IHRhYmxlLnNldHRpbmdzLnNob3dGb290O1xuICAgIGlmIChzaG93Rm9vdCA9PT0gJ2V2ZXJ5UGFnZScgfHwgKHNob3dGb290ID09PSAnbGFzdFBhZ2UnICYmIGlzTGFzdFJvdykpIHtcbiAgICAgICAgYm90dG9tQ29udGVudEhlaWdodCArPSB0YWJsZS5nZXRGb290SGVpZ2h0KHRhYmxlLmNvbHVtbnMpO1xuICAgIH1cbiAgICByZXR1cm4gZG9jLnBhZ2VTaXplKCkuaGVpZ2h0IC0gY3Vyc29yLnkgLSBib3R0b21Db250ZW50SGVpZ2h0O1xufVxuZnVuY3Rpb24gYWRkUGFnZShkb2MsIHRhYmxlLCBzdGFydFBvcywgY3Vyc29yLCBjb2x1bW5zLCBzdXBwcmVzc0Zvb3Rlcikge1xuICAgIGlmIChjb2x1bW5zID09PSB2b2lkIDApIHsgY29sdW1ucyA9IFtdOyB9XG4gICAgaWYgKHN1cHByZXNzRm9vdGVyID09PSB2b2lkIDApIHsgc3VwcHJlc3NGb290ZXIgPSBmYWxzZTsgfVxuICAgIGRvYy5hcHBseVN0eWxlcyhkb2MudXNlclN0eWxlcyk7XG4gICAgaWYgKHRhYmxlLnNldHRpbmdzLnNob3dGb290ID09PSAnZXZlcnlQYWdlJyAmJiAhc3VwcHJlc3NGb290ZXIpIHtcbiAgICAgICAgdGFibGUuZm9vdC5mb3JFYWNoKGZ1bmN0aW9uIChyb3cpIHsgcmV0dXJuIHByaW50Um93KGRvYywgdGFibGUsIHJvdywgY3Vyc29yLCBjb2x1bW5zKTsgfSk7XG4gICAgfVxuICAgIC8vIEFkZCB1c2VyIGNvbnRlbnQganVzdCBiZWZvcmUgYWRkaW5nIG5ldyBwYWdlIGVuc3VyZSBpdCB3aWxsXG4gICAgLy8gYmUgZHJhd24gYWJvdmUgb3RoZXIgdGhpbmdzIG9uIHRoZSBwYWdlXG4gICAgdGFibGUuY2FsbEVuZFBhZ2VIb29rcyhkb2MsIGN1cnNvcik7XG4gICAgdmFyIG1hcmdpbiA9IHRhYmxlLnNldHRpbmdzLm1hcmdpbjtcbiAgICBhZGRUYWJsZUJvcmRlcihkb2MsIHRhYmxlLCBzdGFydFBvcywgY3Vyc29yKTtcbiAgICBuZXh0UGFnZShkb2MpO1xuICAgIHRhYmxlLnBhZ2VOdW1iZXIrKztcbiAgICBjdXJzb3IueCA9IG1hcmdpbi5sZWZ0O1xuICAgIGN1cnNvci55ID0gbWFyZ2luLnRvcDtcbiAgICBzdGFydFBvcy55ID0gbWFyZ2luLnRvcDtcbiAgICAvLyBjYWxsIGRpZEFkZFBhZ2UgaG9va3MgYmVmb3JlIGFueSBjb250ZW50IGlzIGFkZGVkIHRvIHRoZSBwYWdlXG4gICAgdGFibGUuY2FsbFdpbGxEcmF3UGFnZUhvb2tzKGRvYywgY3Vyc29yKTtcbiAgICBpZiAodGFibGUuc2V0dGluZ3Muc2hvd0hlYWQgPT09ICdldmVyeVBhZ2UnKSB7XG4gICAgICAgIHRhYmxlLmhlYWQuZm9yRWFjaChmdW5jdGlvbiAocm93KSB7IHJldHVybiBwcmludFJvdyhkb2MsIHRhYmxlLCByb3csIGN1cnNvciwgY29sdW1ucyk7IH0pO1xuICAgICAgICBkb2MuYXBwbHlTdHlsZXMoZG9jLnVzZXJTdHlsZXMpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG5leHRQYWdlKGRvYykge1xuICAgIHZhciBjdXJyZW50ID0gZG9jLnBhZ2VOdW1iZXIoKTtcbiAgICBkb2Muc2V0UGFnZShjdXJyZW50ICsgMSk7XG4gICAgdmFyIG5ld0N1cnJlbnQgPSBkb2MucGFnZU51bWJlcigpO1xuICAgIGlmIChuZXdDdXJyZW50ID09PSBjdXJyZW50KSB7XG4gICAgICAgIGRvYy5hZGRQYWdlKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGFwcGx5UGx1Z2luKGpzUERGKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBqc1BERi5BUEkuYXV0b1RhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHZhciBvcHRpb25zID0gYXJnc1swXTtcbiAgICAgICAgdmFyIGlucHV0ID0gcGFyc2VJbnB1dCh0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgdmFyIHRhYmxlID0gY3JlYXRlVGFibGUodGhpcywgaW5wdXQpO1xuICAgICAgICBkcmF3VGFibGUodGhpcywgdGFibGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIEFzc2lnbiBmYWxzZSB0byBlbmFibGUgYGRvYy5sYXN0QXV0b1RhYmxlLmZpbmFsWSB8fCA0MGAgc3VnYXJcbiAgICBqc1BERi5BUEkubGFzdEF1dG9UYWJsZSA9IGZhbHNlO1xuICAgIGpzUERGLkFQSS5hdXRvVGFibGVUZXh0ID0gZnVuY3Rpb24gKHRleHQsIHgsIHksIHN0eWxlcykge1xuICAgICAgICBhdXRvVGFibGVUZXh0KHRleHQsIHgsIHksIHN0eWxlcywgdGhpcyk7XG4gICAgfTtcbiAgICBqc1BERi5BUEkuYXV0b1RhYmxlU2V0RGVmYXVsdHMgPSBmdW5jdGlvbiAoZGVmYXVsdHMpIHtcbiAgICAgICAgRG9jSGFuZGxlci5zZXREZWZhdWx0cyhkZWZhdWx0cywgdGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAganNQREYuYXV0b1RhYmxlU2V0RGVmYXVsdHMgPSBmdW5jdGlvbiAoZGVmYXVsdHMsIGRvYykge1xuICAgICAgICBEb2NIYW5kbGVyLnNldERlZmF1bHRzKGRlZmF1bHRzLCBkb2MpO1xuICAgIH07XG4gICAganNQREYuQVBJLmF1dG9UYWJsZUh0bWxUb0pzb24gPSBmdW5jdGlvbiAodGFibGVFbGVtLCBpbmNsdWRlSGlkZGVuRWxlbWVudHMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoaW5jbHVkZUhpZGRlbkVsZW1lbnRzID09PSB2b2lkIDApIHsgaW5jbHVkZUhpZGRlbkVsZW1lbnRzID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDYW5ub3QgcnVuIGF1dG9UYWJsZUh0bWxUb0pzb24gaW4gbm9uIGJyb3dzZXIgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkb2MgPSBuZXcgRG9jSGFuZGxlcih0aGlzKTtcbiAgICAgICAgdmFyIF9iID0gcGFyc2VIdG1sKGRvYywgdGFibGVFbGVtLCB3aW5kb3csIGluY2x1ZGVIaWRkZW5FbGVtZW50cywgZmFsc2UpLCBoZWFkID0gX2IuaGVhZCwgYm9keSA9IF9iLmJvZHk7XG4gICAgICAgIHZhciBjb2x1bW5zID0gKChfYSA9IGhlYWRbMF0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMuY29udGVudDsgfSkpIHx8IFtdO1xuICAgICAgICByZXR1cm4geyBjb2x1bW5zOiBjb2x1bW5zLCByb3dzOiBib2R5LCBkYXRhOiBib2R5IH07XG4gICAgfTtcbn1cblxudmFyIF9hO1xuZnVuY3Rpb24gYXV0b1RhYmxlKGQsIG9wdGlvbnMpIHtcbiAgICB2YXIgaW5wdXQgPSBwYXJzZUlucHV0KGQsIG9wdGlvbnMpO1xuICAgIHZhciB0YWJsZSA9IGNyZWF0ZVRhYmxlKGQsIGlucHV0KTtcbiAgICBkcmF3VGFibGUoZCwgdGFibGUpO1xufVxuLy8gRXhwZXJpbWVudGFsIGV4cG9ydFxuZnVuY3Rpb24gX19jcmVhdGVUYWJsZShkLCBvcHRpb25zKSB7XG4gICAgdmFyIGlucHV0ID0gcGFyc2VJbnB1dChkLCBvcHRpb25zKTtcbiAgICByZXR1cm4gY3JlYXRlVGFibGUoZCwgaW5wdXQpO1xufVxuZnVuY3Rpb24gX19kcmF3VGFibGUoZCwgdGFibGUpIHtcbiAgICBkcmF3VGFibGUoZCwgdGFibGUpO1xufVxudHJ5IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIHZhciBhbnlXaW5kb3cgPSB3aW5kb3c7XG4gICAgICAgIHZhciBqc1BERiA9IGFueVdpbmRvdy5qc1BERiB8fCAoKF9hID0gYW55V2luZG93LmpzcGRmKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuanNQREYpO1xuICAgICAgICBpZiAoanNQREYpIHtcbiAgICAgICAgICAgIGFwcGx5UGx1Z2luKGpzUERGKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBhcHBseSBhdXRvVGFibGUgcGx1Z2luJywgZXJyb3IpO1xufVxuXG5leHBvcnQgeyBDZWxsLCBDZWxsSG9va0RhdGEsIENvbHVtbiwgSG9va0RhdGEsIFJvdywgVGFibGUsIF9fY3JlYXRlVGFibGUsIF9fZHJhd1RhYmxlLCBhcHBseVBsdWdpbiwgYXV0b1RhYmxlLCBhdXRvVGFibGUgYXMgZGVmYXVsdCB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/jspdf-autotable/dist/jspdf.plugin.autotable.mjs\n"));
/***/ }),
/***/ "(app-pages-browser)/./node_modules/pako/dist/pako.esm.mjs":
/*!*********************************************!*\
!*** ./node_modules/pako/dist/pako.esm.mjs ***!
\*********************************************/
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Deflate: function() { return /* binding */ Deflate_1; },\n/* harmony export */ Inflate: function() { return /* binding */ Inflate_1; },\n/* harmony export */ constants: function() { return /* binding */ constants_1; },\n/* harmony export */ \"default\": function() { return /* binding */ pako; },\n/* harmony export */ deflate: function() { return /* binding */ deflate_1; },\n/* harmony export */ deflateRaw: function() { return /* binding */ deflateRaw_1; },\n/* harmony export */ gzip: function() { return /* binding */ gzip_1; },\n/* harmony export */ inflate: function() { return /* binding */ inflate_1; },\n/* harmony export */ inflateRaw: function() { return /* binding */ inflateRaw_1; },\n/* harmony export */ ungzip: function() { return /* binding */ ungzip_1; }\n/* harmony export */ });\n\n/*! pako 2.2.0 https://github.com/nodeca/pako @license (MIT AND Zlib) */\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//const Z_FILTERED = 1;\n//const Z_HUFFMAN_ONLY = 2;\n//const Z_RLE = 3;\nconst Z_FIXED$1 = 4;\n//const Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nconst Z_BINARY = 0;\nconst Z_TEXT = 1;\n//const Z_ASCII = 1; // = Z_TEXT\nconst Z_UNKNOWN$1 = 2;\n\n/*============================================================================*/\n\n\nfunction zero$1(buf) { let len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nconst STORED_BLOCK = 0;\nconst STATIC_TREES = 1;\nconst DYN_TREES = 2;\n/* The three kinds of block type */\n\nconst MIN_MATCH$1 = 3;\nconst MAX_MATCH$1 = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nconst LENGTH_CODES$1 = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nconst LITERALS$1 = 256;\n/* number of literal bytes 0..255 */\n\nconst L_CODES$1 = LITERALS$1 + 1 + LENGTH_CODES$1;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nconst D_CODES$1 = 30;\n/* number of distance codes */\n\nconst BL_CODES$1 = 19;\n/* number of codes used to transfer the bit lengths */\n\nconst HEAP_SIZE$1 = 2 * L_CODES$1 + 1;\n/* maximum heap size */\n\nconst MAX_BITS$1 = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nconst MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nconst END_BLOCK = 256;\n/* end of block literal code */\n\nconst REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nconst REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nconst REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nconst extra_lbits = /* extra bits for each length code */\n new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]);\n\nconst extra_dbits = /* extra bits for each distance code */\n new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]);\n\nconst extra_blbits = /* extra bits for each bit length code */\n new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]);\n\nconst bl_order =\n new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nconst DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nconst static_ltree = new Array((L_CODES$1 + 2) * 2);\nzero$1(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nconst static_dtree = new Array(D_CODES$1 * 2);\nzero$1(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nconst _dist_code = new Array(DIST_CODE_LEN);\nzero$1(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nconst _length_code = new Array(MAX_MATCH$1 - MIN_MATCH$1 + 1);\nzero$1(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nconst base_length = new Array(LENGTH_CODES$1);\nzero$1(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nconst base_dist = new Array(D_CODES$1);\nzero$1(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n}\n\n\nlet static_l_desc;\nlet static_d_desc;\nlet static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n}\n\n\n\nconst d_code = (dist) => {\n\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n};\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nconst put_short = (s, w) => {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n};\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nconst send_bits = (s, value, length) => {\n\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n};\n\n\nconst send_code = (s, c, tree) => {\n\n send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n};\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nconst bi_reverse = (code, len) => {\n\n let res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nconst bi_flush = (s) => {\n\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n};\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nconst gen_bitlen = (s, desc) => {\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n\n const tree = desc.dyn_tree;\n const max_code = desc.max_code;\n const stree = desc.stat_desc.static_tree;\n const has_stree = desc.stat_desc.has_stree;\n const extra = desc.stat_desc.extra_bits;\n const base = desc.stat_desc.extra_base;\n const max_length = desc.stat_desc.max_length;\n let h; /* heap index */\n let n, m; /* iterate over the tree elements */\n let bits; /* bit length */\n let xbits; /* extra bits */\n let f; /* frequency */\n let overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS$1; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max + 1; h < HEAP_SIZE$1; h++) {\n n = s.heap[h];\n bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n * 2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n - base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Tracev((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length - 1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n // Tracev((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n tree[m * 2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n};\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nconst gen_codes = (tree, max_code, bl_count) => {\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n\n const next_code = new Array(MAX_BITS$1 + 1); /* next code value for each bit length */\n let code = 0; /* running code value */\n let bits; /* bit index */\n let n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS$1; bits++) {\n code = (code + bl_count[bits - 1]) << 1;\n next_code[bits] = code;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n // \"inconsistent bit counts\");\n //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n for (n = 0; n <= max_code; n++) {\n let len = tree[n * 2 + 1]/*.Len*/;\n if (len === 0) { continue; }\n /* Now reverse the bits */\n tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n // n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n }\n};\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nconst tr_static_init = () => {\n\n let n; /* iterates over tree elements */\n let bits; /* bit counter */\n let length; /* length value */\n let code; /* code value */\n let dist; /* distance index */\n const bl_count = new Array(MAX_BITS$1 + 1);\n /* number of codes at each bit length for an optimal tree */\n\n // do check in _tr_init()\n //if (static_init_done) return;\n\n /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n static_l_desc.static_tree = static_ltree;\n static_l_desc.extra_bits = extra_lbits;\n static_d_desc.static_tree = static_dtree;\n static_d_desc.extra_bits = extra_dbits;\n static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n /* Initialize the mapping length (0..255) -> length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES$1 - 1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1 << extra_lbits[code]); n++) {\n _length_code[length++] = code;\n }\n }\n //Assert (length == 256, \"tr_static_init: length != 256\");\n /* Note that the length 255 (match length 258) can be represented\n * in two different ways: code 284 + 5 bits or code 285, so we\n * overwrite length_code[255] to use the best encoding:\n */\n _length_code[length - 1] = code;\n\n /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n dist = 0;\n for (code = 0; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1 << extra_dbits[code]); n++) {\n _dist_code[dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: dist != 256\");\n dist >>= 7; /* from now on, all distances are divided by 128 */\n for (; code < D_CODES$1; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS$1; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n * 2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n * 2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES$1 + 1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES$1; n++) {\n static_dtree[n * 2 + 1]/*.Len*/ = 5;\n static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS$1 + 1, L_CODES$1, MAX_BITS$1);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES$1, MAX_BITS$1);\n static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES$1, MAX_BL_BITS);\n\n //static_init_done = true;\n};\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nconst init_block = (s) => {\n\n let n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES$1; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES$1; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES$1; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.sym_next = s.matches = 0;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nconst bi_windup = (s) =>\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n};\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nconst smaller = (tree, n, m, depth) => {\n\n const _n2 = n * 2;\n const _m2 = m * 2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n};\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nconst pqdownheap = (s, tree, k) => {\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n\n const v = s.heap[k];\n let j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n};\n\n\n// inlined manually\n// const SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nconst compress_block = (s, ltree, dtree) => {\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n\n let dist; /* distance of matched string */\n let lc; /* match length or unmatched char (if dist == 0) */\n let sx = 0; /* running index in sym_buf */\n let code; /* the code to send */\n let extra; /* number of extra bits to send */\n\n if (s.sym_next !== 0) {\n do {\n dist = s.pending_buf[s.sym_buf + sx++] & 0xff;\n dist += (s.pending_buf[s.sym_buf + sx++] & 0xff) << 8;\n lc = s.pending_buf[s.sym_buf + sx++];\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code + LITERALS$1 + 1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and sym_buf is ok: */\n //Assert(s->pending < s->lit_bufsize + sx, \"pendingBuf overflow\");\n\n } while (sx < s.sym_next);\n }\n\n send_code(s, END_BLOCK, ltree);\n};\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nconst build_tree = (s, desc) => {\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n\n const tree = desc.dyn_tree;\n const stree = desc.stat_desc.static_tree;\n const has_stree = desc.stat_desc.has_stree;\n const elems = desc.stat_desc.elems;\n let n, m; /* iterate over heap elements */\n let max_code = -1; /* largest code with non zero frequency */\n let node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE$1;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n * 2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node * 2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n};\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nconst scan_tree = (s, tree, max_code) => {\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n\n let n; /* iterates over all tree elements */\n let prevlen = -1; /* last emitted length */\n let curlen; /* length of current code */\n\n let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n let count = 0; /* repeat count of the current code */\n let max_count = 7; /* max repeat count */\n let min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n};\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nconst send_tree = (s, tree, max_code) => {\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n\n let n; /* iterates over all tree elements */\n let prevlen = -1; /* last emitted length */\n let curlen; /* length of current code */\n\n let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n let count = 0; /* repeat count of the current code */\n let max_count = 7; /* max repeat count */\n let min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count - 3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count - 3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count - 11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n};\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nconst build_bl_tree = (s) => {\n\n let max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES$1 - 1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n};\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nconst send_all_trees = (s, lcodes, dcodes, blcodes) => {\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n\n let rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes - 1, 5);\n send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n};\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"block list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"allow list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nconst detect_data_type = (s) => {\n /* block_mask is the bit mask of block-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n let block_mask = 0xf3ffc07f;\n let n;\n\n /* Check for non-textual (\"block-listed\") bytes. */\n for (n = 0; n <= 31; n++, block_mask >>>= 1) {\n if ((block_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"allow-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS$1; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"block-listed\" or \"allow-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n};\n\n\nlet static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nconst _tr_init$1 = (s) =>\n{\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n};\n\n\n/* ===========================================================================\n * Send a stored block\n */\nconst _tr_stored_block$1 = (s, buf, stored_len, last) => {\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n\n send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n bi_windup(s); /* align on byte boundary */\n put_short(s, stored_len);\n put_short(s, ~stored_len);\n if (stored_len) {\n s.pending_buf.set(s.window.subarray(buf, buf + stored_len), s.pending);\n }\n s.pending += stored_len;\n};\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nconst _tr_align$1 = (s) => {\n send_bits(s, STATIC_TREES << 1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n};\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and write out the encoded block.\n */\nconst _tr_flush_block$1 = (s, buf, stored_len, last) => {\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n\n let opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n let max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN$1) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->sym_next / 3));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block$1(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED$1 || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n};\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nconst _tr_tally$1 = (s, dist, lc) => {\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n\n s.pending_buf[s.sym_buf + s.sym_next++] = dist;\n s.pending_buf[s.sym_buf + s.sym_next++] = dist >> 8;\n s.pending_buf[s.sym_buf + s.sym_next++] = lc;\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc * 2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc] + LITERALS$1 + 1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n return (s.sym_next === s.sym_end);\n};\n\nvar _tr_init_1 = _tr_init$1;\nvar _tr_stored_block_1 = _tr_stored_block$1;\nvar _tr_flush_block_1 = _tr_flush_block$1;\nvar _tr_tally_1 = _tr_tally$1;\nvar _tr_align_1 = _tr_align$1;\n\nvar trees = {\n\t_tr_init: _tr_init_1,\n\t_tr_stored_block: _tr_stored_block_1,\n\t_tr_flush_block: _tr_flush_block_1,\n\t_tr_tally: _tr_tally_1,\n\t_tr_align: _tr_align_1\n};\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst adler32 = (adler, buf, len, pos) => {\n let s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n};\n\n\nvar adler32_1 = adler32;\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nconst makeTable = () => {\n let c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n};\n\n// Create table on load. Just 255 signed longs. Not a problem.\nconst crcTable = new Uint32Array(makeTable());\n\n\nconst crc32 = (crc, buf, len, pos) => {\n const t = crcTable;\n const end = pos + len;\n\n crc ^= -1;\n\n for (let i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n};\n\n\nvar crc32_1 = crc32;\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar messages = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar constants$2 = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst { _tr_init, _tr_stored_block, _tr_flush_block, _tr_tally, _tr_align } = trees;\n\n\n\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH: Z_NO_FLUSH$2, Z_PARTIAL_FLUSH, Z_FULL_FLUSH: Z_FULL_FLUSH$1, Z_FINISH: Z_FINISH$3, Z_BLOCK: Z_BLOCK$1,\n Z_OK: Z_OK$3, Z_STREAM_END: Z_STREAM_END$3, Z_STREAM_ERROR: Z_STREAM_ERROR$2, Z_DATA_ERROR: Z_DATA_ERROR$2, Z_BUF_ERROR: Z_BUF_ERROR$2,\n Z_DEFAULT_COMPRESSION: Z_DEFAULT_COMPRESSION$1,\n Z_FILTERED, Z_HUFFMAN_ONLY, Z_RLE, Z_FIXED, Z_DEFAULT_STRATEGY: Z_DEFAULT_STRATEGY$1,\n Z_UNKNOWN,\n Z_DEFLATED: Z_DEFLATED$2\n} = constants$2;\n\n/*============================================================================*/\n\n\nconst MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nconst MAX_WBITS$1 = 15;\n/* 32K LZ77 window */\nconst DEF_MEM_LEVEL = 8;\n\n\nconst LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nconst LITERALS = 256;\n/* number of literal bytes 0..255 */\nconst L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nconst D_CODES = 30;\n/* number of distance codes */\nconst BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nconst HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\nconst MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst MIN_MATCH = 3;\nconst MAX_MATCH = 258;\nconst MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nconst PRESET_DICT = 0x20;\n\nconst INIT_STATE = 42; /* zlib header -> BUSY_STATE */\n//#ifdef GZIP\nconst GZIP_STATE = 57; /* gzip header -> BUSY_STATE | EXTRA_STATE */\n//#endif\nconst EXTRA_STATE = 69; /* gzip extra block -> NAME_STATE */\nconst NAME_STATE = 73; /* gzip file name -> COMMENT_STATE */\nconst COMMENT_STATE = 91; /* gzip comment -> HCRC_STATE */\nconst HCRC_STATE = 103; /* gzip header CRC -> BUSY_STATE */\nconst BUSY_STATE = 113; /* deflate -> FINISH_STATE */\nconst FINISH_STATE = 666; /* stream complete */\n\nconst BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nconst BS_BLOCK_DONE = 2; /* block flush performed */\nconst BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nconst BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nconst OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nconst err = (strm, errorCode) => {\n strm.msg = messages[errorCode];\n return errorCode;\n};\n\nconst rank = (f) => {\n return ((f) * 2) - ((f) > 4 ? 9 : 0);\n};\n\nconst zero = (buf) => {\n let len = buf.length; while (--len >= 0) { buf[len] = 0; }\n};\n\n/* ===========================================================================\n * Slide the hash table when sliding the window down (could be avoided with 32\n * bit values at the expense of memory usage). We slide even when level == 0 to\n * keep the hash table consistent if we switch back to level > 0 later.\n */\nconst slide_hash = (s) => {\n let n, m;\n let p;\n let wsize = s.w_size;\n\n n = s.hash_size;\n p = n;\n do {\n m = s.head[--p];\n s.head[p] = (m >= wsize ? m - wsize : 0);\n } while (--n);\n n = wsize;\n//#ifndef FASTEST\n p = n;\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= wsize ? m - wsize : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n//#endif\n};\n\n/* eslint-disable new-cap */\nlet HASH = (s, prev, data) => ((prev << s.hash_shift) ^ data) & s.hash_mask;\n\n\n/* ===========================================================================\n * Insert string str in the dictionary and set match_head to the previous head\n * of the hash chain (the most recent string with same hash key). Return\n * the previous length of the hash chain.\n * IN assertion: all calls to INSERT_STRING are made with consecutive input\n * characters and the first MIN_MATCH bytes of str are valid (except for\n * the last MIN_MATCH-1 bytes of the input file).\n */\nconst INSERT_STRING = (s, str) => {\n let h;\n if (s.legacy_hash) {\n /* UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]); */\n h = s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n } else {\n // ANZAC++ hash: reads 4 bytes, matches node.js zlib output (legacyHash\n // restores classic zlib hash). Faster, with fewer collisions.\n const w = s.window;\n // Read 4 bytes little-endian. Math.imul reproduces C uint32 overflow in\n // `(value * 66521 + 66521) >> 16` exactly.\n const value = w[str] | (w[str + 1] << 8) | (w[str + 2] << 16) | (w[str + 3] << 24);\n h = s.ins_h = ((Math.imul(value, 66521) + 66521) >>> 16) & s.hash_mask;\n }\n const hash_head = s.prev[str & s.w_mask] = s.head[h];\n s.head[h] = str;\n return hash_head;\n};\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output, except for\n * some deflate_stored() output, goes through this function so some\n * applications may wish to modify it to avoid allocating a large\n * strm->next_out buffer and copying into it. (See also read_buf()).\n */\nconst flush_pending = (strm) => {\n const s = strm.state;\n\n //_tr_flush_bits(s);\n let len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n strm.output.set(s.pending_buf.subarray(s.pending_out, s.pending_out + len), strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n};\n\n\nconst flush_block_only = (s, last) => {\n _tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n};\n\n\nconst put_byte = (s, b) => {\n s.pending_buf[s.pending++] = b;\n};\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nconst putShortMSB = (s, b) => {\n\n // put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n};\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nconst read_buf = (strm, buf, start, size) => {\n\n let len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n // zmemcpy(buf, strm->next_in, len);\n buf.set(strm.input.subarray(strm.next_in, strm.next_in + len), start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32_1(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32_1(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n};\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nconst longest_match = (s, cur_match) => {\n\n let chain_length = s.max_chain_length; /* max hash chain length */\n let scan = s.strstart; /* current string */\n let match; /* matched string */\n let len; /* length of current match */\n let best_len = s.prev_length; /* best match length so far */\n let nice_match = s.nice_match; /* stop if match long enough */\n const limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n const _win = s.window; // shortcut\n\n const wmask = s.w_mask;\n const prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n const strend = s.strstart + MAX_MATCH;\n let scan_end1 = _win[scan + best_len - 1];\n let scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n};\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nconst fill_window = (s) => {\n\n const _w_size = s.w_size;\n let n, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n s.window.set(s.window.subarray(_w_size, _w_size + _w_size - more), 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n if (s.insert > s.strstart) {\n s.insert = s.strstart;\n }\n slide_hash(s);\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (!s.legacy_hash) {\n /* The 4-byte hash reads one extra byte, so it needs one more available. */\n if (s.lookahead + s.insert > MIN_MATCH) {\n str = s.strstart - s.insert;\n while (s.insert) {\n INSERT_STRING(s, str);\n str++;\n s.insert--;\n if (s.lookahead + s.insert <= MIN_MATCH) {\n break;\n }\n }\n }\n } else if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + 1]);\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n INSERT_STRING(s, str);\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// const curr = s.strstart + s.lookahead;\n// let init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n};\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n *\n * In case deflateParams() is used to later switch to a non-zero compression\n * level, s->matches (otherwise unused when storing) keeps track of the number\n * of hash table slides to perform. If s->matches is 1, then one hash table\n * slide will be done when switching. If s->matches is 2, the maximum value\n * allowed here, then the hash table will be cleared, since two or more slides\n * is the same as a clear.\n *\n * deflate_stored() is written to minimize the number of times an input byte is\n * copied. It is most efficient with large input and output buffers, which\n * maximizes the opportunites to have a single copy from next_in to next_out.\n */\nconst deflate_stored = (s, flush) => {\n\n /* Smallest worthy block size when not flushing or finishing. By default\n * this is 32K. This can be as small as 507 bytes for memLevel == 1. For\n * large input and output buffers, the stored block size will be larger.\n */\n let min_block = s.pending_buf_size - 5 > s.w_size ? s.w_size : s.pending_buf_size - 5;\n\n /* Copy as many min_block or larger stored blocks directly to next_out as\n * possible. If flushing, copy the remaining available input to next_out as\n * stored blocks, if there is enough space.\n */\n let len, left, have, last = 0;\n let used = s.strm.avail_in;\n do {\n /* Set len to the maximum size block that we can copy directly with the\n * available input data and output space. Set left to how much of that\n * would be copied from what's left in the window.\n */\n len = 65535/* MAX_STORED */; /* maximum deflate stored block length */\n have = (s.bi_valid + 42) >> 3; /* number of header bytes */\n if (s.strm.avail_out < have) { /* need room for header */\n break;\n }\n /* maximum stored block length that will fit in avail_out: */\n have = s.strm.avail_out - have;\n left = s.strstart - s.block_start; /* bytes left in window */\n if (len > left + s.strm.avail_in) {\n len = left + s.strm.avail_in; /* limit len to the input */\n }\n if (len > have) {\n len = have; /* limit len to the output */\n }\n\n /* If the stored block would be less than min_block in length, or if\n * unable to copy all of the available input when flushing, then try\n * copying to the window and the pending buffer instead. Also don't\n * write an empty block when flushing -- deflate() does that.\n */\n if (len < min_block && ((len === 0 && flush !== Z_FINISH$3) ||\n flush === Z_NO_FLUSH$2 ||\n len !== left + s.strm.avail_in)) {\n break;\n }\n\n /* Make a dummy stored block in pending to get the header bytes,\n * including any pending bits. This also updates the debugging counts.\n */\n last = flush === Z_FINISH$3 && len === left + s.strm.avail_in ? 1 : 0;\n _tr_stored_block(s, 0, 0, last);\n\n /* Replace the lengths in the dummy stored block with len. */\n s.pending_buf[s.pending - 4] = len;\n s.pending_buf[s.pending - 3] = len >> 8;\n s.pending_buf[s.pending - 2] = ~len;\n s.pending_buf[s.pending - 1] = ~len >> 8;\n\n /* Write the stored block header bytes. */\n flush_pending(s.strm);\n\n//#ifdef ZLIB_DEBUG\n// /* Update debugging counts for the data about to be copied. */\n// s->compressed_len += len << 3;\n// s->bits_sent += len << 3;\n//#endif\n\n /* Copy uncompressed bytes from the window to next_out. */\n if (left) {\n if (left > len) {\n left = len;\n }\n //zmemcpy(s->strm->next_out, s->window + s->block_start, left);\n s.strm.output.set(s.window.subarray(s.block_start, s.block_start + left), s.strm.next_out);\n s.strm.next_out += left;\n s.strm.avail_out -= left;\n s.strm.total_out += left;\n s.block_start += left;\n len -= left;\n }\n\n /* Copy uncompressed bytes directly from next_in to next_out, updating\n * the check value.\n */\n if (len) {\n read_buf(s.strm, s.strm.output, s.strm.next_out, len);\n s.strm.next_out += len;\n s.strm.avail_out -= len;\n s.strm.total_out += len;\n }\n } while (last === 0);\n\n /* Update the sliding window with the last s->w_size bytes of the copied\n * data, or append all of the copied data to the existing window if less\n * than s->w_size bytes were copied. Also update the number of bytes to\n * insert in the hash tables, in the event that deflateParams() switches to\n * a non-zero compression level.\n */\n used -= s.strm.avail_in; /* number of input bytes directly copied */\n if (used) {\n /* If any input was used, then no unused input remains in the window,\n * therefore s->block_start == s->strstart.\n */\n if (used >= s.w_size) { /* supplant the previous history */\n s.matches = 2; /* clear hash */\n //zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size);\n s.window.set(s.strm.input.subarray(s.strm.next_in - s.w_size, s.strm.next_in), 0);\n s.strstart = s.w_size;\n s.insert = s.strstart;\n }\n else {\n if (s.window_size - s.strstart <= used) {\n /* Slide the window down. */\n s.strstart -= s.w_size;\n //zmemcpy(s->window, s->window + s->w_size, s->strstart);\n s.window.set(s.window.subarray(s.w_size, s.w_size + s.strstart), 0);\n if (s.matches < 2) {\n s.matches++; /* add a pending slide_hash() */\n }\n if (s.insert > s.strstart) {\n s.insert = s.strstart;\n }\n }\n //zmemcpy(s->window + s->strstart, s->strm->next_in - used, used);\n s.window.set(s.strm.input.subarray(s.strm.next_in - used, s.strm.next_in), s.strstart);\n s.strstart += used;\n s.insert += used > s.w_size - s.insert ? s.w_size - s.insert : used;\n }\n s.block_start = s.strstart;\n }\n if (s.high_water < s.strstart) {\n s.high_water = s.strstart;\n }\n\n /* If the last block was written to next_out, then done. */\n if (last) {\n return BS_FINISH_DONE;\n }\n\n /* If flushing and all input has been consumed, then done. */\n if (flush !== Z_NO_FLUSH$2 && flush !== Z_FINISH$3 &&\n s.strm.avail_in === 0 && s.strstart === s.block_start) {\n return BS_BLOCK_DONE;\n }\n\n /* Fill the window with any remaining input. */\n have = s.window_size - s.strstart;\n if (s.strm.avail_in > have && s.block_start >= s.w_size) {\n /* Slide the window down. */\n s.block_start -= s.w_size;\n s.strstart -= s.w_size;\n //zmemcpy(s->window, s->window + s->w_size, s->strstart);\n s.window.set(s.window.subarray(s.w_size, s.w_size + s.strstart), 0);\n if (s.matches < 2) {\n s.matches++; /* add a pending slide_hash() */\n }\n have += s.w_size; /* more space now */\n if (s.insert > s.strstart) {\n s.insert = s.strstart;\n }\n }\n if (have > s.strm.avail_in) {\n have = s.strm.avail_in;\n }\n if (have) {\n read_buf(s.strm, s.window, s.strstart, have);\n s.strstart += have;\n s.insert += have > s.w_size - s.insert ? s.w_size - s.insert : have;\n }\n if (s.high_water < s.strstart) {\n s.high_water = s.strstart;\n }\n\n /* There was not enough avail_out to write a complete worthy or flushed\n * stored block to next_out. Write a stored block to pending instead, if we\n * have enough input for a worthy block, or if flushing and there is enough\n * room for the remaining input as a stored block in the pending buffer.\n */\n have = (s.bi_valid + 42) >> 3; /* number of header bytes */\n /* maximum stored block length that will fit in pending: */\n have = s.pending_buf_size - have > 65535/* MAX_STORED */ ? 65535/* MAX_STORED */ : s.pending_buf_size - have;\n min_block = have > s.w_size ? s.w_size : have;\n left = s.strstart - s.block_start;\n if (left >= min_block ||\n ((left || flush === Z_FINISH$3) && flush !== Z_NO_FLUSH$2 &&\n s.strm.avail_in === 0 && left <= have)) {\n len = left > have ? have : left;\n last = flush === Z_FINISH$3 && s.strm.avail_in === 0 &&\n len === left ? 1 : 0;\n _tr_stored_block(s, s.block_start, len, last);\n s.block_start += len;\n flush_pending(s.strm);\n }\n\n /* We've done all we can with the available input and output. */\n return last ? BS_FINISH_STARTED : BS_NEED_MORE;\n};\n\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nconst deflate_fast = (s, flush) => {\n\n let hash_head; /* head of the hash chain */\n let bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n hash_head = INSERT_STRING(s, s.strstart);\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = _tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n hash_head = INSERT_STRING(s, s.strstart);\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n if (s.legacy_hash) {\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + 1]);\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nconst deflate_slow = (s, flush) => {\n\n let hash_head; /* head of hash chain */\n let bflush; /* set if current block must be flushed */\n\n let max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n hash_head = INSERT_STRING(s, s.strstart);\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH - 1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH - 1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = _tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length - 1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n hash_head = INSERT_STRING(s, s.strstart);\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH - 1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n};\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nconst deflate_rle = (s, flush) => {\n\n let bflush; /* set if current block must be flushed */\n let prev; /* byte at distance one to match */\n let scan, strend; /* scan goes up to strend for length of run */\n\n const _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = _tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nconst deflate_huff = (s, flush) => {\n\n let bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n}\n\nconst configuration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nconst lm_init = (s) => {\n\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n};\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED$2; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.legacy_hash = 0; /* use classic zlib hash instead of default ANZAC++ */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new Uint16Array(HEAP_SIZE * 2);\n this.dyn_dtree = new Uint16Array((2 * D_CODES + 1) * 2);\n this.bl_tree = new Uint16Array((2 * BL_CODES + 1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new Uint16Array(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new Uint16Array(2 * L_CODES + 1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new Uint16Array(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.sym_buf = 0; /* buffer for distances and literals/lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.sym_next = 0; /* running index in sym_buf */\n this.sym_end = 0; /* symbol table full when sym_next reaches this */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\n/* =========================================================================\n * Check for a valid deflate stream state. Return 0 if ok, 1 if not.\n */\nconst deflateStateCheck = (strm) => {\n\n if (!strm) {\n return 1;\n }\n const s = strm.state;\n if (!s || s.strm !== strm || (s.status !== INIT_STATE &&\n//#ifdef GZIP\n s.status !== GZIP_STATE &&\n//#endif\n s.status !== EXTRA_STATE &&\n s.status !== NAME_STATE &&\n s.status !== COMMENT_STATE &&\n s.status !== HCRC_STATE &&\n s.status !== BUSY_STATE &&\n s.status !== FINISH_STATE)) {\n return 1;\n }\n return 0;\n};\n\n\nconst deflateResetKeep = (strm) => {\n\n if (deflateStateCheck(strm)) {\n return err(strm, Z_STREAM_ERROR$2);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n const s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status =\n//#ifdef GZIP\n s.wrap === 2 ? GZIP_STATE :\n//#endif\n s.wrap ? INIT_STATE : BUSY_STATE;\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = -2;\n _tr_init(s);\n return Z_OK$3;\n};\n\n\nconst deflateReset = (strm) => {\n\n const ret = deflateResetKeep(strm);\n if (ret === Z_OK$3) {\n lm_init(strm.state);\n }\n return ret;\n};\n\n\nconst deflateSetHeader = (strm, head) => {\n\n if (deflateStateCheck(strm) || strm.state.wrap !== 2) {\n return Z_STREAM_ERROR$2;\n }\n strm.state.gzhead = head;\n return Z_OK$3;\n};\n\n\nconst deflateInit2 = (strm, level, method, windowBits, memLevel, strategy, legacyHash) => {\n\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR$2;\n }\n let wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION$1) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED$2 ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED || (windowBits === 8 && wrap !== 1)) {\n return err(strm, Z_STREAM_ERROR$2);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n const s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n s.status = INIT_STATE; /* to pass state test in deflateReset() */\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.legacy_hash = legacyHash ? 1 : 0;\n\n s.hash_bits = memLevel + 7;\n /* ANZAC++ hash needs >= 15 hash bits to span its 4 read bytes. */\n if (!s.legacy_hash && s.hash_bits < 15) {\n s.hash_bits = 15;\n }\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n s.window = new Uint8Array(s.w_size * 2);\n s.head = new Uint16Array(s.hash_size);\n s.prev = new Uint16Array(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n /* We overlay pending_buf and sym_buf. This works since the average size\n * for length/distance pairs over any compressed block is assured to be 31\n * bits or less.\n *\n * Analysis: The longest fixed codes are a length code of 8 bits plus 5\n * extra bits, for lengths 131 to 257. The longest fixed distance codes are\n * 5 bits plus 13 extra bits, for distances 16385 to 32768. The longest\n * possible fixed-codes length/distance pair is then 31 bits total.\n *\n * sym_buf starts one-fourth of the way into pending_buf. So there are\n * three bytes in sym_buf for every four bytes in pending_buf. Each symbol\n * in sym_buf is three bytes -- two for the distance and one for the\n * literal/length. As each symbol is consumed, the pointer to the next\n * sym_buf value to read moves forward three bytes. From that symbol, up to\n * 31 bits are written to pending_buf. The closest the written pending_buf\n * bits gets to the next sym_buf symbol to read is just before the last\n * code is written. At that time, 31*(n-2) bits have been written, just\n * after 24*(n-2) bits have been consumed from sym_buf. sym_buf starts at\n * 8*n bits into pending_buf. (Note that the symbol buffer fills when n-1\n * symbols are written.) The closest the writing gets to what is unread is\n * then n+14 bits. Here n is lit_bufsize, which is 16384 by default, and\n * can range from 128 to 32768.\n *\n * Therefore, at a minimum, there are 142 bits of space between what is\n * written and what is read in the overlain buffers, so the symbols cannot\n * be overwritten by the compressed data. That space is actually 139 bits,\n * due to the three-bit fixed-code block header.\n *\n * That covers the case where either Z_FIXED is specified, forcing fixed\n * codes, or when the use of fixed codes is chosen, because that choice\n * results in a smaller compressed block than dynamic codes. That latter\n * condition then assures that the above analysis also covers all dynamic\n * blocks. A dynamic-code block will only be chosen to be emitted if it has\n * fewer bits than a fixed-code block would for the same set of symbols.\n * Therefore its average symbol length is assured to be less than 31. So\n * the compressed data for a dynamic block also cannot overwrite the\n * symbols from which it is being constructed.\n */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n s.pending_buf = new Uint8Array(s.pending_buf_size);\n\n // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n //s->sym_buf = s->pending_buf + s->lit_bufsize;\n s.sym_buf = s.lit_bufsize;\n\n //s->sym_end = (s->lit_bufsize - 1) * 3;\n s.sym_end = (s.lit_bufsize - 1) * 3;\n /* We avoid equality with lit_bufsize*3 because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n};\n\nconst deflateInit = (strm, level) => {\n\n return deflateInit2(strm, level, Z_DEFLATED$2, MAX_WBITS$1, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY$1);\n};\n\n\n/* ========================================================================= */\nconst deflate$2 = (strm, flush) => {\n\n if (deflateStateCheck(strm) || flush > Z_BLOCK$1 || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR$2) : Z_STREAM_ERROR$2;\n }\n\n const s = strm.state;\n\n if (!strm.output ||\n (strm.avail_in !== 0 && !strm.input) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH$3)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR$2 : Z_STREAM_ERROR$2);\n }\n\n const old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK$3;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH$3) {\n return err(strm, Z_BUF_ERROR$2);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR$2);\n }\n\n /* Write the header */\n if (s.status === INIT_STATE && s.wrap === 0) {\n s.status = BUSY_STATE;\n }\n if (s.status === INIT_STATE) {\n /* zlib header */\n let header = (Z_DEFLATED$2 + ((s.w_bits - 8) << 4)) << 8;\n let level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n\n /* Compression must start with an empty pending buffer */\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n }\n//#ifdef GZIP\n if (s.status === GZIP_STATE) {\n /* gzip header */\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n\n /* Compression must start with an empty pending buffer */\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n let beg = s.pending; /* start of bytes to update crc */\n let left = (s.gzhead.extra.length & 0xffff) - s.gzindex;\n while (s.pending + left > s.pending_buf_size) {\n let copy = s.pending_buf_size - s.pending;\n // zmemcpy(s.pending_buf + s.pending,\n // s.gzhead.extra + s.gzindex, copy);\n s.pending_buf.set(s.gzhead.extra.subarray(s.gzindex, s.gzindex + copy), s.pending);\n s.pending = s.pending_buf_size;\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n s.gzindex += copy;\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n beg = 0;\n left -= copy;\n }\n // JS specific: s.gzhead.extra may be TypedArray or Array for backward compatibility\n // TypedArray.slice and TypedArray.from don't exist in IE10-IE11\n let gzhead_extra = new Uint8Array(s.gzhead.extra);\n // zmemcpy(s->pending_buf + s->pending,\n // s->gzhead->extra + s->gzindex, left);\n s.pending_buf.set(gzhead_extra.subarray(s.gzindex, s.gzindex + left), s.pending);\n s.pending += left;\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n s.gzindex = 0;\n }\n s.status = NAME_STATE;\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n let beg = s.pending; /* start of bytes to update crc */\n let val;\n do {\n if (s.pending === s.pending_buf_size) {\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n beg = 0;\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n s.gzindex = 0;\n }\n s.status = COMMENT_STATE;\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n let beg = s.pending; /* start of bytes to update crc */\n let val;\n do {\n if (s.pending === s.pending_buf_size) {\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n beg = 0;\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n }\n s.status = HCRC_STATE;\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n }\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n }\n s.status = BUSY_STATE;\n\n /* Compression must start with an empty pending buffer */\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n }\n//#endif\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH$2 && s.status !== FINISH_STATE)) {\n let bstate = s.level === 0 ? deflate_stored(s, flush) :\n s.strategy === Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :\n s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush);\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK$3;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n _tr_align(s);\n }\n else if (flush !== Z_BLOCK$1) { /* FULL_FLUSH or SYNC_FLUSH */\n\n _tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH$1) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK$3;\n }\n }\n }\n\n if (flush !== Z_FINISH$3) { return Z_OK$3; }\n if (s.wrap <= 0) { return Z_STREAM_END$3; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK$3 : Z_STREAM_END$3;\n};\n\n\nconst deflateEnd = (strm) => {\n\n if (deflateStateCheck(strm)) {\n return Z_STREAM_ERROR$2;\n }\n\n const status = strm.state.status;\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR$2) : Z_OK$3;\n};\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nconst deflateSetDictionary = (strm, dictionary) => {\n\n let dictLength = dictionary.length;\n\n if (deflateStateCheck(strm)) {\n return Z_STREAM_ERROR$2;\n }\n\n const s = strm.state;\n const wrap = s.wrap;\n\n if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n return Z_STREAM_ERROR$2;\n }\n\n /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n if (wrap === 1) {\n /* adler32(strm->adler, dictionary, dictLength); */\n strm.adler = adler32_1(strm.adler, dictionary, dictLength, 0);\n }\n\n s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n /* if dictionary would fill window, just replace the history */\n if (dictLength >= s.w_size) {\n if (wrap === 0) { /* already empty otherwise */\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n /* use the tail */\n // dictionary = dictionary.slice(dictLength - s.w_size);\n let tmpDict = new Uint8Array(s.w_size);\n tmpDict.set(dictionary.subarray(dictLength - s.w_size, dictLength), 0);\n dictionary = tmpDict;\n dictLength = s.w_size;\n }\n /* insert dictionary into window and hash */\n const avail = strm.avail_in;\n const next = strm.next_in;\n const input = strm.input;\n strm.avail_in = dictLength;\n strm.next_in = 0;\n strm.input = dictionary;\n fill_window(s);\n while (s.lookahead >= MIN_MATCH) {\n let str = s.strstart;\n let n = s.lookahead - (MIN_MATCH - 1);\n do {\n INSERT_STRING(s, str);\n str++;\n } while (--n);\n s.strstart = str;\n s.lookahead = MIN_MATCH - 1;\n fill_window(s);\n }\n s.strstart += s.lookahead;\n s.block_start = s.strstart;\n s.insert = s.lookahead;\n s.lookahead = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n strm.next_in = next;\n strm.input = input;\n strm.avail_in = avail;\n s.wrap = wrap;\n return Z_OK$3;\n};\n\n\nvar deflateInit_1 = deflateInit;\nvar deflateInit2_1 = deflateInit2;\nvar deflateReset_1 = deflateReset;\nvar deflateResetKeep_1 = deflateResetKeep;\nvar deflateSetHeader_1 = deflateSetHeader;\nvar deflate_2$1 = deflate$2;\nvar deflateEnd_1 = deflateEnd;\nvar deflateSetDictionary_1 = deflateSetDictionary;\nvar deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.deflateBound = deflateBound;\nmodule.exports.deflateCopy = deflateCopy;\nmodule.exports.deflateGetDictionary = deflateGetDictionary;\nmodule.exports.deflateParams = deflateParams;\nmodule.exports.deflatePending = deflatePending;\nmodule.exports.deflatePrime = deflatePrime;\nmodule.exports.deflateTune = deflateTune;\n*/\n\nvar deflate_1$2 = {\n\tdeflateInit: deflateInit_1,\n\tdeflateInit2: deflateInit2_1,\n\tdeflateReset: deflateReset_1,\n\tdeflateResetKeep: deflateResetKeep_1,\n\tdeflateSetHeader: deflateSetHeader_1,\n\tdeflate: deflate_2$1,\n\tdeflateEnd: deflateEnd_1,\n\tdeflateSetDictionary: deflateSetDictionary_1,\n\tdeflateInfo: deflateInfo\n};\n\nconst _has = (obj, key) => {\n return Object.prototype.hasOwnProperty.call(obj, key);\n};\n\nvar assign = function (obj /*from1, from2, from3, ...*/) {\n const sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n const source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (const p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// Join array of chunks to single array.\nvar flattenChunks = (chunks) => {\n // calculate data length\n let len = 0;\n\n for (let i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n const result = new Uint8Array(len);\n\n for (let i = 0, pos = 0, l = chunks.length; i < l; i++) {\n let chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n};\n\nvar common = {\n\tassign: assign,\n\tflattenChunks: flattenChunks\n};\n\n// String encode/decode helpers\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nlet STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nconst _utf8len = new Uint8Array(256);\nfor (let q = 0; q < 256; q++) {\n _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[255] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nvar string2buf = (str) => {\n if (typeof TextEncoder === 'function' && TextEncoder.prototype.encode) {\n return new TextEncoder().encode(str);\n }\n\n let buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new Uint8Array(buf_len);\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Helper\nconst buf2binstring = (buf, len) => {\n // On Chrome, the arguments in a function call that are allowed is `65534`.\n // If the length of the buffer is smaller than that, we can use this optimization,\n // otherwise we will take a slower path.\n if (len < 65534) {\n if (buf.subarray && STR_APPLY_UIA_OK) {\n return String.fromCharCode.apply(null, buf.length === len ? buf : buf.subarray(0, len));\n }\n }\n\n let result = '';\n for (let i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n};\n\n\n// convert array to string\nvar buf2string = (buf, max) => {\n const len = max || buf.length;\n\n if (typeof TextDecoder === 'function' && TextDecoder.prototype.decode) {\n return new TextDecoder().decode(buf.subarray(0, max));\n }\n\n let i, out;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n const utf16buf = new Array(len * 2);\n\n for (out = 0, i = 0; i < len;) {\n let c = buf[i++];\n // quick process ascii\n if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n let c_len = _utf8len[c];\n // skip 5 & 6 byte codes\n if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nvar utf8border = (buf, max) => {\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n let pos = max - 1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means buffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\nvar strings = {\n\tstring2buf: string2buf,\n\tbuf2string: buf2string,\n\tutf8border: utf8border\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nvar zstream = ZStream;\n\nconst toString$1 = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH: Z_NO_FLUSH$1, Z_SYNC_FLUSH, Z_FULL_FLUSH, Z_FINISH: Z_FINISH$2,\n Z_OK: Z_OK$2, Z_STREAM_END: Z_STREAM_END$2,\n Z_DEFAULT_COMPRESSION,\n Z_DEFAULT_STRATEGY,\n Z_DEFLATED: Z_DEFLATED$1\n} = constants$2;\n\n/* ===========================================================================*/\n\nconst defaultOptions$1 = {\n level: Z_DEFAULT_COMPRESSION,\n method: Z_DEFLATED$1,\n chunkSize: 16384,\n windowBits: 15,\n memLevel: 8,\n strategy: Z_DEFAULT_STRATEGY,\n legacyHash: true\n};\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * - `legacyHash` (Boolean) - use the classic zlib hash (default), which matches\n * canonical zlib output byte-for-byte. Set to `false` to use the faster\n * ANZAC++ hash, which matches recent (chromium) node.js output instead.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `header` (Object) - custom header for gzip\n * - `text` (Boolean) - true if compressed data believed to be text\n * - `time` (Number) - modification time, unix timestamp\n * - `os` (Number) - operation system code\n * - `extra` (Array) - array of bytes with extra data (max 65536)\n * - `name` (String) - file name (binary string)\n * - `comment` (String) - comment (binary string)\n * - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * , chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true); // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate$1(options) {\n this.options = common.assign({}, defaultOptions$1, options || {});\n\n let opt = this.options;\n\n if (opt.raw && (opt.windowBits > 0)) {\n opt.windowBits = -opt.windowBits;\n }\n\n else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n opt.windowBits += 16;\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new zstream();\n this.strm.avail_out = 0;\n\n let status = deflate_1$2.deflateInit2(\n this.strm,\n opt.level,\n opt.method,\n opt.windowBits,\n opt.memLevel,\n opt.strategy,\n opt.legacyHash\n );\n\n if (status !== Z_OK$2) {\n throw new Error(messages[status]);\n }\n\n if (opt.header) {\n deflate_1$2.deflateSetHeader(this.strm, opt.header);\n }\n\n if (opt.dictionary) {\n let dict;\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n // If we need to compress text, change encoding to utf8.\n dict = strings.string2buf(opt.dictionary);\n } else if (toString$1.call(opt.dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(opt.dictionary);\n } else {\n dict = opt.dictionary;\n }\n\n status = deflate_1$2.deflateSetDictionary(this.strm, dict);\n\n if (status !== Z_OK$2) {\n throw new Error(messages[status]);\n }\n\n this._dict_set = true;\n }\n}\n\n/**\n * Deflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer|String): input data. Strings will be\n * converted to utf8 byte sequence.\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must\n * have `flush_mode` Z_FINISH (or `true`). That will flush internal pending\n * buffers and call [[Deflate#onEnd]].\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nDeflate$1.prototype.push = function (data, flush_mode) {\n const strm = this.strm;\n const chunkSize = this.options.chunkSize;\n let status, _flush_mode;\n\n if (this.ended) { return false; }\n\n if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n else _flush_mode = flush_mode === true ? Z_FINISH$2 : Z_NO_FLUSH$1;\n\n // Convert data if needed\n if (typeof data === 'string') {\n // If we need to compress text, change encoding to utf8.\n strm.input = strings.string2buf(data);\n } else if (toString$1.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n for (;;) {\n if (strm.avail_out === 0) {\n strm.output = new Uint8Array(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n // Make sure avail_out > 6 to avoid repeating markers\n if ((_flush_mode === Z_SYNC_FLUSH || _flush_mode === Z_FULL_FLUSH) && strm.avail_out <= 6) {\n this.onData(strm.output.subarray(0, strm.next_out));\n strm.avail_out = 0;\n continue;\n }\n\n status = deflate_1$2.deflate(strm, _flush_mode);\n\n // Ended => flush and finish\n if (status === Z_STREAM_END$2) {\n if (strm.next_out > 0) {\n this.onData(strm.output.subarray(0, strm.next_out));\n }\n status = deflate_1$2.deflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === Z_OK$2;\n }\n\n // Flush if out buffer full\n if (strm.avail_out === 0) {\n this.onData(strm.output);\n continue;\n }\n\n // Flush if requested and has data\n if (_flush_mode > 0 && strm.next_out > 0) {\n this.onData(strm.output.subarray(0, strm.next_out));\n strm.avail_out = 0;\n continue;\n }\n\n if (strm.avail_in === 0) break;\n }\n\n return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array): output data.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate$1.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate$1.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK$2) {\n this.result = common.flattenChunks(this.chunks);\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array\n * - data (Uint8Array|ArrayBuffer|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const data = new Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate$1(input, options) {\n const deflator = new Deflate$1(options);\n\n deflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (deflator.err) { throw deflator.msg || messages[deflator.err]; }\n\n return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array\n * - data (Uint8Array|ArrayBuffer|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw$1(input, options) {\n options = options || {};\n options.raw = true;\n return deflate$1(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array\n * - data (Uint8Array|ArrayBuffer|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip$1(input, options) {\n options = options || {};\n options.gzip = true;\n return deflate$1(input, options);\n}\n\n\nvar Deflate_1$1 = Deflate$1;\nvar deflate_2 = deflate$1;\nvar deflateRaw_1$1 = deflateRaw$1;\nvar gzip_1$1 = gzip$1;\nvar constants$1 = constants$2;\n\nvar deflate_1$1 = {\n\tDeflate: Deflate_1$1,\n\tdeflate: deflate_2,\n\tdeflateRaw: deflateRaw_1$1,\n\tgzip: gzip_1$1,\n\tconstants: constants$1\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nconst BAD$1 = 16209; /* got a data error -- remain here until reset */\nconst TYPE$1 = 16191; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nvar inffast = function inflate_fast(strm, start) {\n let _in; /* local strm.input */\n let last; /* have enough input while in < last */\n let _out; /* local strm.output */\n let beg; /* inflate()'s initial strm.output */\n let end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n let dmax; /* maximum distance from zlib header */\n//#endif\n let wsize; /* window size or zero if not using window */\n let whave; /* valid bytes in the window */\n let wnext; /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n let s_window; /* allocated sliding window, if wsize != 0 */\n let hold; /* local strm.hold */\n let bits; /* local strm.bits */\n let lcode; /* local strm.lencode */\n let dcode; /* local strm.distcode */\n let lmask; /* mask for first level of length codes */\n let dmask; /* mask for first level of distance codes */\n let here; /* retrieved table entry */\n let op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n let len; /* match length, unused bytes */\n let dist; /* match distance */\n let from; /* where to copy match from */\n let from_source;\n\n\n let input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n const state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD$1;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD$1;\n break top;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD$1;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE$1;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD$1;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst MAXBITS = 15;\nconst ENOUGH_LENS$1 = 852;\nconst ENOUGH_DISTS$1 = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst CODES$1 = 0;\nconst LENS$1 = 1;\nconst DISTS$1 = 2;\n\nconst lbase = new Uint16Array([ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n]);\n\nconst lext = new Uint8Array([ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 199, 75\n]);\n\nconst dbase = new Uint16Array([ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n]);\n\nconst dext = new Uint8Array([ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n]);\n\nconst inflate_table = (type, lens, lens_index, codes, table, table_index, work, opts) =>\n{\n const bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n let len = 0; /* a code's length in bits */\n let sym = 0; /* index of code symbols */\n let min = 0, max = 0; /* minimum and maximum code lengths */\n let root = 0; /* number of index bits for root table */\n let curr = 0; /* number of index bits for current table */\n let drop = 0; /* code bits to drop for sub-table */\n let left = 0; /* number of prefix codes available */\n let used = 0; /* code entries in table used */\n let huff = 0; /* Huffman code */\n let incr; /* for incrementing code, index */\n let fill; /* index for replicating entries */\n let low; /* low bits for current root entry */\n let mask; /* mask for low root bits */\n let next; /* next available space in table */\n let base = null; /* base value table to use */\n// let shoextra; /* extra bits table to use */\n let match; /* use base and extra for symbol >= match */\n const count = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n const offs = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n let extra = null;\n\n let here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES$1 || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES$1) {\n base = extra = work; /* dummy value--not used */\n match = 20;\n\n } else if (type === LENS$1) {\n base = lbase;\n extra = lext;\n match = 257;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n match = 0;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS$1 && used > ENOUGH_LENS$1) ||\n (type === DISTS$1 && used > ENOUGH_DISTS$1)) {\n return 1;\n }\n\n /* process all codes and make table entries */\n for (;;) {\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] + 1 < match) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] >= match) {\n here_op = extra[work[sym] - match];\n here_val = base[work[sym] - match];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS$1 && used > ENOUGH_LENS$1) ||\n (type === DISTS$1 && used > ENOUGH_DISTS$1)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n\n\nvar inftrees = inflate_table;\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n\n\n\n\n\nconst CODES = 0;\nconst LENS = 1;\nconst DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_FINISH: Z_FINISH$1, Z_BLOCK, Z_TREES,\n Z_OK: Z_OK$1, Z_STREAM_END: Z_STREAM_END$1, Z_NEED_DICT: Z_NEED_DICT$1, Z_STREAM_ERROR: Z_STREAM_ERROR$1, Z_DATA_ERROR: Z_DATA_ERROR$1, Z_MEM_ERROR: Z_MEM_ERROR$1, Z_BUF_ERROR: Z_BUF_ERROR$1,\n Z_DEFLATED\n} = constants$2;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nconst HEAD = 16180; /* i: waiting for magic header */\nconst FLAGS = 16181; /* i: waiting for method and flags (gzip) */\nconst TIME = 16182; /* i: waiting for modification time (gzip) */\nconst OS = 16183; /* i: waiting for extra flags and operating system (gzip) */\nconst EXLEN = 16184; /* i: waiting for extra length (gzip) */\nconst EXTRA = 16185; /* i: waiting for extra bytes (gzip) */\nconst NAME = 16186; /* i: waiting for end of file name (gzip) */\nconst COMMENT = 16187; /* i: waiting for end of comment (gzip) */\nconst HCRC = 16188; /* i: waiting for header crc (gzip) */\nconst DICTID = 16189; /* i: waiting for dictionary check value */\nconst DICT = 16190; /* waiting for inflateSetDictionary() call */\nconst TYPE = 16191; /* i: waiting for type bits, including last-flag bit */\nconst TYPEDO = 16192; /* i: same, but skip check to exit inflate on new block */\nconst STORED = 16193; /* i: waiting for stored size (length and complement) */\nconst COPY_ = 16194; /* i/o: same as COPY below, but only first time in */\nconst COPY = 16195; /* i/o: waiting for input or output to copy stored block */\nconst TABLE = 16196; /* i: waiting for dynamic block table lengths */\nconst LENLENS = 16197; /* i: waiting for code length code lengths */\nconst CODELENS = 16198; /* i: waiting for length/lit and distance code lengths */\nconst LEN_ = 16199; /* i: same as LEN below, but only first time in */\nconst LEN = 16200; /* i: waiting for length/lit/eob code */\nconst LENEXT = 16201; /* i: waiting for length extra bits */\nconst DIST = 16202; /* i: waiting for distance code */\nconst DISTEXT = 16203; /* i: waiting for distance extra bits */\nconst MATCH = 16204; /* o: waiting for output space to copy string */\nconst LIT = 16205; /* o: waiting for output space to write literal */\nconst CHECK = 16206; /* i: waiting for 32-bit check value */\nconst LENGTH = 16207; /* i: waiting for 32-bit length (gzip) */\nconst DONE = 16208; /* finished check, done -- remain here until reset */\nconst BAD = 16209; /* got a data error -- remain here until reset */\nconst MEM = 16210; /* got an inflate() memory error -- remain here until reset */\nconst SYNC = 16211; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nconst ENOUGH_LENS = 852;\nconst ENOUGH_DISTS = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst MAX_WBITS = 15;\n/* 32K LZ77 window */\nconst DEF_WBITS = MAX_WBITS;\n\n\nconst zswap32 = (q) => {\n\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n};\n\n\nfunction InflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip,\n bit 2 true to validate check value */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib), or\n -1 if raw or no header yet */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new Uint16Array(320); /* temporary storage for code lengths */\n this.work = new Uint16Array(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new Int32Array(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\n\nconst inflateStateCheck = (strm) => {\n\n if (!strm) {\n return 1;\n }\n const state = strm.state;\n if (!state || state.strm !== strm ||\n state.mode < HEAD || state.mode > SYNC) {\n return 1;\n }\n return 0;\n};\n\n\nconst inflateResetKeep = (strm) => {\n\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.flags = -1;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new Int32Array(ENOUGH_LENS);\n state.distcode = state.distdyn = new Int32Array(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK$1;\n};\n\n\nconst inflateReset = (strm) => {\n\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n};\n\n\nconst inflateReset2 = (strm, windowBits) => {\n let wrap;\n\n /* get the state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 5;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR$1;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n};\n\n\nconst inflateInit2 = (strm, windowBits) => {\n\n if (!strm) { return Z_STREAM_ERROR$1; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n const state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.strm = strm;\n state.window = null/*Z_NULL*/;\n state.mode = HEAD; /* to pass state test in inflateReset2() */\n const ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK$1) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n};\n\n\nconst inflateInit = (strm) => {\n\n return inflateInit2(strm, DEF_WBITS);\n};\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nlet virgin = true;\n\nlet lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\n\nconst fixedtables = (state) => {\n\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n lenfix = new Int32Array(512);\n distfix = new Int32Array(32);\n\n /* literal/length table */\n let sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inftrees(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inftrees(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n};\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nconst updatewindow = (strm, src, end, copy) => {\n\n let dist;\n const state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.window = new Uint8Array(1 << state.wbits);\n }\n\n /* if window not in use yet, initialize */\n if (state.wsize === 0) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n state.window.set(src.subarray(end - state.wsize, end), 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n state.window.set(src.subarray(end - copy, end - copy + dist), state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n state.window.set(src.subarray(end - copy, end), 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n};\n\n\nconst inflate$2 = (strm, flush) => {\n\n let state;\n let input, output; // input/output buffers\n let next; /* next input INDEX */\n let put; /* next output INDEX */\n let have, left; /* available input and output */\n let hold; /* bit buffer */\n let bits; /* bits in bit buffer */\n let _in, _out; /* save starting available input and output */\n let copy; /* number of stored or match bytes to copy */\n let from; /* where to copy match bytes from */\n let from_source;\n let here = 0; /* current decoding table entry */\n let here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //let last; /* parent table entry */\n let last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n let len; /* length to copy for repeats, bits to drop */\n let ret; /* return code */\n const hbuf = new Uint8Array(4); /* buffer for gzip header crc calculation */\n let opts;\n\n let n; // temporary variable for NEED_BITS\n\n const order = /* permutation of code lengths */\n new Uint8Array([ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]);\n\n\n if (inflateStateCheck(strm) || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR$1;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK$1;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n if (state.wbits === 0) {\n state.wbits = 15;\n }\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n if (len > 15 || len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n\n // !!! pako patch. Force use `options.windowBits` if passed.\n // Required to always use max window size by default.\n state.dmax = 1 << state.wbits;\n //state.dmax = 1 << len;\n\n state.flags = 0; /* indicate zlib header */\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32_1(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more convenient processing later\n state.head.extra = new Uint8Array(state.head.extra_len);\n }\n state.head.extra.set(\n input.subarray(\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n next + copy\n ),\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32_1(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32_1(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32_1(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 4) && hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT$1;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n output.set(input.subarray(next, next + copy), put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inftrees(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inftrees(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inftrees(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inffast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' instead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if ((state.wrap & 4) && _out) {\n strm.adler = state.check =\n /*UPDATE_CHECK(state.check, put - _out, _out);*/\n (state.flags ? crc32_1(state.check, output, _out, put - _out) : adler32_1(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.wrap & 4) && (state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 4) && hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END$1;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR$1;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR$1;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR$1;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH$1))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) ;\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if ((state.wrap & 4) && _out) {\n strm.adler = state.check = /*UPDATE_CHECK(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32_1(state.check, output, _out, strm.next_out - _out) : adler32_1(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH$1) && ret === Z_OK$1) {\n ret = Z_BUF_ERROR$1;\n }\n return ret;\n};\n\n\nconst inflateEnd = (strm) => {\n\n if (inflateStateCheck(strm)) {\n return Z_STREAM_ERROR$1;\n }\n\n let state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK$1;\n};\n\n\nconst inflateGetHeader = (strm, head) => {\n\n /* check state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR$1; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK$1;\n};\n\n\nconst inflateSetDictionary = (strm, dictionary) => {\n const dictLength = dictionary.length;\n\n let state;\n let dictid;\n let ret;\n\n /* check state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR$1;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32_1(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR$1;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n if (ret) {\n state.mode = MEM;\n return Z_MEM_ERROR$1;\n }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK$1;\n};\n\n\nvar inflateReset_1 = inflateReset;\nvar inflateReset2_1 = inflateReset2;\nvar inflateResetKeep_1 = inflateResetKeep;\nvar inflateInit_1 = inflateInit;\nvar inflateInit2_1 = inflateInit2;\nvar inflate_2$1 = inflate$2;\nvar inflateEnd_1 = inflateEnd;\nvar inflateGetHeader_1 = inflateGetHeader;\nvar inflateSetDictionary_1 = inflateSetDictionary;\nvar inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.inflateCodesUsed = inflateCodesUsed;\nmodule.exports.inflateCopy = inflateCopy;\nmodule.exports.inflateGetDictionary = inflateGetDictionary;\nmodule.exports.inflateMark = inflateMark;\nmodule.exports.inflatePrime = inflatePrime;\nmodule.exports.inflateSync = inflateSync;\nmodule.exports.inflateSyncPoint = inflateSyncPoint;\nmodule.exports.inflateUndermine = inflateUndermine;\nmodule.exports.inflateValidate = inflateValidate;\n*/\n\nvar inflate_1$2 = {\n\tinflateReset: inflateReset_1,\n\tinflateReset2: inflateReset2_1,\n\tinflateResetKeep: inflateResetKeep_1,\n\tinflateInit: inflateInit_1,\n\tinflateInit2: inflateInit2_1,\n\tinflate: inflate_2$1,\n\tinflateEnd: inflateEnd_1,\n\tinflateGetHeader: inflateGetHeader_1,\n\tinflateSetDictionary: inflateSetDictionary_1,\n\tinflateInfo: inflateInfo\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n /* true if compressed data believed to be text */\n this.text = 0;\n /* modification time */\n this.time = 0;\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0;\n /* operating system */\n this.os = 0;\n /* pointer to extra field or Z_NULL if none */\n this.extra = null;\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0; // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = '';\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = '';\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0;\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false;\n}\n\nvar gzheader = GZheader;\n\nconst toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH, Z_FINISH,\n Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR, Z_BUF_ERROR\n} = constants$2;\n\n/* ===========================================================================*/\n\nconst defaultOptions = {\n chunkSize: 1024 * 64,\n windowBits: 15,\n to: ''\n};\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * const chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate$1(options) {\n this.options = common.assign({}, defaultOptions, options || {});\n\n const opt = this.options;\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n opt.windowBits = -opt.windowBits;\n if (opt.windowBits === 0) { opt.windowBits = -15; }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n !(options && options.windowBits)) {\n opt.windowBits += 32;\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15;\n }\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new zstream();\n this.strm.avail_out = 0;\n\n let status = inflate_1$2.inflateInit2(\n this.strm,\n opt.windowBits\n );\n\n if (status !== Z_OK) {\n throw new Error(messages[status]);\n }\n\n this.header = new gzheader();\n\n inflate_1$2.inflateGetHeader(this.strm, this.header);\n\n // Setup dictionary\n if (opt.dictionary) {\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n opt.dictionary = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n opt.dictionary = new Uint8Array(opt.dictionary);\n }\n if (opt.raw) { //In raw mode we need to set the dictionary early\n status = inflate_1$2.inflateSetDictionary(this.strm, opt.dictionary);\n if (status !== Z_OK) {\n throw new Error(messages[status]);\n }\n }\n }\n}\n\n/**\n * Inflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer): input data\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE\n * flush modes. See constants. Skipped or `false` means Z_NO_FLUSH,\n * `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. If end of stream detected,\n * [[Inflate#onEnd]] will be called.\n *\n * `flush_mode` is not needed for normal operation, because end of stream\n * detected automatically. You may try to use it for advanced things, but\n * this functionality was not tested.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nInflate$1.prototype.push = function (data, flush_mode) {\n const strm = this.strm;\n const chunkSize = this.options.chunkSize;\n const dictionary = this.options.dictionary;\n let status, _flush_mode, last_avail_out;\n\n if (this.ended) return false;\n\n if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n else _flush_mode = flush_mode === true ? Z_FINISH : Z_NO_FLUSH;\n\n // Convert data if needed\n if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n for (;;) {\n if (strm.avail_out === 0) {\n strm.output = new Uint8Array(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n status = inflate_1$2.inflate(strm, _flush_mode);\n\n if (status === Z_NEED_DICT && dictionary) {\n status = inflate_1$2.inflateSetDictionary(strm, dictionary);\n\n if (status === Z_OK) {\n status = inflate_1$2.inflate(strm, _flush_mode);\n } else if (status === Z_DATA_ERROR) {\n // Replace code with more verbose\n status = Z_NEED_DICT;\n }\n }\n\n // Only the gzip format defines concatenated members (RFC 1952: a gzip file\n // is \"a series of members\"). A zlib stream (RFC 1950) ends after its\n // ADLER32, and a raw DEFLATE stream (RFC 1951) ends after its final block -\n // neither format allows anything to follow, so bytes after the end are not\n // ours to interpret and must be left in the input. Restart decoding only\n // for a gzip member: `state.flags` is non-zero only once a gzip header has\n // actually been decoded (it stays 0 for a zlib member, even when the format\n // was auto-detected and the gzip bit of `wrap` is set). A trailing zero\n // byte is padding, not the start of a member (no member can begin with 0).\n while (strm.avail_in > 0 &&\n status === Z_STREAM_END &&\n (strm.state.wrap & 2) && strm.state.flags !== 0 &&\n strm.input[strm.next_in] !== 0)\n {\n inflate_1$2.inflateReset(strm);\n status = inflate_1$2.inflate(strm, _flush_mode);\n }\n\n switch (status) {\n case Z_STREAM_ERROR:\n case Z_DATA_ERROR:\n case Z_NEED_DICT:\n case Z_MEM_ERROR:\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n\n // Remember real `avail_out` value, because we may patch out buffer content\n // to align utf8 strings boundaries.\n last_avail_out = strm.avail_out;\n\n if (strm.next_out) {\n // Flush output if buffer is full, stream ended, or an explicit flush was\n // requested (e.g. Z_SYNC_FLUSH) - to push out the tail, same as node's zlib.\n if (strm.avail_out === 0 || status === Z_STREAM_END || _flush_mode > 0) {\n\n if (this.options.to === 'string') {\n\n let next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n let tail = strm.next_out - next_out_utf8;\n let utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n // move tail & realign counters\n strm.next_out = tail;\n strm.avail_out = chunkSize - tail;\n if (tail) strm.output.set(strm.output.subarray(next_out_utf8, next_out_utf8 + tail), 0);\n\n this.onData(utf8str);\n\n } else {\n this.onData(strm.output.length === strm.next_out ? strm.output : strm.output.subarray(0, strm.next_out));\n\n // Force a fresh output buffer on next iteration / next push, so the\n // already emitted tail is not sent again.\n strm.avail_out = 0;\n strm.next_out = 0;\n }\n }\n }\n\n // A full output buffer means there may be more to produce - allocate a new\n // one and call inflate again. The status depends on the flush mode: with\n // Z_NO_FLUSH a full buffer is reported as Z_OK, but with Z_FINISH the same\n // situation is reported as Z_BUF_ERROR (\"could not make progress now\",\n // non-fatal) even though output is still pending. Both must continue; the\n // distinction that matters is purely \"was the output buffer exhausted\".\n if ((status === Z_OK || status === Z_BUF_ERROR) && last_avail_out === 0) continue;\n\n // Finalize if end of stream reached.\n if (status === Z_STREAM_END) {\n status = inflate_1$2.inflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return true;\n }\n\n if (strm.avail_in === 0) {\n // Input is exhausted. If the caller declared this the end of the stream\n // (Z_FINISH) but we never saw Z_STREAM_END, the compressed data ended\n // before its terminating marker - i.e. it is truncated/incomplete. That\n // is an error: returning the partial output as success would be\n // indistinguishable from a complete decode, hiding the data loss. Report\n // it via Z_BUF_ERROR. (Reached only when the output buffer still had room\n // - a full buffer is handled by the `continue` above - so this genuinely\n // means \"ran out of input\", not \"ran out of output\".)\n if (_flush_mode === Z_FINISH) {\n status = inflate_1$2.inflateEnd(this.strm);\n this.onEnd(status === Z_OK ? Z_BUF_ERROR : status);\n this.ended = true;\n return false;\n }\n break;\n }\n }\n\n return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|String): output data. When string output requested,\n * each chunk will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate$1.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate$1.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n this.result = this.chunks.join('');\n } else {\n this.result = common.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako');\n * const input = pako.deflate(new Uint8Array([1,2,3,4,5,6,7,8,9]));\n * let output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err) {\n * console.log(err);\n * }\n * ```\n **/\nfunction inflate$1(input, options) {\n const inflator = new Inflate$1(options);\n\n inflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) throw inflator.msg || messages[inflator.err];\n\n return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw$1(input, options) {\n options = options || {};\n options.raw = true;\n return inflate$1(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nvar Inflate_1$1 = Inflate$1;\nvar inflate_2 = inflate$1;\nvar inflateRaw_1$1 = inflateRaw$1;\nvar ungzip$1 = inflate$1;\nvar constants = constants$2;\n\nvar inflate_1$1 = {\n\tInflate: Inflate_1$1,\n\tinflate: inflate_2,\n\tinflateRaw: inflateRaw_1$1,\n\tungzip: ungzip$1,\n\tconstants: constants\n};\n\nconst { Deflate, deflate, deflateRaw, gzip } = deflate_1$1;\n\nconst { Inflate, inflate, inflateRaw, ungzip } = inflate_1$1;\n\n\n\nvar Deflate_1 = Deflate;\nvar deflate_1 = deflate;\nvar deflateRaw_1 = deflateRaw;\nvar gzip_1 = gzip;\nvar Inflate_1 = Inflate;\nvar inflate_1 = inflate;\nvar inflateRaw_1 = inflateRaw;\nvar ungzip_1 = ungzip;\nvar constants_1 = constants$2;\n\nvar pako = {\n\tDeflate: Deflate_1,\n\tdeflate: deflate_1,\n\tdeflateRaw: deflateRaw_1,\n\tgzip: gzip_1,\n\tInflate: Inflate_1,\n\tinflate: inflate_1,\n\tinflateRaw: inflateRaw_1,\n\tungzip: ungzip_1,\n\tconstants: constants_1\n};\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9wYWtvL2Rpc3QvcGFrby5lc20ubWpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOERBQThEO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQzs7QUFFQTs7O0FBR0EsdUJBQXVCLHNCQUFzQixxQkFBcUI7O0FBRWxFOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSwyQkFBMkI7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBLG9DQUFvQztBQUNwQyxvQ0FBb0M7QUFDcEMsb0NBQW9DO0FBQ3BDLG9DQUFvQztBQUNwQyxvQ0FBb0M7O0FBRXBDO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtB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eUI7O0FBRXpCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQzs7QUFFbEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUEsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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TUFBTTtBQUNOO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCO0FBQzFCLDJCQUEyQjs7QUFFM0I7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsU0FBUztBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSx3REFBd0Q7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRDtBQUMzRDs7QUFFQTtB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QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDZCQUE2Qjs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVCQUF1Qjs7QUFFdkIsdUNBQXVDOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0I7O0FBRXBCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0Esc0JBQXNCOztBQUV0QjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RDtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0IsMkJBQTJCOztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5Qiw4QkFBOEI7QUFDOUIsOEJBQThCO0FBQzlCLDhCQUE4QjtBQUM5Qiw4QkFBOEI7QUFDOUI7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQSw4QkFBOEI7QUFDOUIsOEJBQThCO0FBQzlCLDhCQUE4QjtBQUM5QjtBQUNBLDhCQUE4QjtBQUM5Qiw4QkFBOEI7QUFDOUIsOEJBQThCO0FBQzlCLDhCQUE4QjtBQUM5Qiw4QkFBOEI7QUFDOUIsOEJBQThCO0FBQzlCLDhCQUE4QjtBQUM5Qiw4QkFBOEI7QUFDOUIsOEJBQThCO0FBQzlCO0FBQ0EsOEJBQThCO0FBQzlCLDhCQUE4QjtBQUM5Qiw4QkFBOEI7QUFDOUI7OztBQUdBLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsV0FBVyxJQUFJO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSwr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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVGQUF1RjtBQUN2RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQzs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUM7QUFDakM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOERBQThEO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLFNBQVM7QUFDL0M7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLCtCQUErQjs7QUFFaEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0JBQXdCO0FBQ3hCLHdCQUF3QjtBQUN4Qix3QkFBd0I7QUFDeEIsd0JBQXdCOztBQUV4QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLFVBQVU7QUFDVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJFQUEyRTtBQUMzRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLHFDQUFxQzs7QUFFN0MsUUFBUSx1Q0FBdUM7Ozs7QUFJL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRXlPIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9wYWtvL2Rpc3QvcGFrby5lc20ubWpzPzA0ODEiXSwic291cmNlc0NvbnRlbnQiOlsiXG4vKiEgcGFrbyAyLjIuMCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL3Bha28gQGxpY2Vuc2UgKE1JVCBBTkQgWmxpYikgKi9cbi8vIChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlclxuLy8gKEMpIDIwMTQtMjAxNyBWaXRhbHkgUHV6cmluIGFuZCBBbmRyZXkgVHVwaXRzaW5cbi8vXG4vLyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZFxuLy8gd2FycmFudHkuIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzXG4vLyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLFxuLy8gaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdFxuLy8gZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuLy9cbi8vIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90XG4vLyAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlXG4vLyAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZVxuLy8gICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLlxuLy8gMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmVcbi8vICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLlxuLy8gMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi5cblxuLyogZXNsaW50LWRpc2FibGUgc3BhY2UtdW5hcnktb3BzICovXG5cbi8qIFB1YmxpYyBjb25zdGFudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5cbi8vY29uc3QgWl9GSUxURVJFRCAgICAgICAgICA9IDE7XG4vL2NvbnN0IFpfSFVGRk1BTl9PTkxZICAgICAgPSAyO1xuLy9jb25zdCBaX1JMRSAgICAgICAgICAgICAgID0gMztcbmNvbnN0IFpfRklYRUQkMSAgICAgICAgICAgICAgID0gNDtcbi8vY29uc3QgWl9ERUZBVUxUX1NUUkFURUdZICA9IDA7XG5cbi8qIFBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgZGF0YV90eXBlIGZpZWxkICh0aG91Z2ggc2VlIGluZmxhdGUoKSkgKi9cbmNvbnN0IFpfQklOQVJZICAgICAgICAgICAgICA9IDA7XG5jb25zdCBaX1RFWFQgICAgICAgICAgICAgICAgPSAxO1xuLy9jb25zdCBaX0FTQ0lJICAgICAgICAgICAgID0gMTsgLy8gPSBaX1RFWFRcbmNvbnN0IFpfVU5LTk9XTiQxICAgICAgICAgICAgID0gMjtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuXG5mdW5jdGlvbiB6ZXJvJDEoYnVmKSB7IGxldCBsZW4gPSBidWYubGVuZ3RoOyB3aGlsZSAoLS1sZW4gPj0gMCkgeyBidWZbbGVuXSA9IDA7IH0gfVxuXG4vLyBGcm9tIHp1dGlsLmhcblxuY29uc3QgU1RPUkVEX0JMT0NLID0gMDtcbmNvbnN0IFNUQVRJQ19UUkVFUyA9IDE7XG5jb25zdCBEWU5fVFJFRVMgICAgPSAyO1xuLyogVGhlIHRocmVlIGtpbmRzIG9mIGJsb2NrIHR5cGUgKi9cblxuY29uc3QgTUlOX01BVENIJDEgICAgPSAzO1xuY29uc3QgTUFYX01BVENIJDEgICAgPSAyNTg7XG4vKiBUaGUgbWluaW11bSBhbmQgbWF4aW11bSBtYXRjaCBsZW5ndGhzICovXG5cbi8vIEZyb20gZGVmbGF0ZS5oXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEludGVybmFsIGNvbXByZXNzaW9uIHN0YXRlLlxuICovXG5cbmNvbnN0IExFTkdUSF9DT0RFUyQxICA9IDI5O1xuLyogbnVtYmVyIG9mIGxlbmd0aCBjb2Rlcywgbm90IGNvdW50aW5nIHRoZSBzcGVjaWFsIEVORF9CTE9DSyBjb2RlICovXG5cbmNvbnN0IExJVEVSQUxTJDEgICAgICA9IDI1Njtcbi8qIG51bWJlciBvZiBsaXRlcmFsIGJ5dGVzIDAuLjI1NSAqL1xuXG5jb25zdCBMX0NPREVTJDEgICAgICAgPSBMSVRFUkFMUyQxICsgMSArIExFTkdUSF9DT0RFUyQxO1xuLyogbnVtYmVyIG9mIExpdGVyYWwgb3IgTGVuZ3RoIGNvZGVzLCBpbmNsdWRpbmcgdGhlIEVORF9CTE9DSyBjb2RlICovXG5cbmNvbnN0IERfQ09ERVMkMSAgICAgICA9IDMwO1xuLyogbnVtYmVyIG9mIGRpc3RhbmNlIGNvZGVzICovXG5cbmNvbnN0IEJMX0NPREVTJDEgICAgICA9IDE5O1xuLyogbnVtYmVyIG9mIGNvZGVzIHVzZWQgdG8gdHJhbnNmZXIgdGhlIGJpdCBsZW5ndGhzICovXG5cbmNvbnN0IEhFQVBfU0laRSQxICAgICA9IDIgKiBMX0NPREVTJDEgKyAxO1xuLyogbWF4aW11bSBoZWFwIHNpemUgKi9cblxuY29uc3QgTUFYX0JJVFMkMSAgICAgID0gMTU7XG4vKiBBbGwgY29kZXMgbXVzdCBub3QgZXhjZWVkIE1BWF9CSVRTIGJpdHMgKi9cblxuY29uc3QgQnVmX3NpemUgICAgICA9IDE2O1xuLyogc2l6ZSBvZiBiaXQgYnVmZmVyIGluIGJpX2J1ZiAqL1xuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTUFYX0JMX0JJVFMgPSA3O1xuLyogQml0IGxlbmd0aCBjb2RlcyBtdXN0IG5vdCBleGNlZWQgTUFYX0JMX0JJVFMgYml0cyAqL1xuXG5jb25zdCBFTkRfQkxPQ0sgICA9IDI1Njtcbi8qIGVuZCBvZiBibG9jayBsaXRlcmFsIGNvZGUgKi9cblxuY29uc3QgUkVQXzNfNiAgICAgPSAxNjtcbi8qIHJlcGVhdCBwcmV2aW91cyBiaXQgbGVuZ3RoIDMtNiB0aW1lcyAoMiBiaXRzIG9mIHJlcGVhdCBjb3VudCkgKi9cblxuY29uc3QgUkVQWl8zXzEwICAgPSAxNztcbi8qIHJlcGVhdCBhIHplcm8gbGVuZ3RoIDMtMTAgdGltZXMgICgzIGJpdHMgb2YgcmVwZWF0IGNvdW50KSAqL1xuXG5jb25zdCBSRVBaXzExXzEzOCA9IDE4O1xuLyogcmVwZWF0IGEgemVybyBsZW5ndGggMTEtMTM4IHRpbWVzICAoNyBiaXRzIG9mIHJlcGVhdCBjb3VudCkgKi9cblxuLyogZXNsaW50LWRpc2FibGUgY29tbWEtc3BhY2luZyxhcnJheS1icmFja2V0LXNwYWNpbmcgKi9cbmNvbnN0IGV4dHJhX2xiaXRzID0gICAvKiBleHRyYSBiaXRzIGZvciBlYWNoIGxlbmd0aCBjb2RlICovXG4gIG5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDBdKTtcblxuY29uc3QgZXh0cmFfZGJpdHMgPSAgIC8qIGV4dHJhIGJpdHMgZm9yIGVhY2ggZGlzdGFuY2UgY29kZSAqL1xuICBuZXcgVWludDhBcnJheShbMCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxM10pO1xuXG5jb25zdCBleHRyYV9ibGJpdHMgPSAgLyogZXh0cmEgYml0cyBmb3IgZWFjaCBiaXQgbGVuZ3RoIGNvZGUgKi9cbiAgbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDddKTtcblxuY29uc3QgYmxfb3JkZXIgPVxuICBuZXcgVWludDhBcnJheShbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pO1xuLyogZXNsaW50LWVuYWJsZSBjb21tYS1zcGFjaW5nLGFycmF5LWJyYWNrZXQtc3BhY2luZyAqL1xuXG4vKiBUaGUgbGVuZ3RocyBvZiB0aGUgYml0IGxlbmd0aCBjb2RlcyBhcmUgc2VudCBpbiBvcmRlciBvZiBkZWNyZWFzaW5nXG4gKiBwcm9iYWJpbGl0eSwgdG8gYXZvaWQgdHJhbnNtaXR0aW5nIHRoZSBsZW5ndGhzIGZvciB1bnVzZWQgYml0IGxlbmd0aCBjb2Rlcy5cbiAqL1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIExvY2FsIGRhdGEuIFRoZXNlIGFyZSBpbml0aWFsaXplZCBvbmx5IG9uY2UuXG4gKi9cblxuLy8gV2UgcHJlLWZpbGwgYXJyYXlzIHdpdGggMCB0byBhdm9pZCB1bmluaXRpYWxpemVkIGdhcHNcblxuY29uc3QgRElTVF9DT0RFX0xFTiA9IDUxMjsgLyogc2VlIGRlZmluaXRpb24gb2YgYXJyYXkgZGlzdF9jb2RlIGJlbG93ICovXG5cbi8vICEhISEgVXNlIGZsYXQgYXJyYXkgaW5zdGVhZCBvZiBzdHJ1Y3R1cmUsIEZyZXEgPSBpKjIsIExlbiA9IGkqMisxXG5jb25zdCBzdGF0aWNfbHRyZWUgID0gbmV3IEFycmF5KChMX0NPREVTJDEgKyAyKSAqIDIpO1xuemVybyQxKHN0YXRpY19sdHJlZSk7XG4vKiBUaGUgc3RhdGljIGxpdGVyYWwgdHJlZS4gU2luY2UgdGhlIGJpdCBsZW5ndGhzIGFyZSBpbXBvc2VkLCB0aGVyZSBpcyBub1xuICogbmVlZCBmb3IgdGhlIExfQ09ERVMgZXh0cmEgY29kZXMgdXNlZCBkdXJpbmcgaGVhcCBjb25zdHJ1Y3Rpb24uIEhvd2V2ZXJcbiAqIFRoZSBjb2RlcyAyODYgYW5kIDI4NyBhcmUgbmVlZGVkIHRvIGJ1aWxkIGEgY2Fub25pY2FsIHRyZWUgKHNlZSBfdHJfaW5pdFxuICogYmVsb3cpLlxuICovXG5cbmNvbnN0IHN0YXRpY19kdHJlZSAgPSBuZXcgQXJyYXkoRF9DT0RFUyQxICogMik7XG56ZXJvJDEoc3RhdGljX2R0cmVlKTtcbi8qIFRoZSBzdGF0aWMgZGlzdGFuY2UgdHJlZS4gKEFjdHVhbGx5IGEgdHJpdmlhbCB0cmVlIHNpbmNlIGFsbCBjb2RlcyB1c2VcbiAqIDUgYml0cy4pXG4gKi9cblxuY29uc3QgX2Rpc3RfY29kZSAgICA9IG5ldyBBcnJheShESVNUX0NPREVfTEVOKTtcbnplcm8kMShfZGlzdF9jb2RlKTtcbi8qIERpc3RhbmNlIGNvZGVzLiBUaGUgZmlyc3QgMjU2IHZhbHVlcyBjb3JyZXNwb25kIHRvIHRoZSBkaXN0YW5jZXNcbiAqIDMgLi4gMjU4LCB0aGUgbGFzdCAyNTYgdmFsdWVzIGNvcnJlc3BvbmQgdG8gdGhlIHRvcCA4IGJpdHMgb2ZcbiAqIHRoZSAxNSBiaXQgZGlzdGFuY2VzLlxuICovXG5cbmNvbnN0IF9sZW5ndGhfY29kZSAgPSBuZXcgQXJyYXkoTUFYX01BVENIJDEgLSBNSU5fTUFUQ0gkMSArIDEpO1xuemVybyQxKF9sZW5ndGhfY29kZSk7XG4vKiBsZW5ndGggY29kZSBmb3IgZWFjaCBub3JtYWxpemVkIG1hdGNoIGxlbmd0aCAoMCA9PSBNSU5fTUFUQ0gpICovXG5cbmNvbnN0IGJhc2VfbGVuZ3RoICAgPSBuZXcgQXJyYXkoTEVOR1RIX0NPREVTJDEpO1xuemVybyQxKGJhc2VfbGVuZ3RoKTtcbi8qIEZpcnN0IG5vcm1hbGl6ZWQgbGVuZ3RoIGZvciBlYWNoIGNvZGUgKDAgPSBNSU5fTUFUQ0gpICovXG5cbmNvbnN0IGJhc2VfZGlzdCAgICAgPSBuZXcgQXJyYXkoRF9DT0RFUyQxKTtcbnplcm8kMShiYXNlX2Rpc3QpO1xuLyogRmlyc3Qgbm9ybWFsaXplZCBkaXN0YW5jZSBmb3IgZWFjaCBjb2RlICgwID0gZGlzdGFuY2Ugb2YgMSkgKi9cblxuXG5mdW5jdGlvbiBTdGF0aWNUcmVlRGVzYyhzdGF0aWNfdHJlZSwgZXh0cmFfYml0cywgZXh0cmFfYmFzZSwgZWxlbXMsIG1heF9sZW5ndGgpIHtcblxuICB0aGlzLnN0YXRpY190cmVlICA9IHN0YXRpY190cmVlOyAgLyogc3RhdGljIHRyZWUgb3IgTlVMTCAqL1xuICB0aGlzLmV4dHJhX2JpdHMgICA9IGV4dHJhX2JpdHM7ICAgLyogZXh0cmEgYml0cyBmb3IgZWFjaCBjb2RlIG9yIE5VTEwgKi9cbiAgdGhpcy5leHRyYV9iYXNlICAgPSBleHRyYV9iYXNlOyAgIC8qIGJhc2UgaW5kZXggZm9yIGV4dHJhX2JpdHMgKi9cbiAgdGhpcy5lbGVtcyAgICAgICAgPSBlbGVtczsgICAgICAgIC8qIG1heCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHRyZWUgKi9cbiAgdGhpcy5tYXhfbGVuZ3RoICAgPSBtYXhfbGVuZ3RoOyAgIC8qIG1heCBiaXQgbGVuZ3RoIGZvciB0aGUgY29kZXMgKi9cblxuICAvLyBzaG93IGlmIGBzdGF0aWNfdHJlZWAgaGFzIGRhdGEgb3IgZHVtbXkgLSBuZWVkZWQgZm9yIG1vbm9tb3JwaGljIG9iamVjdHNcbiAgdGhpcy5oYXNfc3RyZWUgICAgPSBzdGF0aWNfdHJlZSAmJiBzdGF0aWNfdHJlZS5sZW5ndGg7XG59XG5cblxubGV0IHN0YXRpY19sX2Rlc2M7XG5sZXQgc3RhdGljX2RfZGVzYztcbmxldCBzdGF0aWNfYmxfZGVzYztcblxuXG5mdW5jdGlvbiBUcmVlRGVzYyhkeW5fdHJlZSwgc3RhdF9kZXNjKSB7XG4gIHRoaXMuZHluX3RyZWUgPSBkeW5fdHJlZTsgICAgIC8qIHRoZSBkeW5hbWljIHRyZWUgKi9cbiAgdGhpcy5tYXhfY29kZSA9IDA7ICAgICAgICAgICAgLyogbGFyZ2VzdCBjb2RlIHdpdGggbm9uIHplcm8gZnJlcXVlbmN5ICovXG4gIHRoaXMuc3RhdF9kZXNjID0gc3RhdF9kZXNjOyAgIC8qIHRoZSBjb3JyZXNwb25kaW5nIHN0YXRpYyB0cmVlICovXG59XG5cblxuXG5jb25zdCBkX2NvZGUgPSAoZGlzdCkgPT4ge1xuXG4gIHJldHVybiBkaXN0IDwgMjU2ID8gX2Rpc3RfY29kZVtkaXN0XSA6IF9kaXN0X2NvZGVbMjU2ICsgKGRpc3QgPj4+IDcpXTtcbn07XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBPdXRwdXQgYSBzaG9ydCBMU0IgZmlyc3Qgb24gdGhlIHN0cmVhbS5cbiAqIElOIGFzc2VydGlvbjogdGhlcmUgaXMgZW5vdWdoIHJvb20gaW4gcGVuZGluZ0J1Zi5cbiAqL1xuY29uc3QgcHV0X3Nob3J0ID0gKHMsIHcpID0+IHtcbi8vICAgIHB1dF9ieXRlKHMsICh1Y2gpKCh3KSAmIDB4ZmYpKTtcbi8vICAgIHB1dF9ieXRlKHMsICh1Y2gpKCh1c2gpKHcpID4+IDgpKTtcbiAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSAodykgJiAweGZmO1xuICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9ICh3ID4+PiA4KSAmIDB4ZmY7XG59O1xuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2VuZCBhIHZhbHVlIG9uIGEgZ2l2ZW4gbnVtYmVyIG9mIGJpdHMuXG4gKiBJTiBhc3NlcnRpb246IGxlbmd0aCA8PSAxNiBhbmQgdmFsdWUgZml0cyBpbiBsZW5ndGggYml0cy5cbiAqL1xuY29uc3Qgc2VuZF9iaXRzID0gKHMsIHZhbHVlLCBsZW5ndGgpID0+IHtcblxuICBpZiAocy5iaV92YWxpZCA+IChCdWZfc2l6ZSAtIGxlbmd0aCkpIHtcbiAgICBzLmJpX2J1ZiB8PSAodmFsdWUgPDwgcy5iaV92YWxpZCkgJiAweGZmZmY7XG4gICAgcHV0X3Nob3J0KHMsIHMuYmlfYnVmKTtcbiAgICBzLmJpX2J1ZiA9IHZhbHVlID4+IChCdWZfc2l6ZSAtIHMuYmlfdmFsaWQpO1xuICAgIHMuYmlfdmFsaWQgKz0gbGVuZ3RoIC0gQnVmX3NpemU7XG4gIH0gZWxzZSB7XG4gICAgcy5iaV9idWYgfD0gKHZhbHVlIDw8IHMuYmlfdmFsaWQpICYgMHhmZmZmO1xuICAgIHMuYmlfdmFsaWQgKz0gbGVuZ3RoO1xuICB9XG59O1xuXG5cbmNvbnN0IHNlbmRfY29kZSA9IChzLCBjLCB0cmVlKSA9PiB7XG5cbiAgc2VuZF9iaXRzKHMsIHRyZWVbYyAqIDJdLyouQ29kZSovLCB0cmVlW2MgKiAyICsgMV0vKi5MZW4qLyk7XG59O1xuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogUmV2ZXJzZSB0aGUgZmlyc3QgbGVuIGJpdHMgb2YgYSBjb2RlLCB1c2luZyBzdHJhaWdodGZvcndhcmQgY29kZSAoYSBmYXN0ZXJcbiAqIG1ldGhvZCB3b3VsZCB1c2UgYSB0YWJsZSlcbiAqIElOIGFzc2VydGlvbjogMSA8PSBsZW4gPD0gMTVcbiAqL1xuY29uc3QgYmlfcmV2ZXJzZSA9IChjb2RlLCBsZW4pID0+IHtcblxuICBsZXQgcmVzID0gMDtcbiAgZG8ge1xuICAgIHJlcyB8PSBjb2RlICYgMTtcbiAgICBjb2RlID4+Pj0gMTtcbiAgICByZXMgPDw9IDE7XG4gIH0gd2hpbGUgKC0tbGVuID4gMCk7XG4gIHJldHVybiByZXMgPj4+IDE7XG59O1xuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogRmx1c2ggdGhlIGJpdCBidWZmZXIsIGtlZXBpbmcgYXQgbW9zdCA3IGJpdHMgaW4gaXQuXG4gKi9cbmNvbnN0IGJpX2ZsdXNoID0gKHMpID0+IHtcblxuICBpZiAocy5iaV92YWxpZCA9PT0gMTYpIHtcbiAgICBwdXRfc2hvcnQocywgcy5iaV9idWYpO1xuICAgIHMuYmlfYnVmID0gMDtcbiAgICBzLmJpX3ZhbGlkID0gMDtcblxuICB9IGVsc2UgaWYgKHMuYmlfdmFsaWQgPj0gOCkge1xuICAgIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gcy5iaV9idWYgJiAweGZmO1xuICAgIHMuYmlfYnVmID4+PSA4O1xuICAgIHMuYmlfdmFsaWQgLT0gODtcbiAgfVxufTtcblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvbXB1dGUgdGhlIG9wdGltYWwgYml0IGxlbmd0aHMgZm9yIGEgdHJlZSBhbmQgdXBkYXRlIHRoZSB0b3RhbCBiaXQgbGVuZ3RoXG4gKiBmb3IgdGhlIGN1cnJlbnQgYmxvY2suXG4gKiBJTiBhc3NlcnRpb246IHRoZSBmaWVsZHMgZnJlcSBhbmQgZGFkIGFyZSBzZXQsIGhlYXBbaGVhcF9tYXhdIGFuZFxuICogICAgYWJvdmUgYXJlIHRoZSB0cmVlIG5vZGVzIHNvcnRlZCBieSBpbmNyZWFzaW5nIGZyZXF1ZW5jeS5cbiAqIE9VVCBhc3NlcnRpb25zOiB0aGUgZmllbGQgbGVuIGlzIHNldCB0byB0aGUgb3B0aW1hbCBiaXQgbGVuZ3RoLCB0aGVcbiAqICAgICBhcnJheSBibF9jb3VudCBjb250YWlucyB0aGUgZnJlcXVlbmNpZXMgZm9yIGVhY2ggYml0IGxlbmd0aC5cbiAqICAgICBUaGUgbGVuZ3RoIG9wdF9sZW4gaXMgdXBkYXRlZDsgc3RhdGljX2xlbiBpcyBhbHNvIHVwZGF0ZWQgaWYgc3RyZWUgaXNcbiAqICAgICBub3QgbnVsbC5cbiAqL1xuY29uc3QgZ2VuX2JpdGxlbiA9IChzLCBkZXNjKSA9PiB7XG4vLyAgICBkZWZsYXRlX3N0YXRlICpzO1xuLy8gICAgdHJlZV9kZXNjICpkZXNjOyAgICAvKiB0aGUgdHJlZSBkZXNjcmlwdG9yICovXG5cbiAgY29uc3QgdHJlZSAgICAgICAgICAgID0gZGVzYy5keW5fdHJlZTtcbiAgY29uc3QgbWF4X2NvZGUgICAgICAgID0gZGVzYy5tYXhfY29kZTtcbiAgY29uc3Qgc3RyZWUgICAgICAgICAgID0gZGVzYy5zdGF0X2Rlc2Muc3RhdGljX3RyZWU7XG4gIGNvbnN0IGhhc19zdHJlZSAgICAgICA9IGRlc2Muc3RhdF9kZXNjLmhhc19zdHJlZTtcbiAgY29uc3QgZXh0cmEgICAgICAgICAgID0gZGVzYy5zdGF0X2Rlc2MuZXh0cmFfYml0cztcbiAgY29uc3QgYmFzZSAgICAgICAgICAgID0gZGVzYy5zdGF0X2Rlc2MuZXh0cmFfYmFzZTtcbiAgY29uc3QgbWF4X2xlbmd0aCAgICAgID0gZGVzYy5zdGF0X2Rlc2MubWF4X2xlbmd0aDtcbiAgbGV0IGg7ICAgICAgICAgICAgICAvKiBoZWFwIGluZGV4ICovXG4gIGxldCBuLCBtOyAgICAgICAgICAgLyogaXRlcmF0ZSBvdmVyIHRoZSB0cmVlIGVsZW1lbnRzICovXG4gIGxldCBiaXRzOyAgICAgICAgICAgLyogYml0IGxlbmd0aCAqL1xuICBsZXQgeGJpdHM7ICAgICAgICAgIC8qIGV4dHJhIGJpdHMgKi9cbiAgbGV0IGY7ICAgICAgICAgICAgICAvKiBmcmVxdWVuY3kgKi9cbiAgbGV0IG92ZXJmbG93ID0gMDsgICAvKiBudW1iZXIgb2YgZWxlbWVudHMgd2l0aCBiaXQgbGVuZ3RoIHRvbyBsYXJnZSAqL1xuXG4gIGZvciAoYml0cyA9IDA7IGJpdHMgPD0gTUFYX0JJVFMkMTsgYml0cysrKSB7XG4gICAgcy5ibF9jb3VudFtiaXRzXSA9IDA7XG4gIH1cblxuICAvKiBJbiBhIGZpcnN0IHBhc3MsIGNvbXB1dGUgdGhlIG9wdGltYWwgYml0IGxlbmd0aHMgKHdoaWNoIG1heVxuICAgKiBvdmVyZmxvdyBpbiB0aGUgY2FzZSBvZiB0aGUgYml0IGxlbmd0aCB0cmVlKS5cbiAgICovXG4gIHRyZWVbcy5oZWFwW3MuaGVhcF9tYXhdICogMiArIDFdLyouTGVuKi8gPSAwOyAvKiByb290IG9mIHRoZSBoZWFwICovXG5cbiAgZm9yIChoID0gcy5oZWFwX21heCArIDE7IGggPCBIRUFQX1NJWkUkMTsgaCsrKSB7XG4gICAgbiA9IHMuaGVhcFtoXTtcbiAgICBiaXRzID0gdHJlZVt0cmVlW24gKiAyICsgMV0vKi5EYWQqLyAqIDIgKyAxXS8qLkxlbiovICsgMTtcbiAgICBpZiAoYml0cyA+IG1heF9sZW5ndGgpIHtcbiAgICAgIGJpdHMgPSBtYXhfbGVuZ3RoO1xuICAgICAgb3ZlcmZsb3crKztcbiAgICB9XG4gICAgdHJlZVtuICogMiArIDFdLyouTGVuKi8gPSBiaXRzO1xuICAgIC8qIFdlIG92ZXJ3cml0ZSB0cmVlW25dLkRhZCB3aGljaCBpcyBubyBsb25nZXIgbmVlZGVkICovXG5cbiAgICBpZiAobiA+IG1heF9jb2RlKSB7IGNvbnRpbnVlOyB9IC8qIG5vdCBhIGxlYWYgbm9kZSAqL1xuXG4gICAgcy5ibF9jb3VudFtiaXRzXSsrO1xuICAgIHhiaXRzID0gMDtcbiAgICBpZiAobiA+PSBiYXNlKSB7XG4gICAgICB4Yml0cyA9IGV4dHJhW24gLSBiYXNlXTtcbiAgICB9XG4gICAgZiA9IHRyZWVbbiAqIDJdLyouRnJlcSovO1xuICAgIHMub3B0X2xlbiArPSBmICogKGJpdHMgKyB4Yml0cyk7XG4gICAgaWYgKGhhc19zdHJlZSkge1xuICAgICAgcy5zdGF0aWNfbGVuICs9IGYgKiAoc3RyZWVbbiAqIDIgKyAxXS8qLkxlbiovICsgeGJpdHMpO1xuICAgIH1cbiAgfVxuICBpZiAob3ZlcmZsb3cgPT09IDApIHsgcmV0dXJuOyB9XG5cbiAgLy8gVHJhY2V2KChzdGRlcnIsXCJcXG5iaXQgbGVuZ3RoIG92ZXJmbG93XFxuXCIpKTtcbiAgLyogVGhpcyBoYXBwZW5zIGZvciBleGFtcGxlIG9uIG9iajIgYW5kIHBpYyBvZiB0aGUgQ2FsZ2FyeSBjb3JwdXMgKi9cblxuICAvKiBGaW5kIHRoZSBmaXJzdCBiaXQgbGVuZ3RoIHdoaWNoIGNvdWxkIGluY3JlYXNlOiAqL1xuICBkbyB7XG4gICAgYml0cyA9IG1heF9sZW5ndGggLSAxO1xuICAgIHdoaWxlIChzLmJsX2NvdW50W2JpdHNdID09PSAwKSB7IGJpdHMtLTsgfVxuICAgIHMuYmxfY291bnRbYml0c10tLTsgICAgICAvKiBtb3ZlIG9uZSBsZWFmIGRvd24gdGhlIHRyZWUgKi9cbiAgICBzLmJsX2NvdW50W2JpdHMgKyAxXSArPSAyOyAvKiBtb3ZlIG9uZSBvdmVyZmxvdyBpdGVtIGFzIGl0cyBicm90aGVyICovXG4gICAgcy5ibF9jb3VudFttYXhfbGVuZ3RoXS0tO1xuICAgIC8qIFRoZSBicm90aGVyIG9mIHRoZSBvdmVyZmxvdyBpdGVtIGFsc28gbW92ZXMgb25lIHN0ZXAgdXAsXG4gICAgICogYnV0IHRoaXMgZG9lcyBub3QgYWZmZWN0IGJsX2NvdW50W21heF9sZW5ndGhdXG4gICAgICovXG4gICAgb3ZlcmZsb3cgLT0gMjtcbiAgfSB3aGlsZSAob3ZlcmZsb3cgPiAwKTtcblxuICAvKiBOb3cgcmVjb21wdXRlIGFsbCBiaXQgbGVuZ3Rocywgc2Nhbm5pbmcgaW4gaW5jcmVhc2luZyBmcmVxdWVuY3kuXG4gICAqIGggaXMgc3RpbGwgZXF1YWwgdG8gSEVBUF9TSVpFLiAoSXQgaXMgc2ltcGxlciB0byByZWNvbnN0cnVjdCBhbGxcbiAgICogbGVuZ3RocyBpbnN0ZWFkIG9mIGZpeGluZyBvbmx5IHRoZSB3cm9uZyBvbmVzLiBUaGlzIGlkZWEgaXMgdGFrZW5cbiAgICogZnJvbSAnYXInIHdyaXR0ZW4gYnkgSGFydWhpa28gT2t1bXVyYS4pXG4gICAqL1xuICBmb3IgKGJpdHMgPSBtYXhfbGVuZ3RoOyBiaXRzICE9PSAwOyBiaXRzLS0pIHtcbiAgICBuID0gcy5ibF9jb3VudFtiaXRzXTtcbiAgICB3aGlsZSAobiAhPT0gMCkge1xuICAgICAgbSA9IHMuaGVhcFstLWhdO1xuICAgICAgaWYgKG0gPiBtYXhfY29kZSkgeyBjb250aW51ZTsgfVxuICAgICAgaWYgKHRyZWVbbSAqIDIgKyAxXS8qLkxlbiovICE9PSBiaXRzKSB7XG4gICAgICAgIC8vIFRyYWNldigoc3RkZXJyLFwiY29kZSAlZCBiaXRzICVkLT4lZFxcblwiLCBtLCB0cmVlW21dLkxlbiwgYml0cykpO1xuICAgICAgICBzLm9wdF9sZW4gKz0gKGJpdHMgLSB0cmVlW20gKiAyICsgMV0vKi5MZW4qLykgKiB0cmVlW20gKiAyXS8qLkZyZXEqLztcbiAgICAgICAgdHJlZVttICogMiArIDFdLyouTGVuKi8gPSBiaXRzO1xuICAgICAgfVxuICAgICAgbi0tO1xuICAgIH1cbiAgfVxufTtcblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEdlbmVyYXRlIHRoZSBjb2RlcyBmb3IgYSBnaXZlbiB0cmVlIGFuZCBiaXQgY291bnRzICh3aGljaCBuZWVkIG5vdCBiZVxuICogb3B0aW1hbCkuXG4gKiBJTiBhc3NlcnRpb246IHRoZSBhcnJheSBibF9jb3VudCBjb250YWlucyB0aGUgYml0IGxlbmd0aCBzdGF0aXN0aWNzIGZvclxuICogdGhlIGdpdmVuIHRyZWUgYW5kIHRoZSBmaWVsZCBsZW4gaXMgc2V0IGZvciBhbGwgdHJlZSBlbGVtZW50cy5cbiAqIE9VVCBhc3NlcnRpb246IHRoZSBmaWVsZCBjb2RlIGlzIHNldCBmb3IgYWxsIHRyZWUgZWxlbWVudHMgb2Ygbm9uXG4gKiAgICAgemVybyBjb2RlIGxlbmd0aC5cbiAqL1xuY29uc3QgZ2VuX2NvZGVzID0gKHRyZWUsIG1heF9jb2RlLCBibF9jb3VudCkgPT4ge1xuLy8gICAgY3RfZGF0YSAqdHJlZTsgICAgICAgICAgICAgLyogdGhlIHRyZWUgdG8gZGVjb3JhdGUgKi9cbi8vICAgIGludCBtYXhfY29kZTsgICAgICAgICAgICAgIC8qIGxhcmdlc3QgY29kZSB3aXRoIG5vbiB6ZXJvIGZyZXF1ZW5jeSAqL1xuLy8gICAgdXNoZiAqYmxfY291bnQ7ICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvZGVzIGF0IGVhY2ggYml0IGxlbmd0aCAqL1xuXG4gIGNvbnN0IG5leHRfY29kZSA9IG5ldyBBcnJheShNQVhfQklUUyQxICsgMSk7IC8qIG5leHQgY29kZSB2YWx1ZSBmb3IgZWFjaCBiaXQgbGVuZ3RoICovXG4gIGxldCBjb2RlID0gMDsgICAgICAgICAgICAgIC8qIHJ1bm5pbmcgY29kZSB2YWx1ZSAqL1xuICBsZXQgYml0czsgICAgICAgICAgICAgICAgICAvKiBiaXQgaW5kZXggKi9cbiAgbGV0IG47ICAgICAgICAgICAgICAgICAgICAgLyogY29kZSBpbmRleCAqL1xuXG4gIC8qIFRoZSBkaXN0cmlidXRpb24gY291bnRzIGFyZSBmaXJzdCB1c2VkIHRvIGdlbmVyYXRlIHRoZSBjb2RlIHZhbHVlc1xuICAgKiB3aXRob3V0IGJpdCByZXZlcnNhbC5cbiAgICovXG4gIGZvciAoYml0cyA9IDE7IGJpdHMgPD0gTUFYX0JJVFMkMTsgYml0cysrKSB7XG4gICAgY29kZSA9IChjb2RlICsgYmxfY291bnRbYml0cyAtIDFdKSA8PCAxO1xuICAgIG5leHRfY29kZVtiaXRzXSA9IGNvZGU7XG4gIH1cbiAgLyogQ2hlY2sgdGhhdCB0aGUgYml0IGNvdW50cyBpbiBibF9jb3VudCBhcmUgY29uc2lzdGVudC4gVGhlIGxhc3QgY29kZVxuICAgKiBtdXN0IGJlIGFsbCBvbmVzLlxuICAgKi9cbiAgLy9Bc3NlcnQgKGNvZGUgKyBibF9jb3VudFtNQVhfQklUU10tMSA9PSAoMTw8TUFYX0JJVFMpLTEsXG4gIC8vICAgICAgICBcImluY29uc2lzdGVudCBiaXQgY291bnRzXCIpO1xuICAvL1RyYWNldigoc3RkZXJyLFwiXFxuZ2VuX2NvZGVzOiBtYXhfY29kZSAlZCBcIiwgbWF4X2NvZGUpKTtcblxuICBmb3IgKG4gPSAwOyAgbiA8PSBtYXhfY29kZTsgbisrKSB7XG4gICAgbGV0IGxlbiA9IHRyZWVbbiAqIDIgKyAxXS8qLkxlbiovO1xuICAgIGlmIChsZW4gPT09IDApIHsgY29udGludWU7IH1cbiAgICAvKiBOb3cgcmV2ZXJzZSB0aGUgYml0cyAqL1xuICAgIHRyZWVbbiAqIDJdLyouQ29kZSovID0gYmlfcmV2ZXJzZShuZXh0X2NvZGVbbGVuXSsrLCBsZW4pO1xuXG4gICAgLy9UcmFjZWN2KHRyZWUgIT0gc3RhdGljX2x0cmVlLCAoc3RkZXJyLFwiXFxubiAlM2QgJWMgbCAlMmQgYyAlNHggKCV4KSBcIixcbiAgICAvLyAgICAgbiwgKGlzZ3JhcGgobikgPyBuIDogJyAnKSwgbGVuLCB0cmVlW25dLkNvZGUsIG5leHRfY29kZVtsZW5dLTEpKTtcbiAgfVxufTtcblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEluaXRpYWxpemUgdGhlIHZhcmlvdXMgJ2NvbnN0YW50JyB0YWJsZXMuXG4gKi9cbmNvbnN0IHRyX3N0YXRpY19pbml0ID0gKCkgPT4ge1xuXG4gIGxldCBuOyAgICAgICAgLyogaXRlcmF0ZXMgb3ZlciB0cmVlIGVsZW1lbnRzICovXG4gIGxldCBiaXRzOyAgICAgLyogYml0IGNvdW50ZXIgKi9cbiAgbGV0IGxlbmd0aDsgICAvKiBsZW5ndGggdmFsdWUgKi9cbiAgbGV0IGNvZGU7ICAgICAvKiBjb2RlIHZhbHVlICovXG4gIGxldCBkaXN0OyAgICAgLyogZGlzdGFuY2UgaW5kZXggKi9cbiAgY29uc3QgYmxfY291bnQgPSBuZXcgQXJyYXkoTUFYX0JJVFMkMSArIDEpO1xuICAvKiBudW1iZXIgb2YgY29kZXMgYXQgZWFjaCBiaXQgbGVuZ3RoIGZvciBhbiBvcHRpbWFsIHRyZWUgKi9cblxuICAvLyBkbyBjaGVjayBpbiBfdHJfaW5pdCgpXG4gIC8vaWYgKHN0YXRpY19pbml0X2RvbmUpIHJldHVybjtcblxuICAvKiBGb3Igc29tZSBlbWJlZGRlZCB0YXJnZXRzLCBnbG9iYWwgdmFyaWFibGVzIGFyZSBub3QgaW5pdGlhbGl6ZWQ6ICovXG4vKiNpZmRlZiBOT19JTklUX0dMT0JBTF9QT0lOVEVSU1xuICBzdGF0aWNfbF9kZXNjLnN0YXRpY190cmVlID0gc3RhdGljX2x0cmVlO1xuICBzdGF0aWNfbF9kZXNjLmV4dHJhX2JpdHMgPSBleHRyYV9sYml0cztcbiAgc3RhdGljX2RfZGVzYy5zdGF0aWNfdHJlZSA9IHN0YXRpY19kdHJlZTtcbiAgc3RhdGljX2RfZGVzYy5leHRyYV9iaXRzID0gZXh0cmFfZGJpdHM7XG4gIHN0YXRpY19ibF9kZXNjLmV4dHJhX2JpdHMgPSBleHRyYV9ibGJpdHM7XG4jZW5kaWYqL1xuXG4gIC8qIEluaXRpYWxpemUgdGhlIG1hcHBpbmcgbGVuZ3RoICgwLi4yNTUpIC0+IGxlbmd0aCBjb2RlICgwLi4yOCkgKi9cbiAgbGVuZ3RoID0gMDtcbiAgZm9yIChjb2RlID0gMDsgY29kZSA8IExFTkdUSF9DT0RFUyQxIC0gMTsgY29kZSsrKSB7XG4gICAgYmFzZV9sZW5ndGhbY29kZV0gPSBsZW5ndGg7XG4gICAgZm9yIChuID0gMDsgbiA8ICgxIDw8IGV4dHJhX2xiaXRzW2NvZGVdKTsgbisrKSB7XG4gICAgICBfbGVuZ3RoX2NvZGVbbGVuZ3RoKytdID0gY29kZTtcbiAgICB9XG4gIH1cbiAgLy9Bc3NlcnQgKGxlbmd0aCA9PSAyNTYsIFwidHJfc3RhdGljX2luaXQ6IGxlbmd0aCAhPSAyNTZcIik7XG4gIC8qIE5vdGUgdGhhdCB0aGUgbGVuZ3RoIDI1NSAobWF0Y2ggbGVuZ3RoIDI1OCkgY2FuIGJlIHJlcHJlc2VudGVkXG4gICAqIGluIHR3byBkaWZmZXJlbnQgd2F5czogY29kZSAyODQgKyA1IGJpdHMgb3IgY29kZSAyODUsIHNvIHdlXG4gICAqIG92ZXJ3cml0ZSBsZW5ndGhfY29kZVsyNTVdIHRvIHVzZSB0aGUgYmVzdCBlbmNvZGluZzpcbiAgICovXG4gIF9sZW5ndGhfY29kZVtsZW5ndGggLSAxXSA9IGNvZGU7XG5cbiAgLyogSW5pdGlhbGl6ZSB0aGUgbWFwcGluZyBkaXN0ICgwLi4zMkspIC0+IGRpc3QgY29kZSAoMC4uMjkpICovXG4gIGRpc3QgPSAwO1xuICBmb3IgKGNvZGUgPSAwOyBjb2RlIDwgMTY7IGNvZGUrKykge1xuICAgIGJhc2VfZGlzdFtjb2RlXSA9IGRpc3Q7XG4gICAgZm9yIChuID0gMDsgbiA8ICgxIDw8IGV4dHJhX2RiaXRzW2NvZGVdKTsgbisrKSB7XG4gICAgICBfZGlzdF9jb2RlW2Rpc3QrK10gPSBjb2RlO1xuICAgIH1cbiAgfVxuICAvL0Fzc2VydCAoZGlzdCA9PSAyNTYsIFwidHJfc3RhdGljX2luaXQ6IGRpc3QgIT0gMjU2XCIpO1xuICBkaXN0ID4+PSA3OyAvKiBmcm9tIG5vdyBvbiwgYWxsIGRpc3RhbmNlcyBhcmUgZGl2aWRlZCBieSAxMjggKi9cbiAgZm9yICg7IGNvZGUgPCBEX0NPREVTJDE7IGNvZGUrKykge1xuICAgIGJhc2VfZGlzdFtjb2RlXSA9IGRpc3QgPDwgNztcbiAgICBmb3IgKG4gPSAwOyBuIDwgKDEgPDwgKGV4dHJhX2RiaXRzW2NvZGVdIC0gNykpOyBuKyspIHtcbiAgICAgIF9kaXN0X2NvZGVbMjU2ICsgZGlzdCsrXSA9IGNvZGU7XG4gICAgfVxuICB9XG4gIC8vQXNzZXJ0IChkaXN0ID09IDI1NiwgXCJ0cl9zdGF0aWNfaW5pdDogMjU2K2Rpc3QgIT0gNTEyXCIpO1xuXG4gIC8qIENvbnN0cnVjdCB0aGUgY29kZXMgb2YgdGhlIHN0YXRpYyBsaXRlcmFsIHRyZWUgKi9cbiAgZm9yIChiaXRzID0gMDsgYml0cyA8PSBNQVhfQklUUyQxOyBiaXRzKyspIHtcbiAgICBibF9jb3VudFtiaXRzXSA9IDA7XG4gIH1cblxuICBuID0gMDtcbiAgd2hpbGUgKG4gPD0gMTQzKSB7XG4gICAgc3RhdGljX2x0cmVlW24gKiAyICsgMV0vKi5MZW4qLyA9IDg7XG4gICAgbisrO1xuICAgIGJsX2NvdW50WzhdKys7XG4gIH1cbiAgd2hpbGUgKG4gPD0gMjU1KSB7XG4gICAgc3RhdGljX2x0cmVlW24gKiAyICsgMV0vKi5MZW4qLyA9IDk7XG4gICAgbisrO1xuICAgIGJsX2NvdW50WzldKys7XG4gIH1cbiAgd2hpbGUgKG4gPD0gMjc5KSB7XG4gICAgc3RhdGljX2x0cmVlW24gKiAyICsgMV0vKi5MZW4qLyA9IDc7XG4gICAgbisrO1xuICAgIGJsX2NvdW50WzddKys7XG4gIH1cbiAgd2hpbGUgKG4gPD0gMjg3KSB7XG4gICAgc3RhdGljX2x0cmVlW24gKiAyICsgMV0vKi5MZW4qLyA9IDg7XG4gICAgbisrO1xuICAgIGJsX2NvdW50WzhdKys7XG4gIH1cbiAgLyogQ29kZXMgMjg2IGFuZCAyODcgZG8gbm90IGV4aXN0LCBidXQgd2UgbXVzdCBpbmNsdWRlIHRoZW0gaW4gdGhlXG4gICAqIHRyZWUgY29uc3RydWN0aW9uIHRvIGdldCBhIGNhbm9uaWNhbCBIdWZmbWFuIHRyZWUgKGxvbmdlc3QgY29kZVxuICAgKiBhbGwgb25lcylcbiAgICovXG4gIGdlbl9jb2RlcyhzdGF0aWNfbHRyZWUsIExfQ09ERVMkMSArIDEsIGJsX2NvdW50KTtcblxuICAvKiBUaGUgc3RhdGljIGRpc3RhbmNlIHRyZWUgaXMgdHJpdmlhbDogKi9cbiAgZm9yIChuID0gMDsgbiA8IERfQ09ERVMkMTsgbisrKSB7XG4gICAgc3RhdGljX2R0cmVlW24gKiAyICsgMV0vKi5MZW4qLyA9IDU7XG4gICAgc3RhdGljX2R0cmVlW24gKiAyXS8qLkNvZGUqLyA9IGJpX3JldmVyc2UobiwgNSk7XG4gIH1cblxuICAvLyBOb3cgZGF0YSByZWFkeSBhbmQgd2UgY2FuIGluaXQgc3RhdGljIHRyZWVzXG4gIHN0YXRpY19sX2Rlc2MgPSBuZXcgU3RhdGljVHJlZURlc2Moc3RhdGljX2x0cmVlLCBleHRyYV9sYml0cywgTElURVJBTFMkMSArIDEsIExfQ09ERVMkMSwgTUFYX0JJVFMkMSk7XG4gIHN0YXRpY19kX2Rlc2MgPSBuZXcgU3RhdGljVHJlZURlc2Moc3RhdGljX2R0cmVlLCBleHRyYV9kYml0cywgMCwgICAgICAgICAgRF9DT0RFUyQxLCBNQVhfQklUUyQxKTtcbiAgc3RhdGljX2JsX2Rlc2MgPSBuZXcgU3RhdGljVHJlZURlc2MobmV3IEFycmF5KDApLCBleHRyYV9ibGJpdHMsIDAsICAgICAgICAgQkxfQ09ERVMkMSwgTUFYX0JMX0JJVFMpO1xuXG4gIC8vc3RhdGljX2luaXRfZG9uZSA9IHRydWU7XG59O1xuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogSW5pdGlhbGl6ZSBhIG5ldyBibG9jay5cbiAqL1xuY29uc3QgaW5pdF9ibG9jayA9IChzKSA9PiB7XG5cbiAgbGV0IG47IC8qIGl0ZXJhdGVzIG92ZXIgdHJlZSBlbGVtZW50cyAqL1xuXG4gIC8qIEluaXRpYWxpemUgdGhlIHRyZWVzLiAqL1xuICBmb3IgKG4gPSAwOyBuIDwgTF9DT0RFUyQxOyAgbisrKSB7IHMuZHluX2x0cmVlW24gKiAyXS8qLkZyZXEqLyA9IDA7IH1cbiAgZm9yIChuID0gMDsgbiA8IERfQ09ERVMkMTsgIG4rKykgeyBzLmR5bl9kdHJlZVtuICogMl0vKi5GcmVxKi8gPSAwOyB9XG4gIGZvciAobiA9IDA7IG4gPCBCTF9DT0RFUyQxOyBuKyspIHsgcy5ibF90cmVlW24gKiAyXS8qLkZyZXEqLyA9IDA7IH1cblxuICBzLmR5bl9sdHJlZVtFTkRfQkxPQ0sgKiAyXS8qLkZyZXEqLyA9IDE7XG4gIHMub3B0X2xlbiA9IHMuc3RhdGljX2xlbiA9IDA7XG4gIHMuc3ltX25leHQgPSBzLm1hdGNoZXMgPSAwO1xufTtcblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEZsdXNoIHRoZSBiaXQgYnVmZmVyIGFuZCBhbGlnbiB0aGUgb3V0cHV0IG9uIGEgYnl0ZSBib3VuZGFyeVxuICovXG5jb25zdCBiaV93aW5kdXAgPSAocykgPT5cbntcbiAgaWYgKHMuYmlfdmFsaWQgPiA4KSB7XG4gICAgcHV0X3Nob3J0KHMsIHMuYmlfYnVmKTtcbiAgfSBlbHNlIGlmIChzLmJpX3ZhbGlkID4gMCkge1xuICAgIC8vcHV0X2J5dGUocywgKEJ5dGUpcy0+YmlfYnVmKTtcbiAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IHMuYmlfYnVmO1xuICB9XG4gIHMuYmlfYnVmID0gMDtcbiAgcy5iaV92YWxpZCA9IDA7XG59O1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvbXBhcmVzIHRvIHN1YnRyZWVzLCB1c2luZyB0aGUgdHJlZSBkZXB0aCBhcyB0aWUgYnJlYWtlciB3aGVuXG4gKiB0aGUgc3VidHJlZXMgaGF2ZSBlcXVhbCBmcmVxdWVuY3kuIFRoaXMgbWluaW1pemVzIHRoZSB3b3JzdCBjYXNlIGxlbmd0aC5cbiAqL1xuY29uc3Qgc21hbGxlciA9ICh0cmVlLCBuLCBtLCBkZXB0aCkgPT4ge1xuXG4gIGNvbnN0IF9uMiA9IG4gKiAyO1xuICBjb25zdCBfbTIgPSBtICogMjtcbiAgcmV0dXJuICh0cmVlW19uMl0vKi5GcmVxKi8gPCB0cmVlW19tMl0vKi5GcmVxKi8gfHxcbiAgICAgICAgICh0cmVlW19uMl0vKi5GcmVxKi8gPT09IHRyZWVbX20yXS8qLkZyZXEqLyAmJiBkZXB0aFtuXSA8PSBkZXB0aFttXSkpO1xufTtcblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBSZXN0b3JlIHRoZSBoZWFwIHByb3BlcnR5IGJ5IG1vdmluZyBkb3duIHRoZSB0cmVlIHN0YXJ0aW5nIGF0IG5vZGUgayxcbiAqIGV4Y2hhbmdpbmcgYSBub2RlIHdpdGggdGhlIHNtYWxsZXN0IG9mIGl0cyB0d28gc29ucyBpZiBuZWNlc3NhcnksIHN0b3BwaW5nXG4gKiB3aGVuIHRoZSBoZWFwIHByb3BlcnR5IGlzIHJlLWVzdGFibGlzaGVkIChlYWNoIGZhdGhlciBzbWFsbGVyIHRoYW4gaXRzXG4gKiB0d28gc29ucykuXG4gKi9cbmNvbnN0IHBxZG93bmhlYXAgPSAocywgdHJlZSwgaykgPT4ge1xuLy8gICAgZGVmbGF0ZV9zdGF0ZSAqcztcbi8vICAgIGN0X2RhdGEgKnRyZWU7ICAvKiB0aGUgdHJlZSB0byByZXN0b3JlICovXG4vLyAgICBpbnQgazsgICAgICAgICAgICAgICAvKiBub2RlIHRvIG1vdmUgZG93biAqL1xuXG4gIGNvbnN0IHYgPSBzLmhlYXBba107XG4gIGxldCBqID0gayA8PCAxOyAgLyogbGVmdCBzb24gb2YgayAqL1xuICB3aGlsZSAoaiA8PSBzLmhlYXBfbGVuKSB7XG4gICAgLyogU2V0IGogdG8gdGhlIHNtYWxsZXN0IG9mIHRoZSB0d28gc29uczogKi9cbiAgICBpZiAoaiA8IHMuaGVhcF9sZW4gJiZcbiAgICAgIHNtYWxsZXIodHJlZSwgcy5oZWFwW2ogKyAxXSwgcy5oZWFwW2pdLCBzLmRlcHRoKSkge1xuICAgICAgaisrO1xuICAgIH1cbiAgICAvKiBFeGl0IGlmIHYgaXMgc21hbGxlciB0aGFuIGJvdGggc29ucyAqL1xuICAgIGlmIChzbWFsbGVyKHRyZWUsIHYsIHMuaGVhcFtqXSwgcy5kZXB0aCkpIHsgYnJlYWs7IH1cblxuICAgIC8qIEV4Y2hhbmdlIHYgd2l0aCB0aGUgc21hbGxlc3Qgc29uICovXG4gICAgcy5oZWFwW2tdID0gcy5oZWFwW2pdO1xuICAgIGsgPSBqO1xuXG4gICAgLyogQW5kIGNvbnRpbnVlIGRvd24gdGhlIHRyZWUsIHNldHRpbmcgaiB0byB0aGUgbGVmdCBzb24gb2YgayAqL1xuICAgIGogPDw9IDE7XG4gIH1cbiAgcy5oZWFwW2tdID0gdjtcbn07XG5cblxuLy8gaW5saW5lZCBtYW51YWxseVxuLy8gY29uc3QgU01BTExFU1QgPSAxO1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNlbmQgdGhlIGJsb2NrIGRhdGEgY29tcHJlc3NlZCB1c2luZyB0aGUgZ2l2ZW4gSHVmZm1hbiB0cmVlc1xuICovXG5jb25zdCBjb21wcmVzc19ibG9jayA9IChzLCBsdHJlZSwgZHRyZWUpID0+IHtcbi8vICAgIGRlZmxhdGVfc3RhdGUgKnM7XG4vLyAgICBjb25zdCBjdF9kYXRhICpsdHJlZTsgLyogbGl0ZXJhbCB0cmVlICovXG4vLyAgICBjb25zdCBjdF9kYXRhICpkdHJlZTsgLyogZGlzdGFuY2UgdHJlZSAqL1xuXG4gIGxldCBkaXN0OyAgICAgICAgICAgLyogZGlzdGFuY2Ugb2YgbWF0Y2hlZCBzdHJpbmcgKi9cbiAgbGV0IGxjOyAgICAgICAgICAgICAvKiBtYXRjaCBsZW5ndGggb3IgdW5tYXRjaGVkIGNoYXIgKGlmIGRpc3QgPT0gMCkgKi9cbiAgbGV0IHN4ID0gMDsgICAgICAgICAvKiBydW5uaW5nIGluZGV4IGluIHN5bV9idWYgKi9cbiAgbGV0IGNvZGU7ICAgICAgICAgICAvKiB0aGUgY29kZSB0byBzZW5kICovXG4gIGxldCBleHRyYTsgICAgICAgICAgLyogbnVtYmVyIG9mIGV4dHJhIGJpdHMgdG8gc2VuZCAqL1xuXG4gIGlmIChzLnN5bV9uZXh0ICE9PSAwKSB7XG4gICAgZG8ge1xuICAgICAgZGlzdCA9IHMucGVuZGluZ19idWZbcy5zeW1fYnVmICsgc3grK10gJiAweGZmO1xuICAgICAgZGlzdCArPSAocy5wZW5kaW5nX2J1ZltzLnN5bV9idWYgKyBzeCsrXSAmIDB4ZmYpIDw8IDg7XG4gICAgICBsYyA9IHMucGVuZGluZ19idWZbcy5zeW1fYnVmICsgc3grK107XG4gICAgICBpZiAoZGlzdCA9PT0gMCkge1xuICAgICAgICBzZW5kX2NvZGUocywgbGMsIGx0cmVlKTsgLyogc2VuZCBhIGxpdGVyYWwgYnl0ZSAqL1xuICAgICAgICAvL1RyYWNlY3YoaXNncmFwaChsYyksIChzdGRlcnIsXCIgJyVjJyBcIiwgbGMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIEhlcmUsIGxjIGlzIHRoZSBtYXRjaCBsZW5ndGggLSBNSU5fTUFUQ0ggKi9cbiAgICAgICAgY29kZSA9IF9sZW5ndGhfY29kZVtsY107XG4gICAgICAgIHNlbmRfY29kZShzLCBjb2RlICsgTElURVJBTFMkMSArIDEsIGx0cmVlKTsgLyogc2VuZCB0aGUgbGVuZ3RoIGNvZGUgKi9cbiAgICAgICAgZXh0cmEgPSBleHRyYV9sYml0c1tjb2RlXTtcbiAgICAgICAgaWYgKGV4dHJhICE9PSAwKSB7XG4gICAgICAgICAgbGMgLT0gYmFzZV9sZW5ndGhbY29kZV07XG4gICAgICAgICAgc2VuZF9iaXRzKHMsIGxjLCBleHRyYSk7ICAgICAgIC8qIHNlbmQgdGhlIGV4dHJhIGxlbmd0aCBiaXRzICovXG4gICAgICAgIH1cbiAgICAgICAgZGlzdC0tOyAvKiBkaXN0IGlzIG5vdyB0aGUgbWF0Y2ggZGlzdGFuY2UgLSAxICovXG4gICAgICAgIGNvZGUgPSBkX2NvZGUoZGlzdCk7XG4gICAgICAgIC8vQXNzZXJ0IChjb2RlIDwgRF9DT0RFUywgXCJiYWQgZF9jb2RlXCIpO1xuXG4gICAgICAgIHNlbmRfY29kZShzLCBjb2RlLCBkdHJlZSk7ICAgICAgIC8qIHNlbmQgdGhlIGRpc3RhbmNlIGNvZGUgKi9cbiAgICAgICAgZXh0cmEgPSBleHRyYV9kYml0c1tjb2RlXTtcbiAgICAgICAgaWYgKGV4dHJhICE9PSAwKSB7XG4gICAgICAgICAgZGlzdCAtPSBiYXNlX2Rpc3RbY29kZV07XG4gICAgICAgICAgc2VuZF9iaXRzKHMsIGRpc3QsIGV4dHJhKTsgICAvKiBzZW5kIHRoZSBleHRyYSBkaXN0YW5jZSBiaXRzICovXG4gICAgICAgIH1cbiAgICAgIH0gLyogbGl0ZXJhbCBvciBtYXRjaCBwYWlyID8gKi9cblxuICAgICAgLyogQ2hlY2sgdGhhdCB0aGUgb3ZlcmxheSBiZXR3ZWVuIHBlbmRpbmdfYnVmIGFuZCBzeW1fYnVmIGlzIG9rOiAqL1xuICAgICAgLy9Bc3NlcnQocy0+cGVuZGluZyA8IHMtPmxpdF9idWZzaXplICsgc3gsIFwicGVuZGluZ0J1ZiBvdmVyZmxvd1wiKTtcblxuICAgIH0gd2hpbGUgKHN4IDwgcy5zeW1fbmV4dCk7XG4gIH1cblxuICBzZW5kX2NvZGUocywgRU5EX0JMT0NLLCBsdHJlZSk7XG59O1xuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29uc3RydWN0IG9uZSBIdWZmbWFuIHRyZWUgYW5kIGFzc2lnbnMgdGhlIGNvZGUgYml0IHN0cmluZ3MgYW5kIGxlbmd0aHMuXG4gKiBVcGRhdGUgdGhlIHRvdGFsIGJpdCBsZW5ndGggZm9yIHRoZSBjdXJyZW50IGJsb2NrLlxuICogSU4gYXNzZXJ0aW9uOiB0aGUgZmllbGQgZnJlcSBpcyBzZXQgZm9yIGFsbCB0cmVlIGVsZW1lbnRzLlxuICogT1VUIGFzc2VydGlvbnM6IHRoZSBmaWVsZHMgbGVuIGFuZCBjb2RlIGFyZSBzZXQgdG8gdGhlIG9wdGltYWwgYml0IGxlbmd0aFxuICogICAgIGFuZCBjb3JyZXNwb25kaW5nIGNvZGUuIFRoZSBsZW5ndGggb3B0X2xlbiBpcyB1cGRhdGVkOyBzdGF0aWNfbGVuIGlzXG4gKiAgICAgYWxzbyB1cGRhdGVkIGlmIHN0cmVlIGlzIG5vdCBudWxsLiBUaGUgZmllbGQgbWF4X2NvZGUgaXMgc2V0LlxuICovXG5jb25zdCBidWlsZF90cmVlID0gKHMsIGRlc2MpID0+IHtcbi8vICAgIGRlZmxhdGVfc3RhdGUgKnM7XG4vLyAgICB0cmVlX2Rlc2MgKmRlc2M7IC8qIHRoZSB0cmVlIGRlc2NyaXB0b3IgKi9cblxuICBjb25zdCB0cmVlICAgICA9IGRlc2MuZHluX3RyZWU7XG4gIGNvbnN0IHN0cmVlICAgID0gZGVzYy5zdGF0X2Rlc2Muc3RhdGljX3RyZWU7XG4gIGNvbnN0IGhhc19zdHJlZSA9IGRlc2Muc3RhdF9kZXNjLmhhc19zdHJlZTtcbiAgY29uc3QgZWxlbXMgICAgPSBkZXNjLnN0YXRfZGVzYy5lbGVtcztcbiAgbGV0IG4sIG07ICAgICAgICAgIC8qIGl0ZXJhdGUgb3ZlciBoZWFwIGVsZW1lbnRzICovXG4gIGxldCBtYXhfY29kZSA9IC0xOyAvKiBsYXJnZXN0IGNvZGUgd2l0aCBub24gemVybyBmcmVxdWVuY3kgKi9cbiAgbGV0IG5vZGU7ICAgICAgICAgIC8qIG5ldyBub2RlIGJlaW5nIGNyZWF0ZWQgKi9cblxuICAvKiBDb25zdHJ1Y3QgdGhlIGluaXRpYWwgaGVhcCwgd2l0aCBsZWFzdCBmcmVxdWVudCBlbGVtZW50IGluXG4gICAqIGhlYXBbU01BTExFU1RdLiBUaGUgc29ucyBvZiBoZWFwW25dIGFyZSBoZWFwWzIqbl0gYW5kIGhlYXBbMipuKzFdLlxuICAgKiBoZWFwWzBdIGlzIG5vdCB1c2VkLlxuICAgKi9cbiAgcy5oZWFwX2xlbiA9IDA7XG4gIHMuaGVhcF9tYXggPSBIRUFQX1NJWkUkMTtcblxuICBmb3IgKG4gPSAwOyBuIDwgZWxlbXM7IG4rKykge1xuICAgIGlmICh0cmVlW24gKiAyXS8qLkZyZXEqLyAhPT0gMCkge1xuICAgICAgcy5oZWFwWysrcy5oZWFwX2xlbl0gPSBtYXhfY29kZSA9IG47XG4gICAgICBzLmRlcHRoW25dID0gMDtcblxuICAgIH0gZWxzZSB7XG4gICAgICB0cmVlW24gKiAyICsgMV0vKi5MZW4qLyA9IDA7XG4gICAgfVxuICB9XG5cbiAgLyogVGhlIHBremlwIGZvcm1hdCByZXF1aXJlcyB0aGF0IGF0IGxlYXN0IG9uZSBkaXN0YW5jZSBjb2RlIGV4aXN0cyxcbiAgICogYW5kIHRoYXQgYXQgbGVhc3Qgb25lIGJpdCBzaG91bGQgYmUgc2VudCBldmVuIGlmIHRoZXJlIGlzIG9ubHkgb25lXG4gICAqIHBvc3NpYmxlIGNvZGUuIFNvIHRvIGF2b2lkIHNwZWNpYWwgY2hlY2tzIGxhdGVyIG9uIHdlIGZvcmNlIGF0IGxlYXN0XG4gICAqIHR3byBjb2RlcyBvZiBub24gemVybyBmcmVxdWVuY3kuXG4gICAqL1xuICB3aGlsZSAocy5oZWFwX2xlbiA8IDIpIHtcbiAgICBub2RlID0gcy5oZWFwWysrcy5oZWFwX2xlbl0gPSAobWF4X2NvZGUgPCAyID8gKyttYXhfY29kZSA6IDApO1xuICAgIHRyZWVbbm9kZSAqIDJdLyouRnJlcSovID0gMTtcbiAgICBzLmRlcHRoW25vZGVdID0gMDtcbiAgICBzLm9wdF9sZW4tLTtcblxuICAgIGlmIChoYXNfc3RyZWUpIHtcbiAgICAgIHMuc3RhdGljX2xlbiAtPSBzdHJlZVtub2RlICogMiArIDFdLyouTGVuKi87XG4gICAgfVxuICAgIC8qIG5vZGUgaXMgMCBvciAxIHNvIGl0IGRvZXMgbm90IGhhdmUgZXh0cmEgYml0cyAqL1xuICB9XG4gIGRlc2MubWF4X2NvZGUgPSBtYXhfY29kZTtcblxuICAvKiBUaGUgZWxlbWVudHMgaGVhcFtoZWFwX2xlbi8yKzEgLi4gaGVhcF9sZW5dIGFyZSBsZWF2ZXMgb2YgdGhlIHRyZWUsXG4gICAqIGVzdGFibGlzaCBzdWItaGVhcHMgb2YgaW5jcmVhc2luZyBsZW5ndGhzOlxuICAgKi9cbiAgZm9yIChuID0gKHMuaGVhcF9sZW4gPj4gMS8qaW50IC8yKi8pOyBuID49IDE7IG4tLSkgeyBwcWRvd25oZWFwKHMsIHRyZWUsIG4pOyB9XG5cbiAgLyogQ29uc3RydWN0IHRoZSBIdWZmbWFuIHRyZWUgYnkgcmVwZWF0ZWRseSBjb21iaW5pbmcgdGhlIGxlYXN0IHR3b1xuICAgKiBmcmVxdWVudCBub2Rlcy5cbiAgICovXG4gIG5vZGUgPSBlbGVtczsgICAgICAgICAgICAgIC8qIG5leHQgaW50ZXJuYWwgbm9kZSBvZiB0aGUgdHJlZSAqL1xuICBkbyB7XG4gICAgLy9wcXJlbW92ZShzLCB0cmVlLCBuKTsgIC8qIG4gPSBub2RlIG9mIGxlYXN0IGZyZXF1ZW5jeSAqL1xuICAgIC8qKiogcHFyZW1vdmUgKioqL1xuICAgIG4gPSBzLmhlYXBbMS8qU01BTExFU1QqL107XG4gICAgcy5oZWFwWzEvKlNNQUxMRVNUKi9dID0gcy5oZWFwW3MuaGVhcF9sZW4tLV07XG4gICAgcHFkb3duaGVhcChzLCB0cmVlLCAxLypTTUFMTEVTVCovKTtcbiAgICAvKioqL1xuXG4gICAgbSA9IHMuaGVhcFsxLypTTUFMTEVTVCovXTsgLyogbSA9IG5vZGUgb2YgbmV4dCBsZWFzdCBmcmVxdWVuY3kgKi9cblxuICAgIHMuaGVhcFstLXMuaGVhcF9tYXhdID0gbjsgLyoga2VlcCB0aGUgbm9kZXMgc29ydGVkIGJ5IGZyZXF1ZW5jeSAqL1xuICAgIHMuaGVhcFstLXMuaGVhcF9tYXhdID0gbTtcblxuICAgIC8qIENyZWF0ZSBhIG5ldyBub2RlIGZhdGhlciBvZiBuIGFuZCBtICovXG4gICAgdHJlZVtub2RlICogMl0vKi5GcmVxKi8gPSB0cmVlW24gKiAyXS8qLkZyZXEqLyArIHRyZWVbbSAqIDJdLyouRnJlcSovO1xuICAgIHMuZGVwdGhbbm9kZV0gPSAocy5kZXB0aFtuXSA+PSBzLmRlcHRoW21dID8gcy5kZXB0aFtuXSA6IHMuZGVwdGhbbV0pICsgMTtcbiAgICB0cmVlW24gKiAyICsgMV0vKi5EYWQqLyA9IHRyZWVbbSAqIDIgKyAxXS8qLkRhZCovID0gbm9kZTtcblxuICAgIC8qIGFuZCBpbnNlcnQgdGhlIG5ldyBub2RlIGluIHRoZSBoZWFwICovXG4gICAgcy5oZWFwWzEvKlNNQUxMRVNUKi9dID0gbm9kZSsrO1xuICAgIHBxZG93bmhlYXAocywgdHJlZSwgMS8qU01BTExFU1QqLyk7XG5cbiAgfSB3aGlsZSAocy5oZWFwX2xlbiA+PSAyKTtcblxuICBzLmhlYXBbLS1zLmhlYXBfbWF4XSA9IHMuaGVhcFsxLypTTUFMTEVTVCovXTtcblxuICAvKiBBdCB0aGlzIHBvaW50LCB0aGUgZmllbGRzIGZyZXEgYW5kIGRhZCBhcmUgc2V0LiBXZSBjYW4gbm93XG4gICAqIGdlbmVyYXRlIHRoZSBiaXQgbGVuZ3Rocy5cbiAgICovXG4gIGdlbl9iaXRsZW4ocywgZGVzYyk7XG5cbiAgLyogVGhlIGZpZWxkIGxlbiBpcyBub3cgc2V0LCB3ZSBjYW4gZ2VuZXJhdGUgdGhlIGJpdCBjb2RlcyAqL1xuICBnZW5fY29kZXModHJlZSwgbWF4X2NvZGUsIHMuYmxfY291bnQpO1xufTtcblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNjYW4gYSBsaXRlcmFsIG9yIGRpc3RhbmNlIHRyZWUgdG8gZGV0ZXJtaW5lIHRoZSBmcmVxdWVuY2llcyBvZiB0aGUgY29kZXNcbiAqIGluIHRoZSBiaXQgbGVuZ3RoIHRyZWUuXG4gKi9cbmNvbnN0IHNjYW5fdHJlZSA9IChzLCB0cmVlLCBtYXhfY29kZSkgPT4ge1xuLy8gICAgZGVmbGF0ZV9zdGF0ZSAqcztcbi8vICAgIGN0X2RhdGEgKnRyZWU7ICAgLyogdGhlIHRyZWUgdG8gYmUgc2Nhbm5lZCAqL1xuLy8gICAgaW50IG1heF9jb2RlOyAgICAvKiBhbmQgaXRzIGxhcmdlc3QgY29kZSBvZiBub24gemVybyBmcmVxdWVuY3kgKi9cblxuICBsZXQgbjsgICAgICAgICAgICAgICAgICAgICAvKiBpdGVyYXRlcyBvdmVyIGFsbCB0cmVlIGVsZW1lbnRzICovXG4gIGxldCBwcmV2bGVuID0gLTE7ICAgICAgICAgIC8qIGxhc3QgZW1pdHRlZCBsZW5ndGggKi9cbiAgbGV0IGN1cmxlbjsgICAgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGN1cnJlbnQgY29kZSAqL1xuXG4gIGxldCBuZXh0bGVuID0gdHJlZVswICogMiArIDFdLyouTGVuKi87IC8qIGxlbmd0aCBvZiBuZXh0IGNvZGUgKi9cblxuICBsZXQgY291bnQgPSAwOyAgICAgICAgICAgICAvKiByZXBlYXQgY291bnQgb2YgdGhlIGN1cnJlbnQgY29kZSAqL1xuICBsZXQgbWF4X2NvdW50ID0gNzsgICAgICAgICAvKiBtYXggcmVwZWF0IGNvdW50ICovXG4gIGxldCBtaW5fY291bnQgPSA0OyAgICAgICAgIC8qIG1pbiByZXBlYXQgY291bnQgKi9cblxuICBpZiAobmV4dGxlbiA9PT0gMCkge1xuICAgIG1heF9jb3VudCA9IDEzODtcbiAgICBtaW5fY291bnQgPSAzO1xuICB9XG4gIHRyZWVbKG1heF9jb2RlICsgMSkgKiAyICsgMV0vKi5MZW4qLyA9IDB4ZmZmZjsgLyogZ3VhcmQgKi9cblxuICBmb3IgKG4gPSAwOyBuIDw9IG1heF9jb2RlOyBuKyspIHtcbiAgICBjdXJsZW4gPSBuZXh0bGVuO1xuICAgIG5leHRsZW4gPSB0cmVlWyhuICsgMSkgKiAyICsgMV0vKi5MZW4qLztcblxuICAgIGlmICgrK2NvdW50IDwgbWF4X2NvdW50ICYmIGN1cmxlbiA9PT0gbmV4dGxlbikge1xuICAgICAgY29udGludWU7XG5cbiAgICB9IGVsc2UgaWYgKGNvdW50IDwgbWluX2NvdW50KSB7XG4gICAgICBzLmJsX3RyZWVbY3VybGVuICogMl0vKi5GcmVxKi8gKz0gY291bnQ7XG5cbiAgICB9IGVsc2UgaWYgKGN1cmxlbiAhPT0gMCkge1xuXG4gICAgICBpZiAoY3VybGVuICE9PSBwcmV2bGVuKSB7IHMuYmxfdHJlZVtjdXJsZW4gKiAyXS8qLkZyZXEqLysrOyB9XG4gICAgICBzLmJsX3RyZWVbUkVQXzNfNiAqIDJdLyouRnJlcSovKys7XG5cbiAgICB9IGVsc2UgaWYgKGNvdW50IDw9IDEwKSB7XG4gICAgICBzLmJsX3RyZWVbUkVQWl8zXzEwICogMl0vKi5GcmVxKi8rKztcblxuICAgIH0gZWxzZSB7XG4gICAgICBzLmJsX3RyZWVbUkVQWl8xMV8xMzggKiAyXS8qLkZyZXEqLysrO1xuICAgIH1cblxuICAgIGNvdW50ID0gMDtcbiAgICBwcmV2bGVuID0gY3VybGVuO1xuXG4gICAgaWYgKG5leHRsZW4gPT09IDApIHtcbiAgICAgIG1heF9jb3VudCA9IDEzODtcbiAgICAgIG1pbl9jb3VudCA9IDM7XG5cbiAgICB9IGVsc2UgaWYgKGN1cmxlbiA9PT0gbmV4dGxlbikge1xuICAgICAgbWF4X2NvdW50ID0gNjtcbiAgICAgIG1pbl9jb3VudCA9IDM7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgbWF4X2NvdW50ID0gNztcbiAgICAgIG1pbl9jb3VudCA9IDQ7XG4gICAgfVxuICB9XG59O1xuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2VuZCBhIGxpdGVyYWwgb3IgZGlzdGFuY2UgdHJlZSBpbiBjb21wcmVzc2VkIGZvcm0sIHVzaW5nIHRoZSBjb2RlcyBpblxuICogYmxfdHJlZS5cbiAqL1xuY29uc3Qgc2VuZF90cmVlID0gKHMsIHRyZWUsIG1heF9jb2RlKSA9PiB7XG4vLyAgICBkZWZsYXRlX3N0YXRlICpzO1xuLy8gICAgY3RfZGF0YSAqdHJlZTsgLyogdGhlIHRyZWUgdG8gYmUgc2Nhbm5lZCAqL1xuLy8gICAgaW50IG1heF9jb2RlOyAgICAgICAvKiBhbmQgaXRzIGxhcmdlc3QgY29kZSBvZiBub24gemVybyBmcmVxdWVuY3kgKi9cblxuICBsZXQgbjsgICAgICAgICAgICAgICAgICAgICAvKiBpdGVyYXRlcyBvdmVyIGFsbCB0cmVlIGVsZW1lbnRzICovXG4gIGxldCBwcmV2bGVuID0gLTE7ICAgICAgICAgIC8qIGxhc3QgZW1pdHRlZCBsZW5ndGggKi9cbiAgbGV0IGN1cmxlbjsgICAgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGN1cnJlbnQgY29kZSAqL1xuXG4gIGxldCBuZXh0bGVuID0gdHJlZVswICogMiArIDFdLyouTGVuKi87IC8qIGxlbmd0aCBvZiBuZXh0IGNvZGUgKi9cblxuICBsZXQgY291bnQgPSAwOyAgICAgICAgICAgICAvKiByZXBlYXQgY291bnQgb2YgdGhlIGN1cnJlbnQgY29kZSAqL1xuICBsZXQgbWF4X2NvdW50ID0gNzsgICAgICAgICAvKiBtYXggcmVwZWF0IGNvdW50ICovXG4gIGxldCBtaW5fY291bnQgPSA0OyAgICAgICAgIC8qIG1pbiByZXBlYXQgY291bnQgKi9cblxuICAvKiB0cmVlW21heF9jb2RlKzFdLkxlbiA9IC0xOyAqLyAgLyogZ3VhcmQgYWxyZWFkeSBzZXQgKi9cbiAgaWYgKG5leHRsZW4gPT09IDApIHtcbiAgICBtYXhfY291bnQgPSAxMzg7XG4gICAgbWluX2NvdW50ID0gMztcbiAgfVxuXG4gIGZvciAobiA9IDA7IG4gPD0gbWF4X2NvZGU7IG4rKykge1xuICAgIGN1cmxlbiA9IG5leHRsZW47XG4gICAgbmV4dGxlbiA9IHRyZWVbKG4gKyAxKSAqIDIgKyAxXS8qLkxlbiovO1xuXG4gICAgaWYgKCsrY291bnQgPCBtYXhfY291bnQgJiYgY3VybGVuID09PSBuZXh0bGVuKSB7XG4gICAgICBjb250aW51ZTtcblxuICAgIH0gZWxzZSBpZiAoY291bnQgPCBtaW5fY291bnQpIHtcbiAgICAgIGRvIHsgc2VuZF9jb2RlKHMsIGN1cmxlbiwgcy5ibF90cmVlKTsgfSB3aGlsZSAoLS1jb3VudCAhPT0gMCk7XG5cbiAgICB9IGVsc2UgaWYgKGN1cmxlbiAhPT0gMCkge1xuICAgICAgaWYgKGN1cmxlbiAhPT0gcHJldmxlbikge1xuICAgICAgICBzZW5kX2NvZGUocywgY3VybGVuLCBzLmJsX3RyZWUpO1xuICAgICAgICBjb3VudC0tO1xuICAgICAgfVxuICAgICAgLy9Bc3NlcnQoY291bnQgPj0gMyAmJiBjb3VudCA8PSA2LCBcIiAzXzY/XCIpO1xuICAgICAgc2VuZF9jb2RlKHMsIFJFUF8zXzYsIHMuYmxfdHJlZSk7XG4gICAgICBzZW5kX2JpdHMocywgY291bnQgLSAzLCAyKTtcblxuICAgIH0gZWxzZSBpZiAoY291bnQgPD0gMTApIHtcbiAgICAgIHNlbmRfY29kZShzLCBSRVBaXzNfMTAsIHMuYmxfdHJlZSk7XG4gICAgICBzZW5kX2JpdHMocywgY291bnQgLSAzLCAzKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICBzZW5kX2NvZGUocywgUkVQWl8xMV8xMzgsIHMuYmxfdHJlZSk7XG4gICAgICBzZW5kX2JpdHMocywgY291bnQgLSAxMSwgNyk7XG4gICAgfVxuXG4gICAgY291bnQgPSAwO1xuICAgIHByZXZsZW4gPSBjdXJsZW47XG4gICAgaWYgKG5leHRsZW4gPT09IDApIHtcbiAgICAgIG1heF9jb3VudCA9IDEzODtcbiAgICAgIG1pbl9jb3VudCA9IDM7XG5cbiAgICB9IGVsc2UgaWYgKGN1cmxlbiA9PT0gbmV4dGxlbikge1xuICAgICAgbWF4X2NvdW50ID0gNjtcbiAgICAgIG1pbl9jb3VudCA9IDM7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgbWF4X2NvdW50ID0gNztcbiAgICAgIG1pbl9jb3VudCA9IDQ7XG4gICAgfVxuICB9XG59O1xuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29uc3RydWN0IHRoZSBIdWZmbWFuIHRyZWUgZm9yIHRoZSBiaXQgbGVuZ3RocyBhbmQgcmV0dXJuIHRoZSBpbmRleCBpblxuICogYmxfb3JkZXIgb2YgdGhlIGxhc3QgYml0IGxlbmd0aCBjb2RlIHRvIHNlbmQuXG4gKi9cbmNvbnN0IGJ1aWxkX2JsX3RyZWUgPSAocykgPT4ge1xuXG4gIGxldCBtYXhfYmxpbmRleDsgIC8qIGluZGV4IG9mIGxhc3QgYml0IGxlbmd0aCBjb2RlIG9mIG5vbiB6ZXJvIGZyZXEgKi9cblxuICAvKiBEZXRlcm1pbmUgdGhlIGJpdCBsZW5ndGggZnJlcXVlbmNpZXMgZm9yIGxpdGVyYWwgYW5kIGRpc3RhbmNlIHRyZWVzICovXG4gIHNjYW5fdHJlZShzLCBzLmR5bl9sdHJlZSwgcy5sX2Rlc2MubWF4X2NvZGUpO1xuICBzY2FuX3RyZWUocywgcy5keW5fZHRyZWUsIHMuZF9kZXNjLm1heF9jb2RlKTtcblxuICAvKiBCdWlsZCB0aGUgYml0IGxlbmd0aCB0cmVlOiAqL1xuICBidWlsZF90cmVlKHMsIHMuYmxfZGVzYyk7XG4gIC8qIG9wdF9sZW4gbm93IGluY2x1ZGVzIHRoZSBsZW5ndGggb2YgdGhlIHRyZWUgcmVwcmVzZW50YXRpb25zLCBleGNlcHRcbiAgICogdGhlIGxlbmd0aHMgb2YgdGhlIGJpdCBsZW5ndGhzIGNvZGVzIGFuZCB0aGUgNSs1KzQgYml0cyBmb3IgdGhlIGNvdW50cy5cbiAgICovXG5cbiAgLyogRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYml0IGxlbmd0aCBjb2RlcyB0byBzZW5kLiBUaGUgcGt6aXAgZm9ybWF0XG4gICAqIHJlcXVpcmVzIHRoYXQgYXQgbGVhc3QgNCBiaXQgbGVuZ3RoIGNvZGVzIGJlIHNlbnQuIChhcHBub3RlLnR4dCBzYXlzXG4gICAqIDMgYnV0IHRoZSBhY3R1YWwgdmFsdWUgdXNlZCBpcyA0LilcbiAgICovXG4gIGZvciAobWF4X2JsaW5kZXggPSBCTF9DT0RFUyQxIC0gMTsgbWF4X2JsaW5kZXggPj0gMzsgbWF4X2JsaW5kZXgtLSkge1xuICAgIGlmIChzLmJsX3RyZWVbYmxfb3JkZXJbbWF4X2JsaW5kZXhdICogMiArIDFdLyouTGVuKi8gIT09IDApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICAvKiBVcGRhdGUgb3B0X2xlbiB0byBpbmNsdWRlIHRoZSBiaXQgbGVuZ3RoIHRyZWUgYW5kIGNvdW50cyAqL1xuICBzLm9wdF9sZW4gKz0gMyAqIChtYXhfYmxpbmRleCArIDEpICsgNSArIDUgKyA0O1xuICAvL1RyYWNldigoc3RkZXJyLCBcIlxcbmR5biB0cmVlczogZHluICVsZCwgc3RhdCAlbGRcIixcbiAgLy8gICAgICAgIHMtPm9wdF9sZW4sIHMtPnN0YXRpY19sZW4pKTtcblxuICByZXR1cm4gbWF4X2JsaW5kZXg7XG59O1xuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2VuZCB0aGUgaGVhZGVyIGZvciBhIGJsb2NrIHVzaW5nIGR5bmFtaWMgSHVmZm1hbiB0cmVlczogdGhlIGNvdW50cywgdGhlXG4gKiBsZW5ndGhzIG9mIHRoZSBiaXQgbGVuZ3RoIGNvZGVzLCB0aGUgbGl0ZXJhbCB0cmVlIGFuZCB0aGUgZGlzdGFuY2UgdHJlZS5cbiAqIElOIGFzc2VydGlvbjogbGNvZGVzID49IDI1NywgZGNvZGVzID49IDEsIGJsY29kZXMgPj0gNC5cbiAqL1xuY29uc3Qgc2VuZF9hbGxfdHJlZXMgPSAocywgbGNvZGVzLCBkY29kZXMsIGJsY29kZXMpID0+IHtcbi8vICAgIGRlZmxhdGVfc3RhdGUgKnM7XG4vLyAgICBpbnQgbGNvZGVzLCBkY29kZXMsIGJsY29kZXM7IC8qIG51bWJlciBvZiBjb2RlcyBmb3IgZWFjaCB0cmVlICovXG5cbiAgbGV0IHJhbms7ICAgICAgICAgICAgICAgICAgICAvKiBpbmRleCBpbiBibF9vcmRlciAqL1xuXG4gIC8vQXNzZXJ0IChsY29kZXMgPj0gMjU3ICYmIGRjb2RlcyA+PSAxICYmIGJsY29kZXMgPj0gNCwgXCJub3QgZW5vdWdoIGNvZGVzXCIpO1xuICAvL0Fzc2VydCAobGNvZGVzIDw9IExfQ09ERVMgJiYgZGNvZGVzIDw9IERfQ09ERVMgJiYgYmxjb2RlcyA8PSBCTF9DT0RFUyxcbiAgLy8gICAgICAgIFwidG9vIG1hbnkgY29kZXNcIik7XG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiXFxuYmwgY291bnRzOiBcIikpO1xuICBzZW5kX2JpdHMocywgbGNvZGVzIC0gMjU3LCA1KTsgLyogbm90ICsyNTUgYXMgc3RhdGVkIGluIGFwcG5vdGUudHh0ICovXG4gIHNlbmRfYml0cyhzLCBkY29kZXMgLSAxLCAgIDUpO1xuICBzZW5kX2JpdHMocywgYmxjb2RlcyAtIDQsICA0KTsgLyogbm90IC0zIGFzIHN0YXRlZCBpbiBhcHBub3RlLnR4dCAqL1xuICBmb3IgKHJhbmsgPSAwOyByYW5rIDwgYmxjb2RlczsgcmFuaysrKSB7XG4gICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJcXG5ibCBjb2RlICUyZCBcIiwgYmxfb3JkZXJbcmFua10pKTtcbiAgICBzZW5kX2JpdHMocywgcy5ibF90cmVlW2JsX29yZGVyW3JhbmtdICogMiArIDFdLyouTGVuKi8sIDMpO1xuICB9XG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiXFxuYmwgdHJlZTogc2VudCAlbGRcIiwgcy0+Yml0c19zZW50KSk7XG5cbiAgc2VuZF90cmVlKHMsIHMuZHluX2x0cmVlLCBsY29kZXMgLSAxKTsgLyogbGl0ZXJhbCB0cmVlICovXG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiXFxubGl0IHRyZWU6IHNlbnQgJWxkXCIsIHMtPmJpdHNfc2VudCkpO1xuXG4gIHNlbmRfdHJlZShzLCBzLmR5bl9kdHJlZSwgZGNvZGVzIC0gMSk7IC8qIGRpc3RhbmNlIHRyZWUgKi9cbiAgLy9UcmFjZXYoKHN0ZGVyciwgXCJcXG5kaXN0IHRyZWU6IHNlbnQgJWxkXCIsIHMtPmJpdHNfc2VudCkpO1xufTtcblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENoZWNrIGlmIHRoZSBkYXRhIHR5cGUgaXMgVEVYVCBvciBCSU5BUlksIHVzaW5nIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOlxuICogLSBURVhUIGlmIHRoZSB0d28gY29uZGl0aW9ucyBiZWxvdyBhcmUgc2F0aXNmaWVkOlxuICogICAgYSkgVGhlcmUgYXJlIG5vIG5vbi1wb3J0YWJsZSBjb250cm9sIGNoYXJhY3RlcnMgYmVsb25naW5nIHRvIHRoZVxuICogICAgICAgXCJibG9jayBsaXN0XCIgKDAuLjYsIDE0Li4yNSwgMjguLjMxKS5cbiAqICAgIGIpIFRoZXJlIGlzIGF0IGxlYXN0IG9uZSBwcmludGFibGUgY2hhcmFjdGVyIGJlbG9uZ2luZyB0byB0aGVcbiAqICAgICAgIFwiYWxsb3cgbGlzdFwiICg5IHtUQUJ9LCAxMCB7TEZ9LCAxMyB7Q1J9LCAzMi4uMjU1KS5cbiAqIC0gQklOQVJZIG90aGVyd2lzZS5cbiAqIC0gVGhlIGZvbGxvd2luZyBwYXJ0aWFsbHktcG9ydGFibGUgY29udHJvbCBjaGFyYWN0ZXJzIGZvcm0gYVxuICogICBcImdyYXkgbGlzdFwiIHRoYXQgaXMgaWdub3JlZCBpbiB0aGlzIGRldGVjdGlvbiBhbGdvcml0aG06XG4gKiAgICg3IHtCRUx9LCA4IHtCU30sIDExIHtWVH0sIDEyIHtGRn0sIDI2IHtTVUJ9LCAyNyB7RVNDfSkuXG4gKiBJTiBhc3NlcnRpb246IHRoZSBmaWVsZHMgRnJlcSBvZiBkeW5fbHRyZWUgYXJlIHNldC5cbiAqL1xuY29uc3QgZGV0ZWN0X2RhdGFfdHlwZSA9IChzKSA9PiB7XG4gIC8qIGJsb2NrX21hc2sgaXMgdGhlIGJpdCBtYXNrIG9mIGJsb2NrLWxpc3RlZCBieXRlc1xuICAgKiBzZXQgYml0cyAwLi42LCAxNC4uMjUsIGFuZCAyOC4uMzFcbiAgICogMHhmM2ZmYzA3ZiA9IGJpbmFyeSAxMTExMDAxMTExMTExMTExMTEwMDAwMDAwMTExMTExMVxuICAgKi9cbiAgbGV0IGJsb2NrX21hc2sgPSAweGYzZmZjMDdmO1xuICBsZXQgbjtcblxuICAvKiBDaGVjayBmb3Igbm9uLXRleHR1YWwgKFwiYmxvY2stbGlzdGVkXCIpIGJ5dGVzLiAqL1xuICBmb3IgKG4gPSAwOyBuIDw9IDMxOyBuKyssIGJsb2NrX21hc2sgPj4+PSAxKSB7XG4gICAgaWYgKChibG9ja19tYXNrICYgMSkgJiYgKHMuZHluX2x0cmVlW24gKiAyXS8qLkZyZXEqLyAhPT0gMCkpIHtcbiAgICAgIHJldHVybiBaX0JJTkFSWTtcbiAgICB9XG4gIH1cblxuICAvKiBDaGVjayBmb3IgdGV4dHVhbCAoXCJhbGxvdy1saXN0ZWRcIikgYnl0ZXMuICovXG4gIGlmIChzLmR5bl9sdHJlZVs5ICogMl0vKi5GcmVxKi8gIT09IDAgfHwgcy5keW5fbHRyZWVbMTAgKiAyXS8qLkZyZXEqLyAhPT0gMCB8fFxuICAgICAgcy5keW5fbHRyZWVbMTMgKiAyXS8qLkZyZXEqLyAhPT0gMCkge1xuICAgIHJldHVybiBaX1RFWFQ7XG4gIH1cbiAgZm9yIChuID0gMzI7IG4gPCBMSVRFUkFMUyQxOyBuKyspIHtcbiAgICBpZiAocy5keW5fbHRyZWVbbiAqIDJdLyouRnJlcSovICE9PSAwKSB7XG4gICAgICByZXR1cm4gWl9URVhUO1xuICAgIH1cbiAgfVxuXG4gIC8qIFRoZXJlIGFyZSBubyBcImJsb2NrLWxpc3RlZFwiIG9yIFwiYWxsb3ctbGlzdGVkXCIgYnl0ZXM6XG4gICAqIHRoaXMgc3RyZWFtIGVpdGhlciBpcyBlbXB0eSBvciBoYXMgdG9sZXJhdGVkIChcImdyYXktbGlzdGVkXCIpIGJ5dGVzIG9ubHkuXG4gICAqL1xuICByZXR1cm4gWl9CSU5BUlk7XG59O1xuXG5cbmxldCBzdGF0aWNfaW5pdF9kb25lID0gZmFsc2U7XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogSW5pdGlhbGl6ZSB0aGUgdHJlZSBkYXRhIHN0cnVjdHVyZXMgZm9yIGEgbmV3IHpsaWIgc3RyZWFtLlxuICovXG5jb25zdCBfdHJfaW5pdCQxID0gKHMpID0+XG57XG5cbiAgaWYgKCFzdGF0aWNfaW5pdF9kb25lKSB7XG4gICAgdHJfc3RhdGljX2luaXQoKTtcbiAgICBzdGF0aWNfaW5pdF9kb25lID0gdHJ1ZTtcbiAgfVxuXG4gIHMubF9kZXNjICA9IG5ldyBUcmVlRGVzYyhzLmR5bl9sdHJlZSwgc3RhdGljX2xfZGVzYyk7XG4gIHMuZF9kZXNjICA9IG5ldyBUcmVlRGVzYyhzLmR5bl9kdHJlZSwgc3RhdGljX2RfZGVzYyk7XG4gIHMuYmxfZGVzYyA9IG5ldyBUcmVlRGVzYyhzLmJsX3RyZWUsIHN0YXRpY19ibF9kZXNjKTtcblxuICBzLmJpX2J1ZiA9IDA7XG4gIHMuYmlfdmFsaWQgPSAwO1xuXG4gIC8qIEluaXRpYWxpemUgdGhlIGZpcnN0IGJsb2NrIG9mIHRoZSBmaXJzdCBmaWxlOiAqL1xuICBpbml0X2Jsb2NrKHMpO1xufTtcblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNlbmQgYSBzdG9yZWQgYmxvY2tcbiAqL1xuY29uc3QgX3RyX3N0b3JlZF9ibG9jayQxID0gKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdCkgPT4ge1xuLy9EZWZsYXRlU3RhdGUgKnM7XG4vL2NoYXJmICpidWY7ICAgICAgIC8qIGlucHV0IGJsb2NrICovXG4vL3VsZyBzdG9yZWRfbGVuOyAgIC8qIGxlbmd0aCBvZiBpbnB1dCBibG9jayAqL1xuLy9pbnQgbGFzdDsgICAgICAgICAvKiBvbmUgaWYgdGhpcyBpcyB0aGUgbGFzdCBibG9jayBmb3IgYSBmaWxlICovXG5cbiAgc2VuZF9iaXRzKHMsIChTVE9SRURfQkxPQ0sgPDwgMSkgKyAobGFzdCA/IDEgOiAwKSwgMyk7ICAgIC8qIHNlbmQgYmxvY2sgdHlwZSAqL1xuICBiaV93aW5kdXAocyk7ICAgICAgICAvKiBhbGlnbiBvbiBieXRlIGJvdW5kYXJ5ICovXG4gIHB1dF9zaG9ydChzLCBzdG9yZWRfbGVuKTtcbiAgcHV0X3Nob3J0KHMsIH5zdG9yZWRfbGVuKTtcbiAgaWYgKHN0b3JlZF9sZW4pIHtcbiAgICBzLnBlbmRpbmdfYnVmLnNldChzLndpbmRvdy5zdWJhcnJheShidWYsIGJ1ZiArIHN0b3JlZF9sZW4pLCBzLnBlbmRpbmcpO1xuICB9XG4gIHMucGVuZGluZyArPSBzdG9yZWRfbGVuO1xufTtcblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNlbmQgb25lIGVtcHR5IHN0YXRpYyBibG9jayB0byBnaXZlIGVub3VnaCBsb29rYWhlYWQgZm9yIGluZmxhdGUuXG4gKiBUaGlzIHRha2VzIDEwIGJpdHMsIG9mIHdoaWNoIDcgbWF5IHJlbWFpbiBpbiB0aGUgYml0IGJ1ZmZlci5cbiAqL1xuY29uc3QgX3RyX2FsaWduJDEgPSAocykgPT4ge1xuICBzZW5kX2JpdHMocywgU1RBVElDX1RSRUVTIDw8IDEsIDMpO1xuICBzZW5kX2NvZGUocywgRU5EX0JMT0NLLCBzdGF0aWNfbHRyZWUpO1xuICBiaV9mbHVzaChzKTtcbn07XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBEZXRlcm1pbmUgdGhlIGJlc3QgZW5jb2RpbmcgZm9yIHRoZSBjdXJyZW50IGJsb2NrOiBkeW5hbWljIHRyZWVzLCBzdGF0aWNcbiAqIHRyZWVzIG9yIHN0b3JlLCBhbmQgd3JpdGUgb3V0IHRoZSBlbmNvZGVkIGJsb2NrLlxuICovXG5jb25zdCBfdHJfZmx1c2hfYmxvY2skMSA9IChzLCBidWYsIHN0b3JlZF9sZW4sIGxhc3QpID0+IHtcbi8vRGVmbGF0ZVN0YXRlICpzO1xuLy9jaGFyZiAqYnVmOyAgICAgICAvKiBpbnB1dCBibG9jaywgb3IgTlVMTCBpZiB0b28gb2xkICovXG4vL3VsZyBzdG9yZWRfbGVuOyAgIC8qIGxlbmd0aCBvZiBpbnB1dCBibG9jayAqL1xuLy9pbnQgbGFzdDsgICAgICAgICAvKiBvbmUgaWYgdGhpcyBpcyB0aGUgbGFzdCBibG9jayBmb3IgYSBmaWxlICovXG5cbiAgbGV0IG9wdF9sZW5iLCBzdGF0aWNfbGVuYjsgIC8qIG9wdF9sZW4gYW5kIHN0YXRpY19sZW4gaW4gYnl0ZXMgKi9cbiAgbGV0IG1heF9ibGluZGV4ID0gMDsgICAgICAgIC8qIGluZGV4IG9mIGxhc3QgYml0IGxlbmd0aCBjb2RlIG9mIG5vbiB6ZXJvIGZyZXEgKi9cblxuICAvKiBCdWlsZCB0aGUgSHVmZm1hbiB0cmVlcyB1bmxlc3MgYSBzdG9yZWQgYmxvY2sgaXMgZm9yY2VkICovXG4gIGlmIChzLmxldmVsID4gMCkge1xuXG4gICAgLyogQ2hlY2sgaWYgdGhlIGZpbGUgaXMgYmluYXJ5IG9yIHRleHQgKi9cbiAgICBpZiAocy5zdHJtLmRhdGFfdHlwZSA9PT0gWl9VTktOT1dOJDEpIHtcbiAgICAgIHMuc3RybS5kYXRhX3R5cGUgPSBkZXRlY3RfZGF0YV90eXBlKHMpO1xuICAgIH1cblxuICAgIC8qIENvbnN0cnVjdCB0aGUgbGl0ZXJhbCBhbmQgZGlzdGFuY2UgdHJlZXMgKi9cbiAgICBidWlsZF90cmVlKHMsIHMubF9kZXNjKTtcbiAgICAvLyBUcmFjZXYoKHN0ZGVyciwgXCJcXG5saXQgZGF0YTogZHluICVsZCwgc3RhdCAlbGRcIiwgcy0+b3B0X2xlbixcbiAgICAvLyAgICAgICAgcy0+c3RhdGljX2xlbikpO1xuXG4gICAgYnVpbGRfdHJlZShzLCBzLmRfZGVzYyk7XG4gICAgLy8gVHJhY2V2KChzdGRlcnIsIFwiXFxuZGlzdCBkYXRhOiBkeW4gJWxkLCBzdGF0ICVsZFwiLCBzLT5vcHRfbGVuLFxuICAgIC8vICAgICAgICBzLT5zdGF0aWNfbGVuKSk7XG4gICAgLyogQXQgdGhpcyBwb2ludCwgb3B0X2xlbiBhbmQgc3RhdGljX2xlbiBhcmUgdGhlIHRvdGFsIGJpdCBsZW5ndGhzIG9mXG4gICAgICogdGhlIGNvbXByZXNzZWQgYmxvY2sgZGF0YSwgZXhjbHVkaW5nIHRoZSB0cmVlIHJlcHJlc2VudGF0aW9ucy5cbiAgICAgKi9cblxuICAgIC8qIEJ1aWxkIHRoZSBiaXQgbGVuZ3RoIHRyZWUgZm9yIHRoZSBhYm92ZSB0d28gdHJlZXMsIGFuZCBnZXQgdGhlIGluZGV4XG4gICAgICogaW4gYmxfb3JkZXIgb2YgdGhlIGxhc3QgYml0IGxlbmd0aCBjb2RlIHRvIHNlbmQuXG4gICAgICovXG4gICAgbWF4X2JsaW5kZXggPSBidWlsZF9ibF90cmVlKHMpO1xuXG4gICAgLyogRGV0ZXJtaW5lIHRoZSBiZXN0IGVuY29kaW5nLiBDb21wdXRlIHRoZSBibG9jayBsZW5ndGhzIGluIGJ5dGVzLiAqL1xuICAgIG9wdF9sZW5iID0gKHMub3B0X2xlbiArIDMgKyA3KSA+Pj4gMztcbiAgICBzdGF0aWNfbGVuYiA9IChzLnN0YXRpY19sZW4gKyAzICsgNykgPj4+IDM7XG5cbiAgICAvLyBUcmFjZXYoKHN0ZGVyciwgXCJcXG5vcHQgJWx1KCVsdSkgc3RhdCAlbHUoJWx1KSBzdG9yZWQgJWx1IGxpdCAldSBcIixcbiAgICAvLyAgICAgICAgb3B0X2xlbmIsIHMtPm9wdF9sZW4sIHN0YXRpY19sZW5iLCBzLT5zdGF0aWNfbGVuLCBzdG9yZWRfbGVuLFxuICAgIC8vICAgICAgICBzLT5zeW1fbmV4dCAvIDMpKTtcblxuICAgIGlmIChzdGF0aWNfbGVuYiA8PSBvcHRfbGVuYikgeyBvcHRfbGVuYiA9IHN0YXRpY19sZW5iOyB9XG5cbiAgfSBlbHNlIHtcbiAgICAvLyBBc3NlcnQoYnVmICE9IChjaGFyKikwLCBcImxvc3QgYnVmXCIpO1xuICAgIG9wdF9sZW5iID0gc3RhdGljX2xlbmIgPSBzdG9yZWRfbGVuICsgNTsgLyogZm9yY2UgYSBzdG9yZWQgYmxvY2sgKi9cbiAgfVxuXG4gIGlmICgoc3RvcmVkX2xlbiArIDQgPD0gb3B0X2xlbmIpICYmIChidWYgIT09IC0xKSkge1xuICAgIC8qIDQ6IHR3byB3b3JkcyBmb3IgdGhlIGxlbmd0aHMgKi9cblxuICAgIC8qIFRoZSB0ZXN0IGJ1ZiAhPSBOVUxMIGlzIG9ubHkgbmVjZXNzYXJ5IGlmIExJVF9CVUZTSVpFID4gV1NJWkUuXG4gICAgICogT3RoZXJ3aXNlIHdlIGNhbid0IGhhdmUgcHJvY2Vzc2VkIG1vcmUgdGhhbiBXU0laRSBpbnB1dCBieXRlcyBzaW5jZVxuICAgICAqIHRoZSBsYXN0IGJsb2NrIGZsdXNoLCBiZWNhdXNlIGNvbXByZXNzaW9uIHdvdWxkIGhhdmUgYmVlblxuICAgICAqIHN1Y2Nlc3NmdWwuIElmIExJVF9CVUZTSVpFIDw9IFdTSVpFLCBpdCBpcyBuZXZlciB0b28gbGF0ZSB0b1xuICAgICAqIHRyYW5zZm9ybSBhIGJsb2NrIGludG8gYSBzdG9yZWQgYmxvY2suXG4gICAgICovXG4gICAgX3RyX3N0b3JlZF9ibG9jayQxKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdCk7XG5cbiAgfSBlbHNlIGlmIChzLnN0cmF0ZWd5ID09PSBaX0ZJWEVEJDEgfHwgc3RhdGljX2xlbmIgPT09IG9wdF9sZW5iKSB7XG5cbiAgICBzZW5kX2JpdHMocywgKFNUQVRJQ19UUkVFUyA8PCAxKSArIChsYXN0ID8gMSA6IDApLCAzKTtcbiAgICBjb21wcmVzc19ibG9jayhzLCBzdGF0aWNfbHRyZWUsIHN0YXRpY19kdHJlZSk7XG5cbiAgfSBlbHNlIHtcbiAgICBzZW5kX2JpdHMocywgKERZTl9UUkVFUyA8PCAxKSArIChsYXN0ID8gMSA6IDApLCAzKTtcbiAgICBzZW5kX2FsbF90cmVlcyhzLCBzLmxfZGVzYy5tYXhfY29kZSArIDEsIHMuZF9kZXNjLm1heF9jb2RlICsgMSwgbWF4X2JsaW5kZXggKyAxKTtcbiAgICBjb21wcmVzc19ibG9jayhzLCBzLmR5bl9sdHJlZSwgcy5keW5fZHRyZWUpO1xuICB9XG4gIC8vIEFzc2VydCAocy0+Y29tcHJlc3NlZF9sZW4gPT0gcy0+Yml0c19zZW50LCBcImJhZCBjb21wcmVzc2VkIHNpemVcIik7XG4gIC8qIFRoZSBhYm92ZSBjaGVjayBpcyBtYWRlIG1vZCAyXjMyLCBmb3IgZmlsZXMgbGFyZ2VyIHRoYW4gNTEyIE1CXG4gICAqIGFuZCB1TG9uZyBpbXBsZW1lbnRlZCBvbiAzMiBiaXRzLlxuICAgKi9cbiAgaW5pdF9ibG9jayhzKTtcblxuICBpZiAobGFzdCkge1xuICAgIGJpX3dpbmR1cChzKTtcbiAgfVxuICAvLyBUcmFjZXYoKHN0ZGVycixcIlxcbmNvbXBybGVuICVsdSglbHUpIFwiLCBzLT5jb21wcmVzc2VkX2xlbj4+MyxcbiAgLy8gICAgICAgcy0+Y29tcHJlc3NlZF9sZW4tNypsYXN0KSk7XG59O1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNhdmUgdGhlIG1hdGNoIGluZm8gYW5kIHRhbGx5IHRoZSBmcmVxdWVuY3kgY291bnRzLiBSZXR1cm4gdHJ1ZSBpZlxuICogdGhlIGN1cnJlbnQgYmxvY2sgbXVzdCBiZSBmbHVzaGVkLlxuICovXG5jb25zdCBfdHJfdGFsbHkkMSA9IChzLCBkaXN0LCBsYykgPT4ge1xuLy8gICAgZGVmbGF0ZV9zdGF0ZSAqcztcbi8vICAgIHVuc2lnbmVkIGRpc3Q7ICAvKiBkaXN0YW5jZSBvZiBtYXRjaGVkIHN0cmluZyAqL1xuLy8gICAgdW5zaWduZWQgbGM7ICAgIC8qIG1hdGNoIGxlbmd0aC1NSU5fTUFUQ0ggb3IgdW5tYXRjaGVkIGNoYXIgKGlmIGRpc3Q9PTApICovXG5cbiAgcy5wZW5kaW5nX2J1ZltzLnN5bV9idWYgKyBzLnN5bV9uZXh0KytdID0gZGlzdDtcbiAgcy5wZW5kaW5nX2J1ZltzLnN5bV9idWYgKyBzLnN5bV9uZXh0KytdID0gZGlzdCA+PiA4O1xuICBzLnBlbmRpbmdfYnVmW3Muc3ltX2J1ZiArIHMuc3ltX25leHQrK10gPSBsYztcbiAgaWYgKGRpc3QgPT09IDApIHtcbiAgICAvKiBsYyBpcyB0aGUgdW5tYXRjaGVkIGNoYXIgKi9cbiAgICBzLmR5bl9sdHJlZVtsYyAqIDJdLyouRnJlcSovKys7XG4gIH0gZWxzZSB7XG4gICAgcy5tYXRjaGVzKys7XG4gICAgLyogSGVyZSwgbGMgaXMgdGhlIG1hdGNoIGxlbmd0aCAtIE1JTl9NQVRDSCAqL1xuICAgIGRpc3QtLTsgICAgICAgICAgICAgLyogZGlzdCA9IG1hdGNoIGRpc3RhbmNlIC0gMSAqL1xuICAgIC8vQXNzZXJ0KCh1c2gpZGlzdCA8ICh1c2gpTUFYX0RJU1QocykgJiZcbiAgICAvLyAgICAgICAodXNoKWxjIDw9ICh1c2gpKE1BWF9NQVRDSC1NSU5fTUFUQ0gpICYmXG4gICAgLy8gICAgICAgKHVzaClkX2NvZGUoZGlzdCkgPCAodXNoKURfQ09ERVMsICBcIl90cl90YWxseTogYmFkIG1hdGNoXCIpO1xuXG4gICAgcy5keW5fbHRyZWVbKF9sZW5ndGhfY29kZVtsY10gKyBMSVRFUkFMUyQxICsgMSkgKiAyXS8qLkZyZXEqLysrO1xuICAgIHMuZHluX2R0cmVlW2RfY29kZShkaXN0KSAqIDJdLyouRnJlcSovKys7XG4gIH1cblxuICByZXR1cm4gKHMuc3ltX25leHQgPT09IHMuc3ltX2VuZCk7XG59O1xuXG52YXIgX3RyX2luaXRfMSAgPSBfdHJfaW5pdCQxO1xudmFyIF90cl9zdG9yZWRfYmxvY2tfMSA9IF90cl9zdG9yZWRfYmxvY2skMTtcbnZhciBfdHJfZmx1c2hfYmxvY2tfMSAgPSBfdHJfZmx1c2hfYmxvY2skMTtcbnZhciBfdHJfdGFsbHlfMSA9IF90cl90YWxseSQxO1xudmFyIF90cl9hbGlnbl8xID0gX3RyX2FsaWduJDE7XG5cbnZhciB0cmVlcyA9IHtcblx0X3RyX2luaXQ6IF90cl9pbml0XzEsXG5cdF90cl9zdG9yZWRfYmxvY2s6IF90cl9zdG9yZWRfYmxvY2tfMSxcblx0X3RyX2ZsdXNoX2Jsb2NrOiBfdHJfZmx1c2hfYmxvY2tfMSxcblx0X3RyX3RhbGx5OiBfdHJfdGFsbHlfMSxcblx0X3RyX2FsaWduOiBfdHJfYWxpZ25fMVxufTtcblxuLy8gTm90ZTogYWRsZXIzMiB0YWtlcyAxMiUgZm9yIGxldmVsIDAgYW5kIDIlIGZvciBsZXZlbCA2LlxuLy8gSXQgaXNuJ3Qgd29ydGggaXQgdG8gbWFrZSBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgYXMgaW4gb3JpZ2luYWwuXG4vLyBTbWFsbCBzaXplIGlzIHByZWZlcmFibGUuXG5cbi8vIChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlclxuLy8gKEMpIDIwMTQtMjAxNyBWaXRhbHkgUHV6cmluIGFuZCBBbmRyZXkgVHVwaXRzaW5cbi8vXG4vLyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZFxuLy8gd2FycmFudHkuIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzXG4vLyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLFxuLy8gaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdFxuLy8gZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuLy9cbi8vIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90XG4vLyAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlXG4vLyAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZVxuLy8gICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLlxuLy8gMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmVcbi8vICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLlxuLy8gMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi5cblxuY29uc3QgYWRsZXIzMiA9IChhZGxlciwgYnVmLCBsZW4sIHBvcykgPT4ge1xuICBsZXQgczEgPSAoYWRsZXIgJiAweGZmZmYpIHwwLFxuICAgICAgczIgPSAoKGFkbGVyID4+PiAxNikgJiAweGZmZmYpIHwwLFxuICAgICAgbiA9IDA7XG5cbiAgd2hpbGUgKGxlbiAhPT0gMCkge1xuICAgIC8vIFNldCBsaW1pdCB+IHR3aWNlIGxlc3MgdGhhbiA1NTUyLCB0byBrZWVwXG4gICAgLy8gczIgaW4gMzEtYml0cywgYmVjYXVzZSB3ZSBmb3JjZSBzaWduZWQgaW50cy5cbiAgICAvLyBpbiBvdGhlciBjYXNlICU9IHdpbGwgZmFpbC5cbiAgICBuID0gbGVuID4gMjAwMCA/IDIwMDAgOiBsZW47XG4gICAgbGVuIC09IG47XG5cbiAgICBkbyB7XG4gICAgICBzMSA9IChzMSArIGJ1Zltwb3MrK10pIHwwO1xuICAgICAgczIgPSAoczIgKyBzMSkgfDA7XG4gICAgfSB3aGlsZSAoLS1uKTtcblxuICAgIHMxICU9IDY1NTIxO1xuICAgIHMyICU9IDY1NTIxO1xuICB9XG5cbiAgcmV0dXJuIChzMSB8IChzMiA8PCAxNikpIHwwO1xufTtcblxuXG52YXIgYWRsZXIzMl8xID0gYWRsZXIzMjtcblxuLy8gTm90ZTogd2UgY2FuJ3QgZ2V0IHNpZ25pZmljYW50IHNwZWVkIGJvb3N0IGhlcmUuXG4vLyBTbyB3cml0ZSBjb2RlIHRvIG1pbmltaXplIHNpemUgLSBubyBwcmVnZW5lcmF0ZWQgdGFibGVzXG4vLyBhbmQgYXJyYXkgdG9vbHMgZGVwZW5kZW5jaWVzLlxuXG4vLyAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXJcbi8vIChDKSAyMDE0LTIwMTcgVml0YWx5IFB1enJpbiBhbmQgQW5kcmV5IFR1cGl0c2luXG4vL1xuLy8gVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWRcbi8vIHdhcnJhbnR5LiBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlc1xuLy8gYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSxcbi8vIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXRcbi8vIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcbi8vXG4vLyAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdFxuLy8gICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZVxuLy8gICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmVcbi8vICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC5cbi8vIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlXG4vLyAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS5cbi8vIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uXG5cbi8vIFVzZSBvcmRpbmFyeSBhcnJheSwgc2luY2UgdW50eXBlZCBtYWtlcyBubyBib29zdCBoZXJlXG5jb25zdCBtYWtlVGFibGUgPSAoKSA9PiB7XG4gIGxldCBjLCB0YWJsZSA9IFtdO1xuXG4gIGZvciAodmFyIG4gPSAwOyBuIDwgMjU2OyBuKyspIHtcbiAgICBjID0gbjtcbiAgICBmb3IgKHZhciBrID0gMDsgayA8IDg7IGsrKykge1xuICAgICAgYyA9ICgoYyAmIDEpID8gKDB4RURCODgzMjAgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcbiAgICB9XG4gICAgdGFibGVbbl0gPSBjO1xuICB9XG5cbiAgcmV0dXJuIHRhYmxlO1xufTtcblxuLy8gQ3JlYXRlIHRhYmxlIG9uIGxvYWQuIEp1c3QgMjU1IHNpZ25lZCBsb25ncy4gTm90IGEgcHJvYmxlbS5cbmNvbnN0IGNyY1RhYmxlID0gbmV3IFVpbnQzMkFycmF5KG1ha2VUYWJsZSgpKTtcblxuXG5jb25zdCBjcmMzMiA9IChjcmMsIGJ1ZiwgbGVuLCBwb3MpID0+IHtcbiAgY29uc3QgdCA9IGNyY1RhYmxlO1xuICBjb25zdCBlbmQgPSBwb3MgKyBsZW47XG5cbiAgY3JjIF49IC0xO1xuXG4gIGZvciAobGV0IGkgPSBwb3M7IGkgPCBlbmQ7IGkrKykge1xuICAgIGNyYyA9IChjcmMgPj4+IDgpIF4gdFsoY3JjIF4gYnVmW2ldKSAmIDB4RkZdO1xuICB9XG5cbiAgcmV0dXJuIChjcmMgXiAoLTEpKTsgLy8gPj4+IDA7XG59O1xuXG5cbnZhciBjcmMzMl8xID0gY3JjMzI7XG5cbi8vIChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlclxuLy8gKEMpIDIwMTQtMjAxNyBWaXRhbHkgUHV6cmluIGFuZCBBbmRyZXkgVHVwaXRzaW5cbi8vXG4vLyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZFxuLy8gd2FycmFudHkuIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzXG4vLyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLFxuLy8gaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdFxuLy8gZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuLy9cbi8vIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90XG4vLyAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlXG4vLyAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZVxuLy8gICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLlxuLy8gMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmVcbi8vICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLlxuLy8gMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi5cblxudmFyIG1lc3NhZ2VzID0ge1xuICAyOiAgICAgICduZWVkIGRpY3Rpb25hcnknLCAgICAgLyogWl9ORUVEX0RJQ1QgICAgICAgMiAgKi9cbiAgMTogICAgICAnc3RyZWFtIGVuZCcsICAgICAgICAgIC8qIFpfU1RSRUFNX0VORCAgICAgIDEgICovXG4gIDA6ICAgICAgJycsICAgICAgICAgICAgICAgICAgICAvKiBaX09LICAgICAgICAgICAgICAwICAqL1xuICAnLTEnOiAgICdmaWxlIGVycm9yJywgICAgICAgICAgLyogWl9FUlJOTyAgICAgICAgICgtMSkgKi9cbiAgJy0yJzogICAnc3RyZWFtIGVycm9yJywgICAgICAgIC8qIFpfU1RSRUFNX0VSUk9SICAoLTIpICovXG4gICctMyc6ICAgJ2RhdGEgZXJyb3InLCAgICAgICAgICAvKiBaX0RBVEFfRVJST1IgICAgKC0zKSAqL1xuICAnLTQnOiAgICdpbnN1ZmZpY2llbnQgbWVtb3J5JywgLyogWl9NRU1fRVJST1IgICAgICgtNCkgKi9cbiAgJy01JzogICAnYnVmZmVyIGVycm9yJywgICAgICAgIC8qIFpfQlVGX0VSUk9SICAgICAoLTUpICovXG4gICctNic6ICAgJ2luY29tcGF0aWJsZSB2ZXJzaW9uJyAvKiBaX1ZFUlNJT05fRVJST1IgKC02KSAqL1xufTtcblxuLy8gKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyXG4vLyAoQykgMjAxNC0yMDE3IFZpdGFseSBQdXpyaW4gYW5kIEFuZHJleSBUdXBpdHNpblxuLy9cbi8vIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkXG4vLyB3YXJyYW50eS4gSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXNcbi8vIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsXG4vLyBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0XG4vLyBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6XG4vL1xuLy8gMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3Rcbi8vICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmVcbi8vICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlXG4vLyAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuXG4vLyAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZVxuLy8gICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuXG4vLyAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLlxuXG52YXIgY29uc3RhbnRzJDIgPSB7XG5cbiAgLyogQWxsb3dlZCBmbHVzaCB2YWx1ZXM7IHNlZSBkZWZsYXRlKCkgYW5kIGluZmxhdGUoKSBiZWxvdyBmb3IgZGV0YWlscyAqL1xuICBaX05PX0ZMVVNIOiAgICAgICAgIDAsXG4gIFpfUEFSVElBTF9GTFVTSDogICAgMSxcbiAgWl9TWU5DX0ZMVVNIOiAgICAgICAyLFxuICBaX0ZVTExfRkxVU0g6ICAgICAgIDMsXG4gIFpfRklOSVNIOiAgICAgICAgICAgNCxcbiAgWl9CTE9DSzogICAgICAgICAgICA1LFxuICBaX1RSRUVTOiAgICAgICAgICAgIDYsXG5cbiAgLyogUmV0dXJuIGNvZGVzIGZvciB0aGUgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBmdW5jdGlvbnMuIE5lZ2F0aXZlIHZhbHVlc1xuICAqIGFyZSBlcnJvcnMsIHBvc2l0aXZlIHZhbHVlcyBhcmUgdXNlZCBmb3Igc3BlY2lhbCBidXQgbm9ybWFsIGV2ZW50cy5cbiAgKi9cbiAgWl9PSzogICAgICAgICAgICAgICAwLFxuICBaX1NUUkVBTV9FTkQ6ICAgICAgIDEsXG4gIFpfTkVFRF9ESUNUOiAgICAgICAgMixcbiAgWl9FUlJOTzogICAgICAgICAgIC0xLFxuICBaX1NUUkVBTV9FUlJPUjogICAgLTIsXG4gIFpfREFUQV9FUlJPUjogICAgICAtMyxcbiAgWl9NRU1fRVJST1I6ICAgICAgIC00LFxuICBaX0JVRl9FUlJPUjogICAgICAgLTUsXG4gIC8vWl9WRVJTSU9OX0VSUk9SOiAtNixcblxuICAvKiBjb21wcmVzc2lvbiBsZXZlbHMgKi9cbiAgWl9OT19DT01QUkVTU0lPTjogICAgICAgICAwLFxuICBaX0JFU1RfU1BFRUQ6ICAgICAgICAgICAgIDEsXG4gIFpfQkVTVF9DT01QUkVTU0lPTjogICAgICAgOSxcbiAgWl9ERUZBVUxUX0NPTVBSRVNTSU9OOiAgIC0xLFxuXG5cbiAgWl9GSUxURVJFRDogICAgICAgICAgICAgICAxLFxuICBaX0hVRkZNQU5fT05MWTogICAgICAgICAgIDIsXG4gIFpfUkxFOiAgICAgICAgICAgICAgICAgICAgMyxcbiAgWl9GSVhFRDogICAgICAgICAgICAgICAgICA0LFxuICBaX0RFRkFVTFRfU1RSQVRFR1k6ICAgICAgIDAsXG5cbiAgLyogUG9zc2libGUgdmFsdWVzIG9mIHRoZSBkYXRhX3R5cGUgZmllbGQgKHRob3VnaCBzZWUgaW5mbGF0ZSgpKSAqL1xuICBaX0JJTkFSWTogICAgICAgICAgICAgICAgIDAsXG4gIFpfVEVYVDogICAgICAgICAgICAgICAgICAgMSxcbiAgLy9aX0FTQ0lJOiAgICAgICAgICAgICAgICAxLCAvLyA9IFpfVEVYVCAoZGVwcmVjYXRlZClcbiAgWl9VTktOT1dOOiAgICAgICAgICAgICAgICAyLFxuXG4gIC8qIFRoZSBkZWZsYXRlIGNvbXByZXNzaW9uIG1ldGhvZCAqL1xuICBaX0RFRkxBVEVEOiAgICAgICAgICAgICAgIDhcbiAgLy9aX05VTEw6ICAgICAgICAgICAgICAgICBudWxsIC8vIFVzZSAtMSBvciBudWxsIGlubGluZSwgZGVwZW5kaW5nIG9uIHZhciB0eXBlXG59O1xuXG4vLyAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXJcbi8vIChDKSAyMDE0LTIwMTcgVml0YWx5IFB1enJpbiBhbmQgQW5kcmV5IFR1cGl0c2luXG4vL1xuLy8gVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWRcbi8vIHdhcnJhbnR5LiBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlc1xuLy8gYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSxcbi8vIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXRcbi8vIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcbi8vXG4vLyAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdFxuLy8gICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZVxuLy8gICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmVcbi8vICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC5cbi8vIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlXG4vLyAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS5cbi8vIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uXG5cbmNvbnN0IHsgX3RyX2luaXQsIF90cl9zdG9yZWRfYmxvY2ssIF90cl9mbHVzaF9ibG9jaywgX3RyX3RhbGx5LCBfdHJfYWxpZ24gfSA9IHRyZWVzO1xuXG5cblxuXG4vKiBQdWJsaWMgY29uc3RhbnRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuY29uc3Qge1xuICBaX05PX0ZMVVNIOiBaX05PX0ZMVVNIJDIsIFpfUEFSVElBTF9GTFVTSCwgWl9GVUxMX0ZMVVNIOiBaX0ZVTExfRkxVU0gkMSwgWl9GSU5JU0g6IFpfRklOSVNIJDMsIFpfQkxPQ0s6IFpfQkxPQ0skMSxcbiAgWl9PSzogWl9PSyQzLCBaX1NUUkVBTV9FTkQ6IFpfU1RSRUFNX0VORCQzLCBaX1NUUkVBTV9FUlJPUjogWl9TVFJFQU1fRVJST1IkMiwgWl9EQVRBX0VSUk9SOiBaX0RBVEFfRVJST1IkMiwgWl9CVUZfRVJST1I6IFpfQlVGX0VSUk9SJDIsXG4gIFpfREVGQVVMVF9DT01QUkVTU0lPTjogWl9ERUZBVUxUX0NPTVBSRVNTSU9OJDEsXG4gIFpfRklMVEVSRUQsIFpfSFVGRk1BTl9PTkxZLCBaX1JMRSwgWl9GSVhFRCwgWl9ERUZBVUxUX1NUUkFURUdZOiBaX0RFRkFVTFRfU1RSQVRFR1kkMSxcbiAgWl9VTktOT1dOLFxuICBaX0RFRkxBVEVEOiBaX0RFRkxBVEVEJDJcbn0gPSBjb25zdGFudHMkMjtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuXG5jb25zdCBNQVhfTUVNX0xFVkVMID0gOTtcbi8qIE1heGltdW0gdmFsdWUgZm9yIG1lbUxldmVsIGluIGRlZmxhdGVJbml0MiAqL1xuY29uc3QgTUFYX1dCSVRTJDEgPSAxNTtcbi8qIDMySyBMWjc3IHdpbmRvdyAqL1xuY29uc3QgREVGX01FTV9MRVZFTCA9IDg7XG5cblxuY29uc3QgTEVOR1RIX0NPREVTICA9IDI5O1xuLyogbnVtYmVyIG9mIGxlbmd0aCBjb2Rlcywgbm90IGNvdW50aW5nIHRoZSBzcGVjaWFsIEVORF9CTE9DSyBjb2RlICovXG5jb25zdCBMSVRFUkFMUyAgICAgID0gMjU2O1xuLyogbnVtYmVyIG9mIGxpdGVyYWwgYnl0ZXMgMC4uMjU1ICovXG5jb25zdCBMX0NPREVTICAgICAgID0gTElURVJBTFMgKyAxICsgTEVOR1RIX0NPREVTO1xuLyogbnVtYmVyIG9mIExpdGVyYWwgb3IgTGVuZ3RoIGNvZGVzLCBpbmNsdWRpbmcgdGhlIEVORF9CTE9DSyBjb2RlICovXG5jb25zdCBEX0NPREVTICAgICAgID0gMzA7XG4vKiBudW1iZXIgb2YgZGlzdGFuY2UgY29kZXMgKi9cbmNvbnN0IEJMX0NPREVTICAgICAgPSAxOTtcbi8qIG51bWJlciBvZiBjb2RlcyB1c2VkIHRvIHRyYW5zZmVyIHRoZSBiaXQgbGVuZ3RocyAqL1xuY29uc3QgSEVBUF9TSVpFICAgICA9IDIgKiBMX0NPREVTICsgMTtcbi8qIG1heGltdW0gaGVhcCBzaXplICovXG5jb25zdCBNQVhfQklUUyAgPSAxNTtcbi8qIEFsbCBjb2RlcyBtdXN0IG5vdCBleGNlZWQgTUFYX0JJVFMgYml0cyAqL1xuXG5jb25zdCBNSU5fTUFUQ0ggPSAzO1xuY29uc3QgTUFYX01BVENIID0gMjU4O1xuY29uc3QgTUlOX0xPT0tBSEVBRCA9IChNQVhfTUFUQ0ggKyBNSU5fTUFUQ0ggKyAxKTtcblxuY29uc3QgUFJFU0VUX0RJQ1QgPSAweDIwO1xuXG5jb25zdCBJTklUX1NUQVRFICAgID0gIDQyOyAgICAvKiB6bGliIGhlYWRlciAtPiBCVVNZX1NUQVRFICovXG4vLyNpZmRlZiBHWklQXG5jb25zdCBHWklQX1NUQVRFICAgID0gIDU3OyAgICAvKiBnemlwIGhlYWRlciAtPiBCVVNZX1NUQVRFIHwgRVhUUkFfU1RBVEUgKi9cbi8vI2VuZGlmXG5jb25zdCBFWFRSQV9TVEFURSAgID0gIDY5OyAgICAvKiBnemlwIGV4dHJhIGJsb2NrIC0+IE5BTUVfU1RBVEUgKi9cbmNvbnN0IE5BTUVfU1RBVEUgICAgPSAgNzM7ICAgIC8qIGd6aXAgZmlsZSBuYW1lIC0+IENPTU1FTlRfU1RBVEUgKi9cbmNvbnN0IENPTU1FTlRfU1RBVEUgPSAgOTE7ICAgIC8qIGd6aXAgY29tbWVudCAtPiBIQ1JDX1NUQVRFICovXG5jb25zdCBIQ1JDX1NUQVRFICAgID0gMTAzOyAgICAvKiBnemlwIGhlYWRlciBDUkMgLT4gQlVTWV9TVEFURSAqL1xuY29uc3QgQlVTWV9TVEFURSAgICA9IDExMzsgICAgLyogZGVmbGF0ZSAtPiBGSU5JU0hfU1RBVEUgKi9cbmNvbnN0IEZJTklTSF9TVEFURSAgPSA2NjY7ICAgIC8qIHN0cmVhbSBjb21wbGV0ZSAqL1xuXG5jb25zdCBCU19ORUVEX01PUkUgICAgICA9IDE7IC8qIGJsb2NrIG5vdCBjb21wbGV0ZWQsIG5lZWQgbW9yZSBpbnB1dCBvciBtb3JlIG91dHB1dCAqL1xuY29uc3QgQlNfQkxPQ0tfRE9ORSAgICAgPSAyOyAvKiBibG9jayBmbHVzaCBwZXJmb3JtZWQgKi9cbmNvbnN0IEJTX0ZJTklTSF9TVEFSVEVEID0gMzsgLyogZmluaXNoIHN0YXJ0ZWQsIG5lZWQgb25seSBtb3JlIG91dHB1dCBhdCBuZXh0IGRlZmxhdGUgKi9cbmNvbnN0IEJTX0ZJTklTSF9ET05FICAgID0gNDsgLyogZmluaXNoIGRvbmUsIGFjY2VwdCBubyBtb3JlIGlucHV0IG9yIG91dHB1dCAqL1xuXG5jb25zdCBPU19DT0RFID0gMHgwMzsgLy8gVW5peCA6KSAuIERvbid0IGRldGVjdCwgdXNlIHRoaXMgZGVmYXVsdC5cblxuY29uc3QgZXJyID0gKHN0cm0sIGVycm9yQ29kZSkgPT4ge1xuICBzdHJtLm1zZyA9IG1lc3NhZ2VzW2Vycm9yQ29kZV07XG4gIHJldHVybiBlcnJvckNvZGU7XG59O1xuXG5jb25zdCByYW5rID0gKGYpID0+IHtcbiAgcmV0dXJuICgoZikgKiAyKSAtICgoZikgPiA0ID8gOSA6IDApO1xufTtcblxuY29uc3QgemVybyA9IChidWYpID0+IHtcbiAgbGV0IGxlbiA9IGJ1Zi5sZW5ndGg7IHdoaWxlICgtLWxlbiA+PSAwKSB7IGJ1ZltsZW5dID0gMDsgfVxufTtcblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBTbGlkZSB0aGUgaGFzaCB0YWJsZSB3aGVuIHNsaWRpbmcgdGhlIHdpbmRvdyBkb3duIChjb3VsZCBiZSBhdm9pZGVkIHdpdGggMzJcbiAqIGJpdCB2YWx1ZXMgYXQgdGhlIGV4cGVuc2Ugb2YgbWVtb3J5IHVzYWdlKS4gV2Ugc2xpZGUgZXZlbiB3aGVuIGxldmVsID09IDAgdG9cbiAqIGtlZXAgdGhlIGhhc2ggdGFibGUgY29uc2lzdGVudCBpZiB3ZSBzd2l0Y2ggYmFjayB0byBsZXZlbCA+IDAgbGF0ZXIuXG4gKi9cbmNvbnN0IHNsaWRlX2hhc2ggPSAocykgPT4ge1xuICBsZXQgbiwgbTtcbiAgbGV0IHA7XG4gIGxldCB3c2l6ZSA9IHMud19zaXplO1xuXG4gIG4gPSBzLmhhc2hfc2l6ZTtcbiAgcCA9IG47XG4gIGRvIHtcbiAgICBtID0gcy5oZWFkWy0tcF07XG4gICAgcy5oZWFkW3BdID0gKG0gPj0gd3NpemUgPyBtIC0gd3NpemUgOiAwKTtcbiAgfSB3aGlsZSAoLS1uKTtcbiAgbiA9IHdzaXplO1xuLy8jaWZuZGVmIEZBU1RFU1RcbiAgcCA9IG47XG4gIGRvIHtcbiAgICBtID0gcy5wcmV2Wy0tcF07XG4gICAgcy5wcmV2W3BdID0gKG0gPj0gd3NpemUgPyBtIC0gd3NpemUgOiAwKTtcbiAgICAvKiBJZiBuIGlzIG5vdCBvbiBhbnkgaGFzaCBjaGFpbiwgcHJldltuXSBpcyBnYXJiYWdlIGJ1dFxuICAgICAqIGl0cyB2YWx1ZSB3aWxsIG5ldmVyIGJlIHVzZWQuXG4gICAgICovXG4gIH0gd2hpbGUgKC0tbik7XG4vLyNlbmRpZlxufTtcblxuLyogZXNsaW50LWRpc2FibGUgbmV3LWNhcCAqL1xubGV0IEhBU0ggPSAocywgcHJldiwgZGF0YSkgPT4gKChwcmV2IDw8IHMuaGFzaF9zaGlmdCkgXiBkYXRhKSAmIHMuaGFzaF9tYXNrO1xuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogSW5zZXJ0IHN0cmluZyBzdHIgaW4gdGhlIGRpY3Rpb25hcnkgYW5kIHNldCBtYXRjaF9oZWFkIHRvIHRoZSBwcmV2aW91cyBoZWFkXG4gKiBvZiB0aGUgaGFzaCBjaGFpbiAodGhlIG1vc3QgcmVjZW50IHN0cmluZyB3aXRoIHNhbWUgaGFzaCBrZXkpLiBSZXR1cm5cbiAqIHRoZSBwcmV2aW91cyBsZW5ndGggb2YgdGhlIGhhc2ggY2hhaW4uXG4gKiBJTiAgYXNzZXJ0aW9uOiBhbGwgY2FsbHMgdG8gSU5TRVJUX1NUUklORyBhcmUgbWFkZSB3aXRoIGNvbnNlY3V0aXZlIGlucHV0XG4gKiAgICBjaGFyYWN0ZXJzIGFuZCB0aGUgZmlyc3QgTUlOX01BVENIIGJ5dGVzIG9mIHN0ciBhcmUgdmFsaWQgKGV4Y2VwdCBmb3JcbiAqICAgIHRoZSBsYXN0IE1JTl9NQVRDSC0xIGJ5dGVzIG9mIHRoZSBpbnB1dCBmaWxlKS5cbiAqL1xuY29uc3QgSU5TRVJUX1NUUklORyA9IChzLCBzdHIpID0+IHtcbiAgbGV0IGg7XG4gIGlmIChzLmxlZ2FjeV9oYXNoKSB7XG4gICAgLyogVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1soc3RyKSArIChNSU5fTUFUQ0gtMSldKTsgKi9cbiAgICBoID0gcy5pbnNfaCA9IEhBU0gocywgcy5pbnNfaCwgcy53aW5kb3dbc3RyICsgTUlOX01BVENIIC0gMV0pO1xuICB9IGVsc2Uge1xuICAgIC8vIEFOWkFDKysgaGFzaDogcmVhZHMgNCBieXRlcywgbWF0Y2hlcyBub2RlLmpzIHpsaWIgb3V0cHV0IChsZWdhY3lIYXNoXG4gICAgLy8gcmVzdG9yZXMgY2xhc3NpYyB6bGliIGhhc2gpLiBGYXN0ZXIsIHdpdGggZmV3ZXIgY29sbGlzaW9ucy5cbiAgICBjb25zdCB3ID0gcy53aW5kb3c7XG4gICAgLy8gUmVhZCA0IGJ5dGVzIGxpdHRsZS1lbmRpYW4uIE1hdGguaW11bCByZXByb2R1Y2VzIEMgdWludDMyIG92ZXJmbG93IGluXG4gICAgLy8gYCh2YWx1ZSAqIDY2NTIxICsgNjY1MjEpID4+IDE2YCBleGFjdGx5LlxuICAgIGNvbnN0IHZhbHVlID0gd1tzdHJdIHwgKHdbc3RyICsgMV0gPDwgOCkgfCAod1tzdHIgKyAyXSA8PCAxNikgfCAod1tzdHIgKyAzXSA8PCAyNCk7XG4gICAgaCA9IHMuaW5zX2ggPSAoKE1hdGguaW11bCh2YWx1ZSwgNjY1MjEpICsgNjY1MjEpID4+PiAxNikgJiBzLmhhc2hfbWFzaztcbiAgfVxuICBjb25zdCBoYXNoX2hlYWQgPSBzLnByZXZbc3RyICYgcy53X21hc2tdID0gcy5oZWFkW2hdO1xuICBzLmhlYWRbaF0gPSBzdHI7XG4gIHJldHVybiBoYXNoX2hlYWQ7XG59O1xuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEZsdXNoIGFzIG11Y2ggcGVuZGluZyBvdXRwdXQgYXMgcG9zc2libGUuIEFsbCBkZWZsYXRlKCkgb3V0cHV0LCBleGNlcHQgZm9yXG4gKiBzb21lIGRlZmxhdGVfc3RvcmVkKCkgb3V0cHV0LCBnb2VzIHRocm91Z2ggdGhpcyBmdW5jdGlvbiBzbyBzb21lXG4gKiBhcHBsaWNhdGlvbnMgbWF5IHdpc2ggdG8gbW9kaWZ5IGl0IHRvIGF2b2lkIGFsbG9jYXRpbmcgYSBsYXJnZVxuICogc3RybS0+bmV4dF9vdXQgYnVmZmVyIGFuZCBjb3B5aW5nIGludG8gaXQuIChTZWUgYWxzbyByZWFkX2J1ZigpKS5cbiAqL1xuY29uc3QgZmx1c2hfcGVuZGluZyA9IChzdHJtKSA9PiB7XG4gIGNvbnN0IHMgPSBzdHJtLnN0YXRlO1xuXG4gIC8vX3RyX2ZsdXNoX2JpdHMocyk7XG4gIGxldCBsZW4gPSBzLnBlbmRpbmc7XG4gIGlmIChsZW4gPiBzdHJtLmF2YWlsX291dCkge1xuICAgIGxlbiA9IHN0cm0uYXZhaWxfb3V0O1xuICB9XG4gIGlmIChsZW4gPT09IDApIHsgcmV0dXJuOyB9XG5cbiAgc3RybS5vdXRwdXQuc2V0KHMucGVuZGluZ19idWYuc3ViYXJyYXkocy5wZW5kaW5nX291dCwgcy5wZW5kaW5nX291dCArIGxlbiksIHN0cm0ubmV4dF9vdXQpO1xuICBzdHJtLm5leHRfb3V0ICArPSBsZW47XG4gIHMucGVuZGluZ19vdXQgICs9IGxlbjtcbiAgc3RybS50b3RhbF9vdXQgKz0gbGVuO1xuICBzdHJtLmF2YWlsX291dCAtPSBsZW47XG4gIHMucGVuZGluZyAgICAgIC09IGxlbjtcbiAgaWYgKHMucGVuZGluZyA9PT0gMCkge1xuICAgIHMucGVuZGluZ19vdXQgPSAwO1xuICB9XG59O1xuXG5cbmNvbnN0IGZsdXNoX2Jsb2NrX29ubHkgPSAocywgbGFzdCkgPT4ge1xuICBfdHJfZmx1c2hfYmxvY2socywgKHMuYmxvY2tfc3RhcnQgPj0gMCA/IHMuYmxvY2tfc3RhcnQgOiAtMSksIHMuc3Ryc3RhcnQgLSBzLmJsb2NrX3N0YXJ0LCBsYXN0KTtcbiAgcy5ibG9ja19zdGFydCA9IHMuc3Ryc3RhcnQ7XG4gIGZsdXNoX3BlbmRpbmcocy5zdHJtKTtcbn07XG5cblxuY29uc3QgcHV0X2J5dGUgPSAocywgYikgPT4ge1xuICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IGI7XG59O1xuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFB1dCBhIHNob3J0IGluIHRoZSBwZW5kaW5nIGJ1ZmZlci4gVGhlIDE2LWJpdCB2YWx1ZSBpcyBwdXQgaW4gTVNCIG9yZGVyLlxuICogSU4gYXNzZXJ0aW9uOiB0aGUgc3RyZWFtIHN0YXRlIGlzIGNvcnJlY3QgYW5kIHRoZXJlIGlzIGVub3VnaCByb29tIGluXG4gKiBwZW5kaW5nX2J1Zi5cbiAqL1xuY29uc3QgcHV0U2hvcnRNU0IgPSAocywgYikgPT4ge1xuXG4gIC8vICBwdXRfYnl0ZShzLCAoQnl0ZSkoYiA+PiA4KSk7XG4vLyAgcHV0X2J5dGUocywgKEJ5dGUpKGIgJiAweGZmKSk7XG4gIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gKGIgPj4+IDgpICYgMHhmZjtcbiAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSBiICYgMHhmZjtcbn07XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBSZWFkIGEgbmV3IGJ1ZmZlciBmcm9tIHRoZSBjdXJyZW50IGlucHV0IHN0cmVhbSwgdXBkYXRlIHRoZSBhZGxlcjMyXG4gKiBhbmQgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuICBBbGwgZGVmbGF0ZSgpIGlucHV0IGdvZXMgdGhyb3VnaFxuICogdGhpcyBmdW5jdGlvbiBzbyBzb21lIGFwcGxpY2F0aW9ucyBtYXkgd2lzaCB0byBtb2RpZnkgaXQgdG8gYXZvaWRcbiAqIGFsbG9jYXRpbmcgYSBsYXJnZSBzdHJtLT5pbnB1dCBidWZmZXIgYW5kIGNvcHlpbmcgZnJvbSBpdC5cbiAqIChTZWUgYWxzbyBmbHVzaF9wZW5kaW5nKCkpLlxuICovXG5jb25zdCByZWFkX2J1ZiA9IChzdHJtLCBidWYsIHN0YXJ0LCBzaXplKSA9PiB7XG5cbiAgbGV0IGxlbiA9IHN0cm0uYXZhaWxfaW47XG5cbiAgaWYgKGxlbiA+IHNpemUpIHsgbGVuID0gc2l6ZTsgfVxuICBpZiAobGVuID09PSAwKSB7IHJldHVybiAwOyB9XG5cbiAgc3RybS5hdmFpbF9pbiAtPSBsZW47XG5cbiAgLy8gem1lbWNweShidWYsIHN0cm0tPm5leHRfaW4sIGxlbik7XG4gIGJ1Zi5zZXQoc3RybS5pbnB1dC5zdWJhcnJheShzdHJtLm5leHRfaW4sIHN0cm0ubmV4dF9pbiArIGxlbiksIHN0YXJ0KTtcbiAgaWYgKHN0cm0uc3RhdGUud3JhcCA9PT0gMSkge1xuICAgIHN0cm0uYWRsZXIgPSBhZGxlcjMyXzEoc3RybS5hZGxlciwgYnVmLCBsZW4sIHN0YXJ0KTtcbiAgfVxuXG4gIGVsc2UgaWYgKHN0cm0uc3RhdGUud3JhcCA9PT0gMikge1xuICAgIHN0cm0uYWRsZXIgPSBjcmMzMl8xKHN0cm0uYWRsZXIsIGJ1ZiwgbGVuLCBzdGFydCk7XG4gIH1cblxuICBzdHJtLm5leHRfaW4gKz0gbGVuO1xuICBzdHJtLnRvdGFsX2luICs9IGxlbjtcblxuICByZXR1cm4gbGVuO1xufTtcblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNldCBtYXRjaF9zdGFydCB0byB0aGUgbG9uZ2VzdCBtYXRjaCBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gc3RyaW5nIGFuZFxuICogcmV0dXJuIGl0cyBsZW5ndGguIE1hdGNoZXMgc2hvcnRlciBvciBlcXVhbCB0byBwcmV2X2xlbmd0aCBhcmUgZGlzY2FyZGVkLFxuICogaW4gd2hpY2ggY2FzZSB0aGUgcmVzdWx0IGlzIGVxdWFsIHRvIHByZXZfbGVuZ3RoIGFuZCBtYXRjaF9zdGFydCBpc1xuICogZ2FyYmFnZS5cbiAqIElOIGFzc2VydGlvbnM6IGN1cl9tYXRjaCBpcyB0aGUgaGVhZCBvZiB0aGUgaGFzaCBjaGFpbiBmb3IgdGhlIGN1cnJlbnRcbiAqICAgc3RyaW5nIChzdHJzdGFydCkgYW5kIGl0cyBkaXN0YW5jZSBpcyA8PSBNQVhfRElTVCwgYW5kIHByZXZfbGVuZ3RoID49IDFcbiAqIE9VVCBhc3NlcnRpb246IHRoZSBtYXRjaCBsZW5ndGggaXMgbm90IGdyZWF0ZXIgdGhhbiBzLT5sb29rYWhlYWQuXG4gKi9cbmNvbnN0IGxvbmdlc3RfbWF0Y2ggPSAocywgY3VyX21hdGNoKSA9PiB7XG5cbiAgbGV0IGNoYWluX2xlbmd0aCA9IHMubWF4X2NoYWluX2xlbmd0aDsgICAgICAvKiBtYXggaGFzaCBjaGFpbiBsZW5ndGggKi9cbiAgbGV0IHNjYW4gPSBzLnN0cnN0YXJ0OyAvKiBjdXJyZW50IHN0cmluZyAqL1xuICBsZXQgbWF0Y2g7ICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXRjaGVkIHN0cmluZyAqL1xuICBsZXQgbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBjdXJyZW50IG1hdGNoICovXG4gIGxldCBiZXN0X2xlbiA9IHMucHJldl9sZW5ndGg7ICAgICAgICAgICAgICAvKiBiZXN0IG1hdGNoIGxlbmd0aCBzbyBmYXIgKi9cbiAgbGV0IG5pY2VfbWF0Y2ggPSBzLm5pY2VfbWF0Y2g7ICAgICAgICAgICAgIC8qIHN0b3AgaWYgbWF0Y2ggbG9uZyBlbm91Z2ggKi9cbiAgY29uc3QgbGltaXQgPSAocy5zdHJzdGFydCA+IChzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpKSA/XG4gICAgICBzLnN0cnN0YXJ0IC0gKHMud19zaXplIC0gTUlOX0xPT0tBSEVBRCkgOiAwLypOSUwqLztcblxuICBjb25zdCBfd2luID0gcy53aW5kb3c7IC8vIHNob3J0Y3V0XG5cbiAgY29uc3Qgd21hc2sgPSBzLndfbWFzaztcbiAgY29uc3QgcHJldiAgPSBzLnByZXY7XG5cbiAgLyogU3RvcCB3aGVuIGN1cl9tYXRjaCBiZWNvbWVzIDw9IGxpbWl0LiBUbyBzaW1wbGlmeSB0aGUgY29kZSxcbiAgICogd2UgcHJldmVudCBtYXRjaGVzIHdpdGggdGhlIHN0cmluZyBvZiB3aW5kb3cgaW5kZXggMC5cbiAgICovXG5cbiAgY29uc3Qgc3RyZW5kID0gcy5zdHJzdGFydCArIE1BWF9NQVRDSDtcbiAgbGV0IHNjYW5fZW5kMSAgPSBfd2luW3NjYW4gKyBiZXN0X2xlbiAtIDFdO1xuICBsZXQgc2Nhbl9lbmQgICA9IF93aW5bc2NhbiArIGJlc3RfbGVuXTtcblxuICAvKiBUaGUgY29kZSBpcyBvcHRpbWl6ZWQgZm9yIEhBU0hfQklUUyA+PSA4IGFuZCBNQVhfTUFUQ0gtMiBtdWx0aXBsZSBvZiAxNi5cbiAgICogSXQgaXMgZWFzeSB0byBnZXQgcmlkIG9mIHRoaXMgb3B0aW1pemF0aW9uIGlmIG5lY2Vzc2FyeS5cbiAgICovXG4gIC8vIEFzc2VydChzLT5oYXNoX2JpdHMgPj0gOCAmJiBNQVhfTUFUQ0ggPT0gMjU4LCBcIkNvZGUgdG9vIGNsZXZlclwiKTtcblxuICAvKiBEbyBub3Qgd2FzdGUgdG9vIG11Y2ggdGltZSBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBnb29kIG1hdGNoOiAqL1xuICBpZiAocy5wcmV2X2xlbmd0aCA+PSBzLmdvb2RfbWF0Y2gpIHtcbiAgICBjaGFpbl9sZW5ndGggPj49IDI7XG4gIH1cbiAgLyogRG8gbm90IGxvb2sgZm9yIG1hdGNoZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGlucHV0LiBUaGlzIGlzIG5lY2Vzc2FyeVxuICAgKiB0byBtYWtlIGRlZmxhdGUgZGV0ZXJtaW5pc3RpYy5cbiAgICovXG4gIGlmIChuaWNlX21hdGNoID4gcy5sb29rYWhlYWQpIHsgbmljZV9tYXRjaCA9IHMubG9va2FoZWFkOyB9XG5cbiAgLy8gQXNzZXJ0KCh1bGcpcy0+c3Ryc3RhcnQgPD0gcy0+d2luZG93X3NpemUtTUlOX0xPT0tBSEVBRCwgXCJuZWVkIGxvb2thaGVhZFwiKTtcblxuICBkbyB7XG4gICAgLy8gQXNzZXJ0KGN1cl9tYXRjaCA8IHMtPnN0cnN0YXJ0LCBcIm5vIGZ1dHVyZVwiKTtcbiAgICBtYXRjaCA9IGN1cl9tYXRjaDtcblxuICAgIC8qIFNraXAgdG8gbmV4dCBtYXRjaCBpZiB0aGUgbWF0Y2ggbGVuZ3RoIGNhbm5vdCBpbmNyZWFzZVxuICAgICAqIG9yIGlmIHRoZSBtYXRjaCBsZW5ndGggaXMgbGVzcyB0aGFuIDIuICBOb3RlIHRoYXQgdGhlIGNoZWNrcyBiZWxvd1xuICAgICAqIGZvciBpbnN1ZmZpY2llbnQgbG9va2FoZWFkIG9ubHkgb2NjdXIgb2NjYXNpb25hbGx5IGZvciBwZXJmb3JtYW5jZVxuICAgICAqIHJlYXNvbnMuICBUaGVyZWZvcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgd2lsbCBiZSBhY2Nlc3NlZCwgYW5kXG4gICAgICogY29uZGl0aW9uYWwganVtcHMgd2lsbCBiZSBtYWRlIHRoYXQgZGVwZW5kIG9uIHRob3NlIHZhbHVlcy5cbiAgICAgKiBIb3dldmVyIHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoIGlzIGxpbWl0ZWQgdG8gdGhlIGxvb2thaGVhZCwgc29cbiAgICAgKiB0aGUgb3V0cHV0IG9mIGRlZmxhdGUgaXMgbm90IGFmZmVjdGVkIGJ5IHRoZSB1bmluaXRpYWxpemVkIHZhbHVlcy5cbiAgICAgKi9cblxuICAgIGlmIChfd2luW21hdGNoICsgYmVzdF9sZW5dICAgICAhPT0gc2Nhbl9lbmQgIHx8XG4gICAgICAgIF93aW5bbWF0Y2ggKyBiZXN0X2xlbiAtIDFdICE9PSBzY2FuX2VuZDEgfHxcbiAgICAgICAgX3dpblttYXRjaF0gICAgICAgICAgICAgICAgIT09IF93aW5bc2Nhbl0gfHxcbiAgICAgICAgX3dpblsrK21hdGNoXSAgICAgICAgICAgICAgIT09IF93aW5bc2NhbiArIDFdKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKiBUaGUgY2hlY2sgYXQgYmVzdF9sZW4tMSBjYW4gYmUgcmVtb3ZlZCBiZWNhdXNlIGl0IHdpbGwgYmUgbWFkZVxuICAgICAqIGFnYWluIGxhdGVyLiAoVGhpcyBoZXVyaXN0aWMgaXMgbm90IGFsd2F5cyBhIHdpbi4pXG4gICAgICogSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjb21wYXJlIHNjYW5bMl0gYW5kIG1hdGNoWzJdIHNpbmNlIHRoZXlcbiAgICAgKiBhcmUgYWx3YXlzIGVxdWFsIHdoZW4gdGhlIG90aGVyIGJ5dGVzIG1hdGNoLCBnaXZlbiB0aGF0XG4gICAgICogdGhlIGhhc2gga2V5cyBhcmUgZXF1YWwgYW5kIHRoYXQgSEFTSF9CSVRTID49IDguXG4gICAgICovXG4gICAgc2NhbiArPSAyO1xuICAgIG1hdGNoKys7XG4gICAgLy8gQXNzZXJ0KCpzY2FuID09ICptYXRjaCwgXCJtYXRjaFsyXT9cIik7XG5cbiAgICAvKiBXZSBjaGVjayBmb3IgaW5zdWZmaWNpZW50IGxvb2thaGVhZCBvbmx5IGV2ZXJ5IDh0aCBjb21wYXJpc29uO1xuICAgICAqIHRoZSAyNTZ0aCBjaGVjayB3aWxsIGJlIG1hZGUgYXQgc3Ryc3RhcnQrMjU4LlxuICAgICAqL1xuICAgIGRvIHtcbiAgICAgIC8qanNoaW50IG5vZW1wdHk6ZmFsc2UqL1xuICAgIH0gd2hpbGUgKF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiZcbiAgICAgICAgICAgICBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmXG4gICAgICAgICAgICAgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJlxuICAgICAgICAgICAgIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiZcbiAgICAgICAgICAgICBzY2FuIDwgc3RyZW5kKTtcblxuICAgIC8vIEFzc2VydChzY2FuIDw9IHMtPndpbmRvdysodW5zaWduZWQpKHMtPndpbmRvd19zaXplLTEpLCBcIndpbGQgc2NhblwiKTtcblxuICAgIGxlbiA9IE1BWF9NQVRDSCAtIChzdHJlbmQgLSBzY2FuKTtcbiAgICBzY2FuID0gc3RyZW5kIC0gTUFYX01BVENIO1xuXG4gICAgaWYgKGxlbiA+IGJlc3RfbGVuKSB7XG4gICAgICBzLm1hdGNoX3N0YXJ0ID0gY3VyX21hdGNoO1xuICAgICAgYmVzdF9sZW4gPSBsZW47XG4gICAgICBpZiAobGVuID49IG5pY2VfbWF0Y2gpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBzY2FuX2VuZDEgID0gX3dpbltzY2FuICsgYmVzdF9sZW4gLSAxXTtcbiAgICAgIHNjYW5fZW5kICAgPSBfd2luW3NjYW4gKyBiZXN0X2xlbl07XG4gICAgfVxuICB9IHdoaWxlICgoY3VyX21hdGNoID0gcHJldltjdXJfbWF0Y2ggJiB3bWFza10pID4gbGltaXQgJiYgLS1jaGFpbl9sZW5ndGggIT09IDApO1xuXG4gIGlmIChiZXN0X2xlbiA8PSBzLmxvb2thaGVhZCkge1xuICAgIHJldHVybiBiZXN0X2xlbjtcbiAgfVxuICByZXR1cm4gcy5sb29rYWhlYWQ7XG59O1xuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogRmlsbCB0aGUgd2luZG93IHdoZW4gdGhlIGxvb2thaGVhZCBiZWNvbWVzIGluc3VmZmljaWVudC5cbiAqIFVwZGF0ZXMgc3Ryc3RhcnQgYW5kIGxvb2thaGVhZC5cbiAqXG4gKiBJTiBhc3NlcnRpb246IGxvb2thaGVhZCA8IE1JTl9MT09LQUhFQURcbiAqIE9VVCBhc3NlcnRpb25zOiBzdHJzdGFydCA8PSB3aW5kb3dfc2l6ZS1NSU5fTE9PS0FIRUFEXG4gKiAgICBBdCBsZWFzdCBvbmUgYnl0ZSBoYXMgYmVlbiByZWFkLCBvciBhdmFpbF9pbiA9PSAwOyByZWFkcyBhcmVcbiAqICAgIHBlcmZvcm1lZCBmb3IgYXQgbGVhc3QgdHdvIGJ5dGVzIChyZXF1aXJlZCBmb3IgdGhlIHppcCB0cmFuc2xhdGVfZW9sXG4gKiAgICBvcHRpb24gLS0gbm90IHN1cHBvcnRlZCBoZXJlKS5cbiAqL1xuY29uc3QgZmlsbF93aW5kb3cgPSAocykgPT4ge1xuXG4gIGNvbnN0IF93X3NpemUgPSBzLndfc2l6ZTtcbiAgbGV0IG4sIG1vcmUsIHN0cjtcblxuICAvL0Fzc2VydChzLT5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFELCBcImFscmVhZHkgZW5vdWdoIGxvb2thaGVhZFwiKTtcblxuICBkbyB7XG4gICAgbW9yZSA9IHMud2luZG93X3NpemUgLSBzLmxvb2thaGVhZCAtIHMuc3Ryc3RhcnQ7XG5cbiAgICAvLyBKUyBpbnRzIGhhdmUgMzIgYml0LCBibG9jayBiZWxvdyBub3QgbmVlZGVkXG4gICAgLyogRGVhbCB3aXRoICFAIyQlIDY0SyBsaW1pdDogKi9cbiAgICAvL2lmIChzaXplb2YoaW50KSA8PSAyKSB7XG4gICAgLy8gICAgaWYgKG1vcmUgPT0gMCAmJiBzLT5zdHJzdGFydCA9PSAwICYmIHMtPmxvb2thaGVhZCA9PSAwKSB7XG4gICAgLy8gICAgICAgIG1vcmUgPSB3c2l6ZTtcbiAgICAvL1xuICAgIC8vICB9IGVsc2UgaWYgKG1vcmUgPT0gKHVuc2lnbmVkKSgtMSkpIHtcbiAgICAvLyAgICAgICAgLyogVmVyeSB1bmxpa2VseSwgYnV0IHBvc3NpYmxlIG9uIDE2IGJpdCBtYWNoaW5lIGlmXG4gICAgLy8gICAgICAgICAqIHN0cnN0YXJ0ID09IDAgJiYgbG9va2FoZWFkID09IDEgKGlucHV0IGRvbmUgYSBieXRlIGF0IHRpbWUpXG4gICAgLy8gICAgICAgICAqL1xuICAgIC8vICAgICAgICBtb3JlLS07XG4gICAgLy8gICAgfVxuICAgIC8vfVxuXG5cbiAgICAvKiBJZiB0aGUgd2luZG93IGlzIGFsbW9zdCBmdWxsIGFuZCB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgbG9va2FoZWFkLFxuICAgICAqIG1vdmUgdGhlIHVwcGVyIGhhbGYgdG8gdGhlIGxvd2VyIG9uZSB0byBtYWtlIHJvb20gaW4gdGhlIHVwcGVyIGhhbGYuXG4gICAgICovXG4gICAgaWYgKHMuc3Ryc3RhcnQgPj0gX3dfc2l6ZSArIChfd19zaXplIC0gTUlOX0xPT0tBSEVBRCkpIHtcblxuICAgICAgcy53aW5kb3cuc2V0KHMud2luZG93LnN1YmFycmF5KF93X3NpemUsIF93X3NpemUgKyBfd19zaXplIC0gbW9yZSksIDApO1xuICAgICAgcy5tYXRjaF9zdGFydCAtPSBfd19zaXplO1xuICAgICAgcy5zdHJzdGFydCAtPSBfd19zaXplO1xuICAgICAgLyogd2Ugbm93IGhhdmUgc3Ryc3RhcnQgPj0gTUFYX0RJU1QgKi9cbiAgICAgIHMuYmxvY2tfc3RhcnQgLT0gX3dfc2l6ZTtcbiAgICAgIGlmIChzLmluc2VydCA+IHMuc3Ryc3RhcnQpIHtcbiAgICAgICAgcy5pbnNlcnQgPSBzLnN0cnN0YXJ0O1xuICAgICAgfVxuICAgICAgc2xpZGVfaGFzaChzKTtcbiAgICAgIG1vcmUgKz0gX3dfc2l6ZTtcbiAgICB9XG4gICAgaWYgKHMuc3RybS5hdmFpbF9pbiA9PT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLyogSWYgdGhlcmUgd2FzIG5vIHNsaWRpbmc6XG4gICAgICogICAgc3Ryc3RhcnQgPD0gV1NJWkUrTUFYX0RJU1QtMSAmJiBsb29rYWhlYWQgPD0gTUlOX0xPT0tBSEVBRCAtIDEgJiZcbiAgICAgKiAgICBtb3JlID09IHdpbmRvd19zaXplIC0gbG9va2FoZWFkIC0gc3Ryc3RhcnRcbiAgICAgKiA9PiBtb3JlID49IHdpbmRvd19zaXplIC0gKE1JTl9MT09LQUhFQUQtMSArIFdTSVpFICsgTUFYX0RJU1QtMSlcbiAgICAgKiA9PiBtb3JlID49IHdpbmRvd19zaXplIC0gMipXU0laRSArIDJcbiAgICAgKiBJbiB0aGUgQklHX01FTSBvciBNTUFQIGNhc2UgKG5vdCB5ZXQgc3VwcG9ydGVkKSxcbiAgICAgKiAgIHdpbmRvd19zaXplID09IGlucHV0X3NpemUgKyBNSU5fTE9PS0FIRUFEICAmJlxuICAgICAqICAgc3Ryc3RhcnQgKyBzLT5sb29rYWhlYWQgPD0gaW5wdXRfc2l6ZSA9PiBtb3JlID49IE1JTl9MT09LQUhFQUQuXG4gICAgICogT3RoZXJ3aXNlLCB3aW5kb3dfc2l6ZSA9PSAyKldTSVpFIHNvIG1vcmUgPj0gMi5cbiAgICAgKiBJZiB0aGVyZSB3YXMgc2xpZGluZywgbW9yZSA+PSBXU0laRS4gU28gaW4gYWxsIGNhc2VzLCBtb3JlID49IDIuXG4gICAgICovXG4gICAgLy9Bc3NlcnQobW9yZSA+PSAyLCBcIm1vcmUgPCAyXCIpO1xuICAgIG4gPSByZWFkX2J1ZihzLnN0cm0sIHMud2luZG93LCBzLnN0cnN0YXJ0ICsgcy5sb29rYWhlYWQsIG1vcmUpO1xuICAgIHMubG9va2FoZWFkICs9IG47XG5cbiAgICAvKiBJbml0aWFsaXplIHRoZSBoYXNoIHZhbHVlIG5vdyB0aGF0IHdlIGhhdmUgc29tZSBpbnB1dDogKi9cbiAgICBpZiAoIXMubGVnYWN5X2hhc2gpIHtcbiAgICAgIC8qIFRoZSA0LWJ5dGUgaGFzaCByZWFkcyBvbmUgZXh0cmEgYnl0ZSwgc28gaXQgbmVlZHMgb25lIG1vcmUgYXZhaWxhYmxlLiAqL1xuICAgICAgaWYgKHMubG9va2FoZWFkICsgcy5pbnNlcnQgPiBNSU5fTUFUQ0gpIHtcbiAgICAgICAgc3RyID0gcy5zdHJzdGFydCAtIHMuaW5zZXJ0O1xuICAgICAgICB3aGlsZSAocy5pbnNlcnQpIHtcbiAgICAgICAgICBJTlNFUlRfU1RSSU5HKHMsIHN0cik7XG4gICAgICAgICAgc3RyKys7XG4gICAgICAgICAgcy5pbnNlcnQtLTtcbiAgICAgICAgICBpZiAocy5sb29rYWhlYWQgKyBzLmluc2VydCA8PSBNSU5fTUFUQ0gpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocy5sb29rYWhlYWQgKyBzLmluc2VydCA+PSBNSU5fTUFUQ0gpIHtcbiAgICAgIHN0ciA9IHMuc3Ryc3RhcnQgLSBzLmluc2VydDtcbiAgICAgIHMuaW5zX2ggPSBzLndpbmRvd1tzdHJdO1xuXG4gICAgICAvKiBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3N0ciArIDFdKTsgKi9cbiAgICAgIHMuaW5zX2ggPSBIQVNIKHMsIHMuaW5zX2gsIHMud2luZG93W3N0ciArIDFdKTtcbi8vI2lmIE1JTl9NQVRDSCAhPSAzXG4vLyAgICAgICAgQ2FsbCB1cGRhdGVfaGFzaCgpIE1JTl9NQVRDSC0zIG1vcmUgdGltZXNcbi8vI2VuZGlmXG4gICAgICB3aGlsZSAocy5pbnNlcnQpIHtcbiAgICAgICAgSU5TRVJUX1NUUklORyhzLCBzdHIpO1xuICAgICAgICBzdHIrKztcbiAgICAgICAgcy5pbnNlcnQtLTtcbiAgICAgICAgaWYgKHMubG9va2FoZWFkICsgcy5pbnNlcnQgPCBNSU5fTUFUQ0gpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvKiBJZiB0aGUgd2hvbGUgaW5wdXQgaGFzIGxlc3MgdGhhbiBNSU5fTUFUQ0ggYnl0ZXMsIGluc19oIGlzIGdhcmJhZ2UsXG4gICAgICogYnV0IHRoaXMgaXMgbm90IGltcG9ydGFudCBzaW5jZSBvbmx5IGxpdGVyYWwgYnl0ZXMgd2lsbCBiZSBlbWl0dGVkLlxuICAgICAqL1xuXG4gIH0gd2hpbGUgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCAmJiBzLnN0cm0uYXZhaWxfaW4gIT09IDApO1xuXG4gIC8qIElmIHRoZSBXSU5fSU5JVCBieXRlcyBhZnRlciB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGRhdGEgaGF2ZSBuZXZlciBiZWVuXG4gICAqIHdyaXR0ZW4sIHRoZW4gemVybyB0aG9zZSBieXRlcyBpbiBvcmRlciB0byBhdm9pZCBtZW1vcnkgY2hlY2sgcmVwb3J0cyBvZlxuICAgKiB0aGUgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgKG9yIHVuaW5pdGlhbGlzZWQgYXMgSnVsaWFuIHdyaXRlcykgYnl0ZXMgYnlcbiAgICogdGhlIGxvbmdlc3QgbWF0Y2ggcm91dGluZXMuICBVcGRhdGUgdGhlIGhpZ2ggd2F0ZXIgbWFyayBmb3IgdGhlIG5leHRcbiAgICogdGltZSB0aHJvdWdoIGhlcmUuICBXSU5fSU5JVCBpcyBzZXQgdG8gTUFYX01BVENIIHNpbmNlIHRoZSBsb25nZXN0IG1hdGNoXG4gICAqIHJvdXRpbmVzIGFsbG93IHNjYW5uaW5nIHRvIHN0cnN0YXJ0ICsgTUFYX01BVENILCBpZ25vcmluZyBsb29rYWhlYWQuXG4gICAqL1xuLy8gIGlmIChzLmhpZ2hfd2F0ZXIgPCBzLndpbmRvd19zaXplKSB7XG4vLyAgICBjb25zdCBjdXJyID0gcy5zdHJzdGFydCArIHMubG9va2FoZWFkO1xuLy8gICAgbGV0IGluaXQgPSAwO1xuLy9cbi8vICAgIGlmIChzLmhpZ2hfd2F0ZXIgPCBjdXJyKSB7XG4vLyAgICAgIC8qIFByZXZpb3VzIGhpZ2ggd2F0ZXIgbWFyayBiZWxvdyBjdXJyZW50IGRhdGEgLS0gemVybyBXSU5fSU5JVFxuLy8gICAgICAgKiBieXRlcyBvciB1cCB0byBlbmQgb2Ygd2luZG93LCB3aGljaGV2ZXIgaXMgbGVzcy5cbi8vICAgICAgICovXG4vLyAgICAgIGluaXQgPSBzLndpbmRvd19zaXplIC0gY3Vycjtcbi8vICAgICAgaWYgKGluaXQgPiBXSU5fSU5JVClcbi8vICAgICAgICBpbml0ID0gV0lOX0lOSVQ7XG4vLyAgICAgIHptZW16ZXJvKHMtPndpbmRvdyArIGN1cnIsICh1bnNpZ25lZClpbml0KTtcbi8vICAgICAgcy0+aGlnaF93YXRlciA9IGN1cnIgKyBpbml0O1xuLy8gICAgfVxuLy8gICAgZWxzZSBpZiAocy0+aGlnaF93YXRlciA8ICh1bGcpY3VyciArIFdJTl9JTklUKSB7XG4vLyAgICAgIC8qIEhpZ2ggd2F0ZXIgbWFyayBhdCBvciBhYm92ZSBjdXJyZW50IGRhdGEsIGJ1dCBiZWxvdyBjdXJyZW50IGRhdGFcbi8vICAgICAgICogcGx1cyBXSU5fSU5JVCAtLSB6ZXJvIG91dCB0byBjdXJyZW50IGRhdGEgcGx1cyBXSU5fSU5JVCwgb3IgdXBcbi8vICAgICAgICogdG8gZW5kIG9mIHdpbmRvdywgd2hpY2hldmVyIGlzIGxlc3MuXG4vLyAgICAgICAqL1xuLy8gICAgICBpbml0ID0gKHVsZyljdXJyICsgV0lOX0lOSVQgLSBzLT5oaWdoX3dhdGVyO1xuLy8gICAgICBpZiAoaW5pdCA+IHMtPndpbmRvd19zaXplIC0gcy0+aGlnaF93YXRlcilcbi8vICAgICAgICBpbml0ID0gcy0+d2luZG93X3NpemUgLSBzLT5oaWdoX3dhdGVyO1xuLy8gICAgICB6bWVtemVybyhzLT53aW5kb3cgKyBzLT5oaWdoX3dhdGVyLCAodW5zaWduZWQpaW5pdCk7XG4vLyAgICAgIHMtPmhpZ2hfd2F0ZXIgKz0gaW5pdDtcbi8vICAgIH1cbi8vICB9XG4vL1xuLy8gIEFzc2VydCgodWxnKXMtPnN0cnN0YXJ0IDw9IHMtPndpbmRvd19zaXplIC0gTUlOX0xPT0tBSEVBRCxcbi8vICAgIFwibm90IGVub3VnaCByb29tIGZvciBzZWFyY2hcIik7XG59O1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvcHkgd2l0aG91dCBjb21wcmVzc2lvbiBhcyBtdWNoIGFzIHBvc3NpYmxlIGZyb20gdGhlIGlucHV0IHN0cmVhbSwgcmV0dXJuXG4gKiB0aGUgY3VycmVudCBibG9jayBzdGF0ZS5cbiAqXG4gKiBJbiBjYXNlIGRlZmxhdGVQYXJhbXMoKSBpcyB1c2VkIHRvIGxhdGVyIHN3aXRjaCB0byBhIG5vbi16ZXJvIGNvbXByZXNzaW9uXG4gKiBsZXZlbCwgcy0+bWF0Y2hlcyAob3RoZXJ3aXNlIHVudXNlZCB3aGVuIHN0b3JpbmcpIGtlZXBzIHRyYWNrIG9mIHRoZSBudW1iZXJcbiAqIG9mIGhhc2ggdGFibGUgc2xpZGVzIHRvIHBlcmZvcm0uIElmIHMtPm1hdGNoZXMgaXMgMSwgdGhlbiBvbmUgaGFzaCB0YWJsZVxuICogc2xpZGUgd2lsbCBiZSBkb25lIHdoZW4gc3dpdGNoaW5nLiBJZiBzLT5tYXRjaGVzIGlzIDIsIHRoZSBtYXhpbXVtIHZhbHVlXG4gKiBhbGxvd2VkIGhlcmUsIHRoZW4gdGhlIGhhc2ggdGFibGUgd2lsbCBiZSBjbGVhcmVkLCBzaW5jZSB0d28gb3IgbW9yZSBzbGlkZXNcbiAqIGlzIHRoZSBzYW1lIGFzIGEgY2xlYXIuXG4gKlxuICogZGVmbGF0ZV9zdG9yZWQoKSBpcyB3cml0dGVuIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgdGltZXMgYW4gaW5wdXQgYnl0ZSBpc1xuICogY29waWVkLiBJdCBpcyBtb3N0IGVmZmljaWVudCB3aXRoIGxhcmdlIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycywgd2hpY2hcbiAqIG1heGltaXplcyB0aGUgb3Bwb3J0dW5pdGVzIHRvIGhhdmUgYSBzaW5nbGUgY29weSBmcm9tIG5leHRfaW4gdG8gbmV4dF9vdXQuXG4gKi9cbmNvbnN0IGRlZmxhdGVfc3RvcmVkID0gKHMsIGZsdXNoKSA9PiB7XG5cbiAgLyogU21hbGxlc3Qgd29ydGh5IGJsb2NrIHNpemUgd2hlbiBub3QgZmx1c2hpbmcgb3IgZmluaXNoaW5nLiBCeSBkZWZhdWx0XG4gICAqIHRoaXMgaXMgMzJLLiBUaGlzIGNhbiBiZSBhcyBzbWFsbCBhcyA1MDcgYnl0ZXMgZm9yIG1lbUxldmVsID09IDEuIEZvclxuICAgKiBsYXJnZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMsIHRoZSBzdG9yZWQgYmxvY2sgc2l6ZSB3aWxsIGJlIGxhcmdlci5cbiAgICovXG4gIGxldCBtaW5fYmxvY2sgPSBzLnBlbmRpbmdfYnVmX3NpemUgLSA1ID4gcy53X3NpemUgPyBzLndfc2l6ZSA6IHMucGVuZGluZ19idWZfc2l6ZSAtIDU7XG5cbiAgLyogQ29weSBhcyBtYW55IG1pbl9ibG9jayBvciBsYXJnZXIgc3RvcmVkIGJsb2NrcyBkaXJlY3RseSB0byBuZXh0X291dCBhc1xuICAgKiBwb3NzaWJsZS4gSWYgZmx1c2hpbmcsIGNvcHkgdGhlIHJlbWFpbmluZyBhdmFpbGFibGUgaW5wdXQgdG8gbmV4dF9vdXQgYXNcbiAgICogc3RvcmVkIGJsb2NrcywgaWYgdGhlcmUgaXMgZW5vdWdoIHNwYWNlLlxuICAgKi9cbiAgbGV0IGxlbiwgbGVmdCwgaGF2ZSwgbGFzdCA9IDA7XG4gIGxldCB1c2VkID0gcy5zdHJtLmF2YWlsX2luO1xuICBkbyB7XG4gICAgLyogU2V0IGxlbiB0byB0aGUgbWF4aW11bSBzaXplIGJsb2NrIHRoYXQgd2UgY2FuIGNvcHkgZGlyZWN0bHkgd2l0aCB0aGVcbiAgICAgKiBhdmFpbGFibGUgaW5wdXQgZGF0YSBhbmQgb3V0cHV0IHNwYWNlLiBTZXQgbGVmdCB0byBob3cgbXVjaCBvZiB0aGF0XG4gICAgICogd291bGQgYmUgY29waWVkIGZyb20gd2hhdCdzIGxlZnQgaW4gdGhlIHdpbmRvdy5cbiAgICAgKi9cbiAgICBsZW4gPSA2NTUzNS8qIE1BWF9TVE9SRUQgKi87ICAgICAvKiBtYXhpbXVtIGRlZmxhdGUgc3RvcmVkIGJsb2NrIGxlbmd0aCAqL1xuICAgIGhhdmUgPSAocy5iaV92YWxpZCArIDQyKSA+PiAzOyAgICAgLyogbnVtYmVyIG9mIGhlYWRlciBieXRlcyAqL1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0IDwgaGF2ZSkgeyAgICAgICAgIC8qIG5lZWQgcm9vbSBmb3IgaGVhZGVyICovXG4gICAgICBicmVhaztcbiAgICB9XG4gICAgICAvKiBtYXhpbXVtIHN0b3JlZCBibG9jayBsZW5ndGggdGhhdCB3aWxsIGZpdCBpbiBhdmFpbF9vdXQ6ICovXG4gICAgaGF2ZSA9IHMuc3RybS5hdmFpbF9vdXQgLSBoYXZlO1xuICAgIGxlZnQgPSBzLnN0cnN0YXJ0IC0gcy5ibG9ja19zdGFydDsgIC8qIGJ5dGVzIGxlZnQgaW4gd2luZG93ICovXG4gICAgaWYgKGxlbiA+IGxlZnQgKyBzLnN0cm0uYXZhaWxfaW4pIHtcbiAgICAgIGxlbiA9IGxlZnQgKyBzLnN0cm0uYXZhaWxfaW47ICAgLyogbGltaXQgbGVuIHRvIHRoZSBpbnB1dCAqL1xuICAgIH1cbiAgICBpZiAobGVuID4gaGF2ZSkge1xuICAgICAgbGVuID0gaGF2ZTsgICAgICAgICAgICAgLyogbGltaXQgbGVuIHRvIHRoZSBvdXRwdXQgKi9cbiAgICB9XG5cbiAgICAvKiBJZiB0aGUgc3RvcmVkIGJsb2NrIHdvdWxkIGJlIGxlc3MgdGhhbiBtaW5fYmxvY2sgaW4gbGVuZ3RoLCBvciBpZlxuICAgICAqIHVuYWJsZSB0byBjb3B5IGFsbCBvZiB0aGUgYXZhaWxhYmxlIGlucHV0IHdoZW4gZmx1c2hpbmcsIHRoZW4gdHJ5XG4gICAgICogY29weWluZyB0byB0aGUgd2luZG93IGFuZCB0aGUgcGVuZGluZyBidWZmZXIgaW5zdGVhZC4gQWxzbyBkb24ndFxuICAgICAqIHdyaXRlIGFuIGVtcHR5IGJsb2NrIHdoZW4gZmx1c2hpbmcgLS0gZGVmbGF0ZSgpIGRvZXMgdGhhdC5cbiAgICAgKi9cbiAgICBpZiAobGVuIDwgbWluX2Jsb2NrICYmICgobGVuID09PSAwICYmIGZsdXNoICE9PSBaX0ZJTklTSCQzKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2ggPT09IFpfTk9fRkxVU0gkMiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgbGVuICE9PSBsZWZ0ICsgcy5zdHJtLmF2YWlsX2luKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLyogTWFrZSBhIGR1bW15IHN0b3JlZCBibG9jayBpbiBwZW5kaW5nIHRvIGdldCB0aGUgaGVhZGVyIGJ5dGVzLFxuICAgICAqIGluY2x1ZGluZyBhbnkgcGVuZGluZyBiaXRzLiBUaGlzIGFsc28gdXBkYXRlcyB0aGUgZGVidWdnaW5nIGNvdW50cy5cbiAgICAgKi9cbiAgICBsYXN0ID0gZmx1c2ggPT09IFpfRklOSVNIJDMgJiYgbGVuID09PSBsZWZ0ICsgcy5zdHJtLmF2YWlsX2luID8gMSA6IDA7XG4gICAgX3RyX3N0b3JlZF9ibG9jayhzLCAwLCAwLCBsYXN0KTtcblxuICAgIC8qIFJlcGxhY2UgdGhlIGxlbmd0aHMgaW4gdGhlIGR1bW15IHN0b3JlZCBibG9jayB3aXRoIGxlbi4gKi9cbiAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZyAtIDRdID0gbGVuO1xuICAgIHMucGVuZGluZ19idWZbcy5wZW5kaW5nIC0gM10gPSBsZW4gPj4gODtcbiAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZyAtIDJdID0gfmxlbjtcbiAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZyAtIDFdID0gfmxlbiA+PiA4O1xuXG4gICAgLyogV3JpdGUgdGhlIHN0b3JlZCBibG9jayBoZWFkZXIgYnl0ZXMuICovXG4gICAgZmx1c2hfcGVuZGluZyhzLnN0cm0pO1xuXG4vLyNpZmRlZiBaTElCX0RFQlVHXG4vLyAgICAvKiBVcGRhdGUgZGVidWdnaW5nIGNvdW50cyBmb3IgdGhlIGRhdGEgYWJvdXQgdG8gYmUgY29waWVkLiAqL1xuLy8gICAgcy0+Y29tcHJlc3NlZF9sZW4gKz0gbGVuIDw8IDM7XG4vLyAgICBzLT5iaXRzX3NlbnQgKz0gbGVuIDw8IDM7XG4vLyNlbmRpZlxuXG4gICAgLyogQ29weSB1bmNvbXByZXNzZWQgYnl0ZXMgZnJvbSB0aGUgd2luZG93IHRvIG5leHRfb3V0LiAqL1xuICAgIGlmIChsZWZ0KSB7XG4gICAgICBpZiAobGVmdCA+IGxlbikge1xuICAgICAgICBsZWZ0ID0gbGVuO1xuICAgICAgfVxuICAgICAgLy96bWVtY3B5KHMtPnN0cm0tPm5leHRfb3V0LCBzLT53aW5kb3cgKyBzLT5ibG9ja19zdGFydCwgbGVmdCk7XG4gICAgICBzLnN0cm0ub3V0cHV0LnNldChzLndpbmRvdy5zdWJhcnJheShzLmJsb2NrX3N0YXJ0LCBzLmJsb2NrX3N0YXJ0ICsgbGVmdCksIHMuc3RybS5uZXh0X291dCk7XG4gICAgICBzLnN0cm0ubmV4dF9vdXQgKz0gbGVmdDtcbiAgICAgIHMuc3RybS5hdmFpbF9vdXQgLT0gbGVmdDtcbiAgICAgIHMuc3RybS50b3RhbF9vdXQgKz0gbGVmdDtcbiAgICAgIHMuYmxvY2tfc3RhcnQgKz0gbGVmdDtcbiAgICAgIGxlbiAtPSBsZWZ0O1xuICAgIH1cblxuICAgIC8qIENvcHkgdW5jb21wcmVzc2VkIGJ5dGVzIGRpcmVjdGx5IGZyb20gbmV4dF9pbiB0byBuZXh0X291dCwgdXBkYXRpbmdcbiAgICAgKiB0aGUgY2hlY2sgdmFsdWUuXG4gICAgICovXG4gICAgaWYgKGxlbikge1xuICAgICAgcmVhZF9idWYocy5zdHJtLCBzLnN0cm0ub3V0cHV0LCBzLnN0cm0ubmV4dF9vdXQsIGxlbik7XG4gICAgICBzLnN0cm0ubmV4dF9vdXQgKz0gbGVuO1xuICAgICAgcy5zdHJtLmF2YWlsX291dCAtPSBsZW47XG4gICAgICBzLnN0cm0udG90YWxfb3V0ICs9IGxlbjtcbiAgICB9XG4gIH0gd2hpbGUgKGxhc3QgPT09IDApO1xuXG4gIC8qIFVwZGF0ZSB0aGUgc2xpZGluZyB3aW5kb3cgd2l0aCB0aGUgbGFzdCBzLT53X3NpemUgYnl0ZXMgb2YgdGhlIGNvcGllZFxuICAgKiBkYXRhLCBvciBhcHBlbmQgYWxsIG9mIHRoZSBjb3BpZWQgZGF0YSB0byB0aGUgZXhpc3Rpbmcgd2luZG93IGlmIGxlc3NcbiAgICogdGhhbiBzLT53X3NpemUgYnl0ZXMgd2VyZSBjb3BpZWQuIEFsc28gdXBkYXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG9cbiAgICogaW5zZXJ0IGluIHRoZSBoYXNoIHRhYmxlcywgaW4gdGhlIGV2ZW50IHRoYXQgZGVmbGF0ZVBhcmFtcygpIHN3aXRjaGVzIHRvXG4gICAqIGEgbm9uLXplcm8gY29tcHJlc3Npb24gbGV2ZWwuXG4gICAqL1xuICB1c2VkIC09IHMuc3RybS5hdmFpbF9pbjsgICAgLyogbnVtYmVyIG9mIGlucHV0IGJ5dGVzIGRpcmVjdGx5IGNvcGllZCAqL1xuICBpZiAodXNlZCkge1xuICAgIC8qIElmIGFueSBpbnB1dCB3YXMgdXNlZCwgdGhlbiBubyB1bnVzZWQgaW5wdXQgcmVtYWlucyBpbiB0aGUgd2luZG93LFxuICAgICAqIHRoZXJlZm9yZSBzLT5ibG9ja19zdGFydCA9PSBzLT5zdHJzdGFydC5cbiAgICAgKi9cbiAgICBpZiAodXNlZCA+PSBzLndfc2l6ZSkgeyAgLyogc3VwcGxhbnQgdGhlIHByZXZpb3VzIGhpc3RvcnkgKi9cbiAgICAgIHMubWF0Y2hlcyA9IDI7ICAgICAvKiBjbGVhciBoYXNoICovXG4gICAgICAvL3ptZW1jcHkocy0+d2luZG93LCBzLT5zdHJtLT5uZXh0X2luIC0gcy0+d19zaXplLCBzLT53X3NpemUpO1xuICAgICAgcy53aW5kb3cuc2V0KHMuc3RybS5pbnB1dC5zdWJhcnJheShzLnN0cm0ubmV4dF9pbiAtIHMud19zaXplLCBzLnN0cm0ubmV4dF9pbiksIDApO1xuICAgICAgcy5zdHJzdGFydCA9IHMud19zaXplO1xuICAgICAgcy5pbnNlcnQgPSBzLnN0cnN0YXJ0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChzLndpbmRvd19zaXplIC0gcy5zdHJzdGFydCA8PSB1c2VkKSB7XG4gICAgICAgIC8qIFNsaWRlIHRoZSB3aW5kb3cgZG93bi4gKi9cbiAgICAgICAgcy5zdHJzdGFydCAtPSBzLndfc2l6ZTtcbiAgICAgICAgLy96bWVtY3B5KHMtPndpbmRvdywgcy0+d2luZG93ICsgcy0+d19zaXplLCBzLT5zdHJzdGFydCk7XG4gICAgICAgIHMud2luZG93LnNldChzLndpbmRvdy5zdWJhcnJheShzLndfc2l6ZSwgcy53X3NpemUgKyBzLnN0cnN0YXJ0KSwgMCk7XG4gICAgICAgIGlmIChzLm1hdGNoZXMgPCAyKSB7XG4gICAgICAgICAgcy5tYXRjaGVzKys7ICAgLyogYWRkIGEgcGVuZGluZyBzbGlkZV9oYXNoKCkgKi9cbiAgICAgICAgfVxuICAgICAgICBpZiAocy5pbnNlcnQgPiBzLnN0cnN0YXJ0KSB7XG4gICAgICAgICAgcy5pbnNlcnQgPSBzLnN0cnN0YXJ0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvL3ptZW1jcHkocy0+d2luZG93ICsgcy0+c3Ryc3RhcnQsIHMtPnN0cm0tPm5leHRfaW4gLSB1c2VkLCB1c2VkKTtcbiAgICAgIHMud2luZG93LnNldChzLnN0cm0uaW5wdXQuc3ViYXJyYXkocy5zdHJtLm5leHRfaW4gLSB1c2VkLCBzLnN0cm0ubmV4dF9pbiksIHMuc3Ryc3RhcnQpO1xuICAgICAgcy5zdHJzdGFydCArPSB1c2VkO1xuICAgICAgcy5pbnNlcnQgKz0gdXNlZCA+IHMud19zaXplIC0gcy5pbnNlcnQgPyBzLndfc2l6ZSAtIHMuaW5zZXJ0IDogdXNlZDtcbiAgICB9XG4gICAgcy5ibG9ja19zdGFydCA9IHMuc3Ryc3RhcnQ7XG4gIH1cbiAgaWYgKHMuaGlnaF93YXRlciA8IHMuc3Ryc3RhcnQpIHtcbiAgICBzLmhpZ2hfd2F0ZXIgPSBzLnN0cnN0YXJ0O1xuICB9XG5cbiAgLyogSWYgdGhlIGxhc3QgYmxvY2sgd2FzIHdyaXR0ZW4gdG8gbmV4dF9vdXQsIHRoZW4gZG9uZS4gKi9cbiAgaWYgKGxhc3QpIHtcbiAgICByZXR1cm4gQlNfRklOSVNIX0RPTkU7XG4gIH1cblxuICAvKiBJZiBmbHVzaGluZyBhbmQgYWxsIGlucHV0IGhhcyBiZWVuIGNvbnN1bWVkLCB0aGVuIGRvbmUuICovXG4gIGlmIChmbHVzaCAhPT0gWl9OT19GTFVTSCQyICYmIGZsdXNoICE9PSBaX0ZJTklTSCQzICYmXG4gICAgcy5zdHJtLmF2YWlsX2luID09PSAwICYmIHMuc3Ryc3RhcnQgPT09IHMuYmxvY2tfc3RhcnQpIHtcbiAgICByZXR1cm4gQlNfQkxPQ0tfRE9ORTtcbiAgfVxuXG4gIC8qIEZpbGwgdGhlIHdpbmRvdyB3aXRoIGFueSByZW1haW5pbmcgaW5wdXQuICovXG4gIGhhdmUgPSBzLndpbmRvd19zaXplIC0gcy5zdHJzdGFydDtcbiAgaWYgKHMuc3RybS5hdmFpbF9pbiA+IGhhdmUgJiYgcy5ibG9ja19zdGFydCA+PSBzLndfc2l6ZSkge1xuICAgIC8qIFNsaWRlIHRoZSB3aW5kb3cgZG93bi4gKi9cbiAgICBzLmJsb2NrX3N0YXJ0IC09IHMud19zaXplO1xuICAgIHMuc3Ryc3RhcnQgLT0gcy53X3NpemU7XG4gICAgLy96bWVtY3B5KHMtPndpbmRvdywgcy0+d2luZG93ICsgcy0+d19zaXplLCBzLT5zdHJzdGFydCk7XG4gICAgcy53aW5kb3cuc2V0KHMud2luZG93LnN1YmFycmF5KHMud19zaXplLCBzLndfc2l6ZSArIHMuc3Ryc3RhcnQpLCAwKTtcbiAgICBpZiAocy5tYXRjaGVzIDwgMikge1xuICAgICAgcy5tYXRjaGVzKys7ICAgICAgIC8qIGFkZCBhIHBlbmRpbmcgc2xpZGVfaGFzaCgpICovXG4gICAgfVxuICAgIGhhdmUgKz0gcy53X3NpemU7ICAgICAgLyogbW9yZSBzcGFjZSBub3cgKi9cbiAgICBpZiAocy5pbnNlcnQgPiBzLnN0cnN0YXJ0KSB7XG4gICAgICBzLmluc2VydCA9IHMuc3Ryc3RhcnQ7XG4gICAgfVxuICB9XG4gIGlmIChoYXZlID4gcy5zdHJtLmF2YWlsX2luKSB7XG4gICAgaGF2ZSA9IHMuc3RybS5hdmFpbF9pbjtcbiAgfVxuICBpZiAoaGF2ZSkge1xuICAgIHJlYWRfYnVmKHMuc3RybSwgcy53aW5kb3csIHMuc3Ryc3RhcnQsIGhhdmUpO1xuICAgIHMuc3Ryc3RhcnQgKz0gaGF2ZTtcbiAgICBzLmluc2VydCArPSBoYXZlID4gcy53X3NpemUgLSBzLmluc2VydCA/IHMud19zaXplIC0gcy5pbnNlcnQgOiBoYXZlO1xuICB9XG4gIGlmIChzLmhpZ2hfd2F0ZXIgPCBzLnN0cnN0YXJ0KSB7XG4gICAgcy5oaWdoX3dhdGVyID0gcy5zdHJzdGFydDtcbiAgfVxuXG4gIC8qIFRoZXJlIHdhcyBub3QgZW5vdWdoIGF2YWlsX291dCB0byB3cml0ZSBhIGNvbXBsZXRlIHdvcnRoeSBvciBmbHVzaGVkXG4gICAqIHN0b3JlZCBibG9jayB0byBuZXh0X291dC4gV3JpdGUgYSBzdG9yZWQgYmxvY2sgdG8gcGVuZGluZyBpbnN0ZWFkLCBpZiB3ZVxuICAgKiBoYXZlIGVub3VnaCBpbnB1dCBmb3IgYSB3b3J0aHkgYmxvY2ssIG9yIGlmIGZsdXNoaW5nIGFuZCB0aGVyZSBpcyBlbm91Z2hcbiAgICogcm9vbSBmb3IgdGhlIHJlbWFpbmluZyBpbnB1dCBhcyBhIHN0b3JlZCBibG9jayBpbiB0aGUgcGVuZGluZyBidWZmZXIuXG4gICAqL1xuICBoYXZlID0gKHMuYmlfdmFsaWQgKyA0MikgPj4gMzsgICAgIC8qIG51bWJlciBvZiBoZWFkZXIgYnl0ZXMgKi9cbiAgICAvKiBtYXhpbXVtIHN0b3JlZCBibG9jayBsZW5ndGggdGhhdCB3aWxsIGZpdCBpbiBwZW5kaW5nOiAqL1xuICBoYXZlID0gcy5wZW5kaW5nX2J1Zl9zaXplIC0gaGF2ZSA+IDY1NTM1LyogTUFYX1NUT1JFRCAqLyA/IDY1NTM1LyogTUFYX1NUT1JFRCAqLyA6IHMucGVuZGluZ19idWZfc2l6ZSAtIGhhdmU7XG4gIG1pbl9ibG9jayA9IGhhdmUgPiBzLndfc2l6ZSA/IHMud19zaXplIDogaGF2ZTtcbiAgbGVmdCA9IHMuc3Ryc3RhcnQgLSBzLmJsb2NrX3N0YXJ0O1xuICBpZiAobGVmdCA+PSBtaW5fYmxvY2sgfHxcbiAgICAgKChsZWZ0IHx8IGZsdXNoID09PSBaX0ZJTklTSCQzKSAmJiBmbHVzaCAhPT0gWl9OT19GTFVTSCQyICYmXG4gICAgIHMuc3RybS5hdmFpbF9pbiA9PT0gMCAmJiBsZWZ0IDw9IGhhdmUpKSB7XG4gICAgbGVuID0gbGVmdCA+IGhhdmUgPyBoYXZlIDogbGVmdDtcbiAgICBsYXN0ID0gZmx1c2ggPT09IFpfRklOSVNIJDMgJiYgcy5zdHJtLmF2YWlsX2luID09PSAwICYmXG4gICAgICAgICBsZW4gPT09IGxlZnQgPyAxIDogMDtcbiAgICBfdHJfc3RvcmVkX2Jsb2NrKHMsIHMuYmxvY2tfc3RhcnQsIGxlbiwgbGFzdCk7XG4gICAgcy5ibG9ja19zdGFydCArPSBsZW47XG4gICAgZmx1c2hfcGVuZGluZyhzLnN0cm0pO1xuICB9XG5cbiAgLyogV2UndmUgZG9uZSBhbGwgd2UgY2FuIHdpdGggdGhlIGF2YWlsYWJsZSBpbnB1dCBhbmQgb3V0cHV0LiAqL1xuICByZXR1cm4gbGFzdCA/IEJTX0ZJTklTSF9TVEFSVEVEIDogQlNfTkVFRF9NT1JFO1xufTtcblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvbXByZXNzIGFzIG11Y2ggYXMgcG9zc2libGUgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLCByZXR1cm4gdGhlIGN1cnJlbnRcbiAqIGJsb2NrIHN0YXRlLlxuICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwZXJmb3JtIGxhenkgZXZhbHVhdGlvbiBvZiBtYXRjaGVzIGFuZCBpbnNlcnRzXG4gKiBuZXcgc3RyaW5ncyBpbiB0aGUgZGljdGlvbmFyeSBvbmx5IGZvciB1bm1hdGNoZWQgc3RyaW5ncyBvciBmb3Igc2hvcnRcbiAqIG1hdGNoZXMuIEl0IGlzIHVzZWQgb25seSBmb3IgdGhlIGZhc3QgY29tcHJlc3Npb24gb3B0aW9ucy5cbiAqL1xuY29uc3QgZGVmbGF0ZV9mYXN0ID0gKHMsIGZsdXNoKSA9PiB7XG5cbiAgbGV0IGhhc2hfaGVhZDsgICAgICAgIC8qIGhlYWQgb2YgdGhlIGhhc2ggY2hhaW4gKi9cbiAgbGV0IGJmbHVzaDsgICAgICAgICAgIC8qIHNldCBpZiBjdXJyZW50IGJsb2NrIG11c3QgYmUgZmx1c2hlZCAqL1xuXG4gIGZvciAoOzspIHtcbiAgICAvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBlbm91Z2ggbG9va2FoZWFkLCBleGNlcHRcbiAgICAgKiBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBmaWxlLiBXZSBuZWVkIE1BWF9NQVRDSCBieXRlc1xuICAgICAqIGZvciB0aGUgbmV4dCBtYXRjaCwgcGx1cyBNSU5fTUFUQ0ggYnl0ZXMgdG8gaW5zZXJ0IHRoZVxuICAgICAqIHN0cmluZyBmb2xsb3dpbmcgdGhlIG5leHQgbWF0Y2guXG4gICAgICovXG4gICAgaWYgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCkge1xuICAgICAgZmlsbF93aW5kb3cocyk7XG4gICAgICBpZiAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEICYmIGZsdXNoID09PSBaX05PX0ZMVVNIJDIpIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkge1xuICAgICAgICBicmVhazsgLyogZmx1c2ggdGhlIGN1cnJlbnQgYmxvY2sgKi9cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBJbnNlcnQgdGhlIHN0cmluZyB3aW5kb3dbc3Ryc3RhcnQgLi4gc3Ryc3RhcnQrMl0gaW4gdGhlXG4gICAgICogZGljdGlvbmFyeSwgYW5kIHNldCBoYXNoX2hlYWQgdG8gdGhlIGhlYWQgb2YgdGhlIGhhc2ggY2hhaW46XG4gICAgICovXG4gICAgaGFzaF9oZWFkID0gMC8qTklMKi87XG4gICAgaWYgKHMubG9va2FoZWFkID49IE1JTl9NQVRDSCkge1xuICAgICAgaGFzaF9oZWFkID0gSU5TRVJUX1NUUklORyhzLCBzLnN0cnN0YXJ0KTtcbiAgICB9XG5cbiAgICAvKiBGaW5kIHRoZSBsb25nZXN0IG1hdGNoLCBkaXNjYXJkaW5nIHRob3NlIDw9IHByZXZfbGVuZ3RoLlxuICAgICAqIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbHdheXMgbWF0Y2hfbGVuZ3RoIDwgTUlOX01BVENIXG4gICAgICovXG4gICAgaWYgKGhhc2hfaGVhZCAhPT0gMC8qTklMKi8gJiYgKChzLnN0cnN0YXJ0IC0gaGFzaF9oZWFkKSA8PSAocy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKSkpIHtcbiAgICAgIC8qIFRvIHNpbXBsaWZ5IHRoZSBjb2RlLCB3ZSBwcmV2ZW50IG1hdGNoZXMgd2l0aCB0aGUgc3RyaW5nXG4gICAgICAgKiBvZiB3aW5kb3cgaW5kZXggMCAoaW4gcGFydGljdWxhciB3ZSBoYXZlIHRvIGF2b2lkIGEgbWF0Y2hcbiAgICAgICAqIG9mIHRoZSBzdHJpbmcgd2l0aCBpdHNlbGYgYXQgdGhlIHN0YXJ0IG9mIHRoZSBpbnB1dCBmaWxlKS5cbiAgICAgICAqL1xuICAgICAgcy5tYXRjaF9sZW5ndGggPSBsb25nZXN0X21hdGNoKHMsIGhhc2hfaGVhZCk7XG4gICAgICAvKiBsb25nZXN0X21hdGNoKCkgc2V0cyBtYXRjaF9zdGFydCAqL1xuICAgIH1cbiAgICBpZiAocy5tYXRjaF9sZW5ndGggPj0gTUlOX01BVENIKSB7XG4gICAgICAvLyBjaGVja19tYXRjaChzLCBzLnN0cnN0YXJ0LCBzLm1hdGNoX3N0YXJ0LCBzLm1hdGNoX2xlbmd0aCk7IC8vIGZvciBkZWJ1ZyBvbmx5XG5cbiAgICAgIC8qKiogX3RyX3RhbGx5X2Rpc3Qocywgcy5zdHJzdGFydCAtIHMubWF0Y2hfc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICBzLm1hdGNoX2xlbmd0aCAtIE1JTl9NQVRDSCwgYmZsdXNoKTsgKioqL1xuICAgICAgYmZsdXNoID0gX3RyX3RhbGx5KHMsIHMuc3Ryc3RhcnQgLSBzLm1hdGNoX3N0YXJ0LCBzLm1hdGNoX2xlbmd0aCAtIE1JTl9NQVRDSCk7XG5cbiAgICAgIHMubG9va2FoZWFkIC09IHMubWF0Y2hfbGVuZ3RoO1xuXG4gICAgICAvKiBJbnNlcnQgbmV3IHN0cmluZ3MgaW4gdGhlIGhhc2ggdGFibGUgb25seSBpZiB0aGUgbWF0Y2ggbGVuZ3RoXG4gICAgICAgKiBpcyBub3QgdG9vIGxhcmdlLiBUaGlzIHNhdmVzIHRpbWUgYnV0IGRlZ3JhZGVzIGNvbXByZXNzaW9uLlxuICAgICAgICovXG4gICAgICBpZiAocy5tYXRjaF9sZW5ndGggPD0gcy5tYXhfbGF6eV9tYXRjaC8qbWF4X2luc2VydF9sZW5ndGgqLyAmJiBzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHtcbiAgICAgICAgcy5tYXRjaF9sZW5ndGgtLTsgLyogc3RyaW5nIGF0IHN0cnN0YXJ0IGFscmVhZHkgaW4gdGFibGUgKi9cbiAgICAgICAgZG8ge1xuICAgICAgICAgIHMuc3Ryc3RhcnQrKztcbiAgICAgICAgICBoYXNoX2hlYWQgPSBJTlNFUlRfU1RSSU5HKHMsIHMuc3Ryc3RhcnQpO1xuICAgICAgICAgIC8qIHN0cnN0YXJ0IG5ldmVyIGV4Y2VlZHMgV1NJWkUtTUFYX01BVENILCBzbyB0aGVyZSBhcmVcbiAgICAgICAgICAgKiBhbHdheXMgTUlOX01BVENIIGJ5dGVzIGFoZWFkLlxuICAgICAgICAgICAqL1xuICAgICAgICB9IHdoaWxlICgtLXMubWF0Y2hfbGVuZ3RoICE9PSAwKTtcbiAgICAgICAgcy5zdHJzdGFydCsrO1xuICAgICAgfSBlbHNlXG4gICAgICB7XG4gICAgICAgIHMuc3Ryc3RhcnQgKz0gcy5tYXRjaF9sZW5ndGg7XG4gICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gMDtcbiAgICAgICAgaWYgKHMubGVnYWN5X2hhc2gpIHtcbiAgICAgICAgICBzLmluc19oID0gcy53aW5kb3dbcy5zdHJzdGFydF07XG4gICAgICAgICAgLyogVVBEQVRFX0hBU0gocywgcy5pbnNfaCwgcy53aW5kb3dbcy5zdHJzdGFydCsxXSk7ICovXG4gICAgICAgICAgcy5pbnNfaCA9IEhBU0gocywgcy5pbnNfaCwgcy53aW5kb3dbcy5zdHJzdGFydCArIDFdKTtcblxuLy8jaWYgTUlOX01BVENIICE9IDNcbi8vICAgICAgICAgICAgICAgIENhbGwgVVBEQVRFX0hBU0goKSBNSU5fTUFUQ0gtMyBtb3JlIHRpbWVzXG4vLyNlbmRpZlxuICAgICAgICAgIC8qIElmIGxvb2thaGVhZCA8IE1JTl9NQVRDSCwgaW5zX2ggaXMgZ2FyYmFnZSwgYnV0IGl0IGRvZXMgbm90XG4gICAgICAgICAgICogbWF0dGVyIHNpbmNlIGl0IHdpbGwgYmUgcmVjb21wdXRlZCBhdCBuZXh0IGRlZmxhdGUgY2FsbC5cbiAgICAgICAgICAgKi9cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvKiBObyBtYXRjaCwgb3V0cHV0IGEgbGl0ZXJhbCBieXRlICovXG4gICAgICAvL1RyYWNldnYoKHN0ZGVycixcIiVjXCIsIHMud2luZG93W3Muc3Ryc3RhcnRdKSk7XG4gICAgICAvKioqIF90cl90YWxseV9saXQocywgcy53aW5kb3dbcy5zdHJzdGFydF0sIGJmbHVzaCk7ICoqKi9cbiAgICAgIGJmbHVzaCA9IF90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSk7XG5cbiAgICAgIHMubG9va2FoZWFkLS07XG4gICAgICBzLnN0cnN0YXJ0Kys7XG4gICAgfVxuICAgIGlmIChiZmx1c2gpIHtcbiAgICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi9cbiAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICAgIC8qKiovXG4gICAgfVxuICB9XG4gIHMuaW5zZXJ0ID0gKChzLnN0cnN0YXJ0IDwgKE1JTl9NQVRDSCAtIDEpKSA/IHMuc3Ryc3RhcnQgOiBNSU5fTUFUQ0ggLSAxKTtcbiAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCQzKSB7XG4gICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAxKTsgKioqL1xuICAgIGZsdXNoX2Jsb2NrX29ubHkocywgdHJ1ZSk7XG4gICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDtcbiAgICB9XG4gICAgLyoqKi9cbiAgICByZXR1cm4gQlNfRklOSVNIX0RPTkU7XG4gIH1cbiAgaWYgKHMuc3ltX25leHQpIHtcbiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovXG4gICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7XG4gICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgfVxuICAgIC8qKiovXG4gIH1cbiAgcmV0dXJuIEJTX0JMT0NLX0RPTkU7XG59O1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNhbWUgYXMgYWJvdmUsIGJ1dCBhY2hpZXZlcyBiZXR0ZXIgY29tcHJlc3Npb24uIFdlIHVzZSBhIGxhenlcbiAqIGV2YWx1YXRpb24gZm9yIG1hdGNoZXM6IGEgbWF0Y2ggaXMgZmluYWxseSBhZG9wdGVkIG9ubHkgaWYgdGhlcmUgaXNcbiAqIG5vIGJldHRlciBtYXRjaCBhdCB0aGUgbmV4dCB3aW5kb3cgcG9zaXRpb24uXG4gKi9cbmNvbnN0IGRlZmxhdGVfc2xvdyA9IChzLCBmbHVzaCkgPT4ge1xuXG4gIGxldCBoYXNoX2hlYWQ7ICAgICAgICAgIC8qIGhlYWQgb2YgaGFzaCBjaGFpbiAqL1xuICBsZXQgYmZsdXNoOyAgICAgICAgICAgICAgLyogc2V0IGlmIGN1cnJlbnQgYmxvY2sgbXVzdCBiZSBmbHVzaGVkICovXG5cbiAgbGV0IG1heF9pbnNlcnQ7XG5cbiAgLyogUHJvY2VzcyB0aGUgaW5wdXQgYmxvY2suICovXG4gIGZvciAoOzspIHtcbiAgICAvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBlbm91Z2ggbG9va2FoZWFkLCBleGNlcHRcbiAgICAgKiBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBmaWxlLiBXZSBuZWVkIE1BWF9NQVRDSCBieXRlc1xuICAgICAqIGZvciB0aGUgbmV4dCBtYXRjaCwgcGx1cyBNSU5fTUFUQ0ggYnl0ZXMgdG8gaW5zZXJ0IHRoZVxuICAgICAqIHN0cmluZyBmb2xsb3dpbmcgdGhlIG5leHQgbWF0Y2guXG4gICAgICovXG4gICAgaWYgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCkge1xuICAgICAgZmlsbF93aW5kb3cocyk7XG4gICAgICBpZiAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEICYmIGZsdXNoID09PSBaX05PX0ZMVVNIJDIpIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgeyBicmVhazsgfSAvKiBmbHVzaCB0aGUgY3VycmVudCBibG9jayAqL1xuICAgIH1cblxuICAgIC8qIEluc2VydCB0aGUgc3RyaW5nIHdpbmRvd1tzdHJzdGFydCAuLiBzdHJzdGFydCsyXSBpbiB0aGVcbiAgICAgKiBkaWN0aW9uYXJ5LCBhbmQgc2V0IGhhc2hfaGVhZCB0byB0aGUgaGVhZCBvZiB0aGUgaGFzaCBjaGFpbjpcbiAgICAgKi9cbiAgICBoYXNoX2hlYWQgPSAwLypOSUwqLztcbiAgICBpZiAocy5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7XG4gICAgICBoYXNoX2hlYWQgPSBJTlNFUlRfU1RSSU5HKHMsIHMuc3Ryc3RhcnQpO1xuICAgIH1cblxuICAgIC8qIEZpbmQgdGhlIGxvbmdlc3QgbWF0Y2gsIGRpc2NhcmRpbmcgdGhvc2UgPD0gcHJldl9sZW5ndGguXG4gICAgICovXG4gICAgcy5wcmV2X2xlbmd0aCA9IHMubWF0Y2hfbGVuZ3RoO1xuICAgIHMucHJldl9tYXRjaCA9IHMubWF0Y2hfc3RhcnQ7XG4gICAgcy5tYXRjaF9sZW5ndGggPSBNSU5fTUFUQ0ggLSAxO1xuXG4gICAgaWYgKGhhc2hfaGVhZCAhPT0gMC8qTklMKi8gJiYgcy5wcmV2X2xlbmd0aCA8IHMubWF4X2xhenlfbWF0Y2ggJiZcbiAgICAgICAgcy5zdHJzdGFydCAtIGhhc2hfaGVhZCA8PSAocy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKS8qTUFYX0RJU1QocykqLykge1xuICAgICAgLyogVG8gc2ltcGxpZnkgdGhlIGNvZGUsIHdlIHByZXZlbnQgbWF0Y2hlcyB3aXRoIHRoZSBzdHJpbmdcbiAgICAgICAqIG9mIHdpbmRvdyBpbmRleCAwIChpbiBwYXJ0aWN1bGFyIHdlIGhhdmUgdG8gYXZvaWQgYSBtYXRjaFxuICAgICAgICogb2YgdGhlIHN0cmluZyB3aXRoIGl0c2VsZiBhdCB0aGUgc3RhcnQgb2YgdGhlIGlucHV0IGZpbGUpLlxuICAgICAgICovXG4gICAgICBzLm1hdGNoX2xlbmd0aCA9IGxvbmdlc3RfbWF0Y2gocywgaGFzaF9oZWFkKTtcbiAgICAgIC8qIGxvbmdlc3RfbWF0Y2goKSBzZXRzIG1hdGNoX3N0YXJ0ICovXG5cbiAgICAgIGlmIChzLm1hdGNoX2xlbmd0aCA8PSA1ICYmXG4gICAgICAgICAocy5zdHJhdGVneSA9PT0gWl9GSUxURVJFRCB8fCAocy5tYXRjaF9sZW5ndGggPT09IE1JTl9NQVRDSCAmJiBzLnN0cnN0YXJ0IC0gcy5tYXRjaF9zdGFydCA+IDQwOTYvKlRPT19GQVIqLykpKSB7XG5cbiAgICAgICAgLyogSWYgcHJldl9tYXRjaCBpcyBhbHNvIE1JTl9NQVRDSCwgbWF0Y2hfc3RhcnQgaXMgZ2FyYmFnZVxuICAgICAgICAgKiBidXQgd2Ugd2lsbCBpZ25vcmUgdGhlIGN1cnJlbnQgbWF0Y2ggYW55d2F5LlxuICAgICAgICAgKi9cbiAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBNSU5fTUFUQ0ggLSAxO1xuICAgICAgfVxuICAgIH1cbiAgICAvKiBJZiB0aGVyZSB3YXMgYSBtYXRjaCBhdCB0aGUgcHJldmlvdXMgc3RlcCBhbmQgdGhlIGN1cnJlbnRcbiAgICAgKiBtYXRjaCBpcyBub3QgYmV0dGVyLCBvdXRwdXQgdGhlIHByZXZpb3VzIG1hdGNoOlxuICAgICAqL1xuICAgIGlmIChzLnByZXZfbGVuZ3RoID49IE1JTl9NQVRDSCAmJiBzLm1hdGNoX2xlbmd0aCA8PSBzLnByZXZfbGVuZ3RoKSB7XG4gICAgICBtYXhfaW5zZXJ0ID0gcy5zdHJzdGFydCArIHMubG9va2FoZWFkIC0gTUlOX01BVENIO1xuICAgICAgLyogRG8gbm90IGluc2VydCBzdHJpbmdzIGluIGhhc2ggdGFibGUgYmV5b25kIHRoaXMuICovXG5cbiAgICAgIC8vY2hlY2tfbWF0Y2gocywgcy5zdHJzdGFydC0xLCBzLnByZXZfbWF0Y2gsIHMucHJldl9sZW5ndGgpO1xuXG4gICAgICAvKioqX3RyX3RhbGx5X2Rpc3Qocywgcy5zdHJzdGFydCAtIDEgLSBzLnByZXZfbWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgICBzLnByZXZfbGVuZ3RoIC0gTUlOX01BVENILCBiZmx1c2gpOyoqKi9cbiAgICAgIGJmbHVzaCA9IF90cl90YWxseShzLCBzLnN0cnN0YXJ0IC0gMSAtIHMucHJldl9tYXRjaCwgcy5wcmV2X2xlbmd0aCAtIE1JTl9NQVRDSCk7XG4gICAgICAvKiBJbnNlcnQgaW4gaGFzaCB0YWJsZSBhbGwgc3RyaW5ncyB1cCB0byB0aGUgZW5kIG9mIHRoZSBtYXRjaC5cbiAgICAgICAqIHN0cnN0YXJ0LTEgYW5kIHN0cnN0YXJ0IGFyZSBhbHJlYWR5IGluc2VydGVkLiBJZiB0aGVyZSBpcyBub3RcbiAgICAgICAqIGVub3VnaCBsb29rYWhlYWQsIHRoZSBsYXN0IHR3byBzdHJpbmdzIGFyZSBub3QgaW5zZXJ0ZWQgaW5cbiAgICAgICAqIHRoZSBoYXNoIHRhYmxlLlxuICAgICAgICovXG4gICAgICBzLmxvb2thaGVhZCAtPSBzLnByZXZfbGVuZ3RoIC0gMTtcbiAgICAgIHMucHJldl9sZW5ndGggLT0gMjtcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKCsrcy5zdHJzdGFydCA8PSBtYXhfaW5zZXJ0KSB7XG4gICAgICAgICAgaGFzaF9oZWFkID0gSU5TRVJUX1NUUklORyhzLCBzLnN0cnN0YXJ0KTtcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAoLS1zLnByZXZfbGVuZ3RoICE9PSAwKTtcbiAgICAgIHMubWF0Y2hfYXZhaWxhYmxlID0gMDtcbiAgICAgIHMubWF0Y2hfbGVuZ3RoID0gTUlOX01BVENIIC0gMTtcbiAgICAgIHMuc3Ryc3RhcnQrKztcblxuICAgICAgaWYgKGJmbHVzaCkge1xuICAgICAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovXG4gICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICAgIH1cbiAgICAgICAgLyoqKi9cbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAocy5tYXRjaF9hdmFpbGFibGUpIHtcbiAgICAgIC8qIElmIHRoZXJlIHdhcyBubyBtYXRjaCBhdCB0aGUgcHJldmlvdXMgcG9zaXRpb24sIG91dHB1dCBhXG4gICAgICAgKiBzaW5nbGUgbGl0ZXJhbC4gSWYgdGhlcmUgd2FzIGEgbWF0Y2ggYnV0IHRoZSBjdXJyZW50IG1hdGNoXG4gICAgICAgKiBpcyBsb25nZXIsIHRydW5jYXRlIHRoZSBwcmV2aW91cyBtYXRjaCB0byBhIHNpbmdsZSBsaXRlcmFsLlxuICAgICAgICovXG4gICAgICAvL1RyYWNldnYoKHN0ZGVycixcIiVjXCIsIHMtPndpbmRvd1tzLT5zdHJzdGFydC0xXSkpO1xuICAgICAgLyoqKiBfdHJfdGFsbHlfbGl0KHMsIHMud2luZG93W3Muc3Ryc3RhcnQtMV0sIGJmbHVzaCk7ICoqKi9cbiAgICAgIGJmbHVzaCA9IF90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0IC0gMV0pO1xuXG4gICAgICBpZiAoYmZsdXNoKSB7XG4gICAgICAgIC8qKiogRkxVU0hfQkxPQ0tfT05MWShzLCAwKSAqKiovXG4gICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgICAgICAvKioqL1xuICAgICAgfVxuICAgICAgcy5zdHJzdGFydCsrO1xuICAgICAgcy5sb29rYWhlYWQtLTtcbiAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIFRoZXJlIGlzIG5vIHByZXZpb3VzIG1hdGNoIHRvIGNvbXBhcmUgd2l0aCwgd2FpdCBmb3JcbiAgICAgICAqIHRoZSBuZXh0IHN0ZXAgdG8gZGVjaWRlLlxuICAgICAgICovXG4gICAgICBzLm1hdGNoX2F2YWlsYWJsZSA9IDE7XG4gICAgICBzLnN0cnN0YXJ0Kys7XG4gICAgICBzLmxvb2thaGVhZC0tO1xuICAgIH1cbiAgfVxuICAvL0Fzc2VydCAoZmx1c2ggIT0gWl9OT19GTFVTSCwgXCJubyBmbHVzaD9cIik7XG4gIGlmIChzLm1hdGNoX2F2YWlsYWJsZSkge1xuICAgIC8vVHJhY2V2digoc3RkZXJyLFwiJWNcIiwgcy0+d2luZG93W3MtPnN0cnN0YXJ0LTFdKSk7XG4gICAgLyoqKiBfdHJfdGFsbHlfbGl0KHMsIHMud2luZG93W3Muc3Ryc3RhcnQtMV0sIGJmbHVzaCk7ICoqKi9cbiAgICBiZmx1c2ggPSBfdHJfdGFsbHkocywgMCwgcy53aW5kb3dbcy5zdHJzdGFydCAtIDFdKTtcblxuICAgIHMubWF0Y2hfYXZhaWxhYmxlID0gMDtcbiAgfVxuICBzLmluc2VydCA9IHMuc3Ryc3RhcnQgPCBNSU5fTUFUQ0ggLSAxID8gcy5zdHJzdGFydCA6IE1JTl9NQVRDSCAtIDE7XG4gIGlmIChmbHVzaCA9PT0gWl9GSU5JU0gkMykge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMSk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7XG4gICAgfVxuICAgIC8qKiovXG4gICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FO1xuICB9XG4gIGlmIChzLnN5bV9uZXh0KSB7XG4gICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgIH1cbiAgICAvKioqL1xuICB9XG5cbiAgcmV0dXJuIEJTX0JMT0NLX0RPTkU7XG59O1xuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogRm9yIFpfUkxFLCBzaW1wbHkgbG9vayBmb3IgcnVucyBvZiBieXRlcywgZ2VuZXJhdGUgbWF0Y2hlcyBvbmx5IG9mIGRpc3RhbmNlXG4gKiBvbmUuICBEbyBub3QgbWFpbnRhaW4gYSBoYXNoIHRhYmxlLiAgKEl0IHdpbGwgYmUgcmVnZW5lcmF0ZWQgaWYgdGhpcyBydW4gb2ZcbiAqIGRlZmxhdGUgc3dpdGNoZXMgYXdheSBmcm9tIFpfUkxFLilcbiAqL1xuY29uc3QgZGVmbGF0ZV9ybGUgPSAocywgZmx1c2gpID0+IHtcblxuICBsZXQgYmZsdXNoOyAgICAgICAgICAgIC8qIHNldCBpZiBjdXJyZW50IGJsb2NrIG11c3QgYmUgZmx1c2hlZCAqL1xuICBsZXQgcHJldjsgICAgICAgICAgICAgIC8qIGJ5dGUgYXQgZGlzdGFuY2Ugb25lIHRvIG1hdGNoICovXG4gIGxldCBzY2FuLCBzdHJlbmQ7ICAgICAgLyogc2NhbiBnb2VzIHVwIHRvIHN0cmVuZCBmb3IgbGVuZ3RoIG9mIHJ1biAqL1xuXG4gIGNvbnN0IF93aW4gPSBzLndpbmRvdztcblxuICBmb3IgKDs7KSB7XG4gICAgLyogTWFrZSBzdXJlIHRoYXQgd2UgYWx3YXlzIGhhdmUgZW5vdWdoIGxvb2thaGVhZCwgZXhjZXB0XG4gICAgICogYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgZmlsZS4gV2UgbmVlZCBNQVhfTUFUQ0ggYnl0ZXNcbiAgICAgKiBmb3IgdGhlIGxvbmdlc3QgcnVuLCBwbHVzIG9uZSBmb3IgdGhlIHVucm9sbGVkIGxvb3AuXG4gICAgICovXG4gICAgaWYgKHMubG9va2FoZWFkIDw9IE1BWF9NQVRDSCkge1xuICAgICAgZmlsbF93aW5kb3cocyk7XG4gICAgICBpZiAocy5sb29rYWhlYWQgPD0gTUFYX01BVENIICYmIGZsdXNoID09PSBaX05PX0ZMVVNIJDIpIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgeyBicmVhazsgfSAvKiBmbHVzaCB0aGUgY3VycmVudCBibG9jayAqL1xuICAgIH1cblxuICAgIC8qIFNlZSBob3cgbWFueSB0aW1lcyB0aGUgcHJldmlvdXMgYnl0ZSByZXBlYXRzICovXG4gICAgcy5tYXRjaF9sZW5ndGggPSAwO1xuICAgIGlmIChzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0ggJiYgcy5zdHJzdGFydCA+IDApIHtcbiAgICAgIHNjYW4gPSBzLnN0cnN0YXJ0IC0gMTtcbiAgICAgIHByZXYgPSBfd2luW3NjYW5dO1xuICAgICAgaWYgKHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dKSB7XG4gICAgICAgIHN0cmVuZCA9IHMuc3Ryc3RhcnQgKyBNQVhfTUFUQ0g7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAvKmpzaGludCBub2VtcHR5OmZhbHNlKi9cbiAgICAgICAgfSB3aGlsZSAocHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJlxuICAgICAgICAgICAgICAgICBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmXG4gICAgICAgICAgICAgICAgIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiZcbiAgICAgICAgICAgICAgICAgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJlxuICAgICAgICAgICAgICAgICBzY2FuIDwgc3RyZW5kKTtcbiAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBNQVhfTUFUQ0ggLSAoc3RyZW5kIC0gc2Nhbik7XG4gICAgICAgIGlmIChzLm1hdGNoX2xlbmd0aCA+IHMubG9va2FoZWFkKSB7XG4gICAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBzLmxvb2thaGVhZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy9Bc3NlcnQoc2NhbiA8PSBzLT53aW5kb3crKHVJbnQpKHMtPndpbmRvd19zaXplLTEpLCBcIndpbGQgc2NhblwiKTtcbiAgICB9XG5cbiAgICAvKiBFbWl0IG1hdGNoIGlmIGhhdmUgcnVuIG9mIE1JTl9NQVRDSCBvciBsb25nZXIsIGVsc2UgZW1pdCBsaXRlcmFsICovXG4gICAgaWYgKHMubWF0Y2hfbGVuZ3RoID49IE1JTl9NQVRDSCkge1xuICAgICAgLy9jaGVja19tYXRjaChzLCBzLnN0cnN0YXJ0LCBzLnN0cnN0YXJ0IC0gMSwgcy5tYXRjaF9sZW5ndGgpO1xuXG4gICAgICAvKioqIF90cl90YWxseV9kaXN0KHMsIDEsIHMubWF0Y2hfbGVuZ3RoIC0gTUlOX01BVENILCBiZmx1c2gpOyAqKiovXG4gICAgICBiZmx1c2ggPSBfdHJfdGFsbHkocywgMSwgcy5tYXRjaF9sZW5ndGggLSBNSU5fTUFUQ0gpO1xuXG4gICAgICBzLmxvb2thaGVhZCAtPSBzLm1hdGNoX2xlbmd0aDtcbiAgICAgIHMuc3Ryc3RhcnQgKz0gcy5tYXRjaF9sZW5ndGg7XG4gICAgICBzLm1hdGNoX2xlbmd0aCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIE5vIG1hdGNoLCBvdXRwdXQgYSBsaXRlcmFsIGJ5dGUgKi9cbiAgICAgIC8vVHJhY2V2digoc3RkZXJyLFwiJWNcIiwgcy0+d2luZG93W3MtPnN0cnN0YXJ0XSkpO1xuICAgICAgLyoqKiBfdHJfdGFsbHlfbGl0KHMsIHMud2luZG93W3Muc3Ryc3RhcnRdLCBiZmx1c2gpOyAqKiovXG4gICAgICBiZmx1c2ggPSBfdHJfdGFsbHkocywgMCwgcy53aW5kb3dbcy5zdHJzdGFydF0pO1xuXG4gICAgICBzLmxvb2thaGVhZC0tO1xuICAgICAgcy5zdHJzdGFydCsrO1xuICAgIH1cbiAgICBpZiAoYmZsdXNoKSB7XG4gICAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovXG4gICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTtcbiAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICB9XG4gICAgICAvKioqL1xuICAgIH1cbiAgfVxuICBzLmluc2VydCA9IDA7XG4gIGlmIChmbHVzaCA9PT0gWl9GSU5JU0gkMykge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMSk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7XG4gICAgfVxuICAgIC8qKiovXG4gICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FO1xuICB9XG4gIGlmIChzLnN5bV9uZXh0KSB7XG4gICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgIH1cbiAgICAvKioqL1xuICB9XG4gIHJldHVybiBCU19CTE9DS19ET05FO1xufTtcblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBGb3IgWl9IVUZGTUFOX09OTFksIGRvIG5vdCBsb29rIGZvciBtYXRjaGVzLiAgRG8gbm90IG1haW50YWluIGEgaGFzaCB0YWJsZS5cbiAqIChJdCB3aWxsIGJlIHJlZ2VuZXJhdGVkIGlmIHRoaXMgcnVuIG9mIGRlZmxhdGUgc3dpdGNoZXMgYXdheSBmcm9tIEh1ZmZtYW4uKVxuICovXG5jb25zdCBkZWZsYXRlX2h1ZmYgPSAocywgZmx1c2gpID0+IHtcblxuICBsZXQgYmZsdXNoOyAgICAgICAgICAgICAvKiBzZXQgaWYgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQgKi9cblxuICBmb3IgKDs7KSB7XG4gICAgLyogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIGxpdGVyYWwgdG8gd3JpdGUuICovXG4gICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7XG4gICAgICBmaWxsX3dpbmRvdyhzKTtcbiAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkge1xuICAgICAgICBpZiAoZmx1c2ggPT09IFpfTk9fRkxVU0gkMikge1xuICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7ICAgICAgLyogZmx1c2ggdGhlIGN1cnJlbnQgYmxvY2sgKi9cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBPdXRwdXQgYSBsaXRlcmFsIGJ5dGUgKi9cbiAgICBzLm1hdGNoX2xlbmd0aCA9IDA7XG4gICAgLy9UcmFjZXZ2KChzdGRlcnIsXCIlY1wiLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnRdKSk7XG4gICAgLyoqKiBfdHJfdGFsbHlfbGl0KHMsIHMud2luZG93W3Muc3Ryc3RhcnRdLCBiZmx1c2gpOyAqKiovXG4gICAgYmZsdXNoID0gX3RyX3RhbGx5KHMsIDAsIHMud2luZG93W3Muc3Ryc3RhcnRdKTtcbiAgICBzLmxvb2thaGVhZC0tO1xuICAgIHMuc3Ryc3RhcnQrKztcbiAgICBpZiAoYmZsdXNoKSB7XG4gICAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovXG4gICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTtcbiAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICB9XG4gICAgICAvKioqL1xuICAgIH1cbiAgfVxuICBzLmluc2VydCA9IDA7XG4gIGlmIChmbHVzaCA9PT0gWl9GSU5JU0gkMykge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMSk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7XG4gICAgfVxuICAgIC8qKiovXG4gICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FO1xuICB9XG4gIGlmIChzLnN5bV9uZXh0KSB7XG4gICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgIH1cbiAgICAvKioqL1xuICB9XG4gIHJldHVybiBCU19CTE9DS19ET05FO1xufTtcblxuLyogVmFsdWVzIGZvciBtYXhfbGF6eV9tYXRjaCwgZ29vZF9tYXRjaCBhbmQgbWF4X2NoYWluX2xlbmd0aCwgZGVwZW5kaW5nIG9uXG4gKiB0aGUgZGVzaXJlZCBwYWNrIGxldmVsICgwLi45KS4gVGhlIHZhbHVlcyBnaXZlbiBiZWxvdyBoYXZlIGJlZW4gdHVuZWQgdG9cbiAqIGV4Y2x1ZGUgd29yc3QgY2FzZSBwZXJmb3JtYW5jZSBmb3IgcGF0aG9sb2dpY2FsIGZpbGVzLiBCZXR0ZXIgdmFsdWVzIG1heSBiZVxuICogZm91bmQgZm9yIHNwZWNpZmljIGZpbGVzLlxuICovXG5mdW5jdGlvbiBDb25maWcoZ29vZF9sZW5ndGgsIG1heF9sYXp5LCBuaWNlX2xlbmd0aCwgbWF4X2NoYWluLCBmdW5jKSB7XG5cbiAgdGhpcy5nb29kX2xlbmd0aCA9IGdvb2RfbGVuZ3RoO1xuICB0aGlzLm1heF9sYXp5ID0gbWF4X2xhenk7XG4gIHRoaXMubmljZV9sZW5ndGggPSBuaWNlX2xlbmd0aDtcbiAgdGhpcy5tYXhfY2hhaW4gPSBtYXhfY2hhaW47XG4gIHRoaXMuZnVuYyA9IGZ1bmM7XG59XG5cbmNvbnN0IGNvbmZpZ3VyYXRpb25fdGFibGUgPSBbXG4gIC8qICAgICAgZ29vZCBsYXp5IG5pY2UgY2hhaW4gKi9cbiAgbmV3IENvbmZpZygwLCAwLCAwLCAwLCBkZWZsYXRlX3N0b3JlZCksICAgICAgICAgIC8qIDAgc3RvcmUgb25seSAqL1xuICBuZXcgQ29uZmlnKDQsIDQsIDgsIDQsIGRlZmxhdGVfZmFzdCksICAgICAgICAgICAgLyogMSBtYXggc3BlZWQsIG5vIGxhenkgbWF0Y2hlcyAqL1xuICBuZXcgQ29uZmlnKDQsIDUsIDE2LCA4LCBkZWZsYXRlX2Zhc3QpLCAgICAgICAgICAgLyogMiAqL1xuICBuZXcgQ29uZmlnKDQsIDYsIDMyLCAzMiwgZGVmbGF0ZV9mYXN0KSwgICAgICAgICAgLyogMyAqL1xuXG4gIG5ldyBDb25maWcoNCwgNCwgMTYsIDE2LCBkZWZsYXRlX3Nsb3cpLCAgICAgICAgICAvKiA0IGxhenkgbWF0Y2hlcyAqL1xuICBuZXcgQ29uZmlnKDgsIDE2LCAzMiwgMzIsIGRlZmxhdGVfc2xvdyksICAgICAgICAgLyogNSAqL1xuICBuZXcgQ29uZmlnKDgsIDE2LCAxMjgsIDEyOCwgZGVmbGF0ZV9zbG93KSwgICAgICAgLyogNiAqL1xuICBuZXcgQ29uZmlnKDgsIDMyLCAxMjgsIDI1NiwgZGVmbGF0ZV9zbG93KSwgICAgICAgLyogNyAqL1xuICBuZXcgQ29uZmlnKDMyLCAxMjgsIDI1OCwgMTAyNCwgZGVmbGF0ZV9zbG93KSwgICAgLyogOCAqL1xuICBuZXcgQ29uZmlnKDMyLCAyNTgsIDI1OCwgNDA5NiwgZGVmbGF0ZV9zbG93KSAgICAgLyogOSBtYXggY29tcHJlc3Npb24gKi9cbl07XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBJbml0aWFsaXplIHRoZSBcImxvbmdlc3QgbWF0Y2hcIiByb3V0aW5lcyBmb3IgYSBuZXcgemxpYiBzdHJlYW1cbiAqL1xuY29uc3QgbG1faW5pdCA9IChzKSA9PiB7XG5cbiAgcy53aW5kb3dfc2l6ZSA9IDIgKiBzLndfc2l6ZTtcblxuICAvKioqIENMRUFSX0hBU0gocyk7ICoqKi9cbiAgemVybyhzLmhlYWQpOyAvLyBGaWxsIHdpdGggTklMICg9IDApO1xuXG4gIC8qIFNldCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnM6XG4gICAqL1xuICBzLm1heF9sYXp5X21hdGNoID0gY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5tYXhfbGF6eTtcbiAgcy5nb29kX21hdGNoID0gY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5nb29kX2xlbmd0aDtcbiAgcy5uaWNlX21hdGNoID0gY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5uaWNlX2xlbmd0aDtcbiAgcy5tYXhfY2hhaW5fbGVuZ3RoID0gY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5tYXhfY2hhaW47XG5cbiAgcy5zdHJzdGFydCA9IDA7XG4gIHMuYmxvY2tfc3RhcnQgPSAwO1xuICBzLmxvb2thaGVhZCA9IDA7XG4gIHMuaW5zZXJ0ID0gMDtcbiAgcy5tYXRjaF9sZW5ndGggPSBzLnByZXZfbGVuZ3RoID0gTUlOX01BVENIIC0gMTtcbiAgcy5tYXRjaF9hdmFpbGFibGUgPSAwO1xuICBzLmluc19oID0gMDtcbn07XG5cblxuZnVuY3Rpb24gRGVmbGF0ZVN0YXRlKCkge1xuICB0aGlzLnN0cm0gPSBudWxsOyAgICAgICAgICAgIC8qIHBvaW50ZXIgYmFjayB0byB0aGlzIHpsaWIgc3RyZWFtICovXG4gIHRoaXMuc3RhdHVzID0gMDsgICAgICAgICAgICAvKiBhcyB0aGUgbmFtZSBpbXBsaWVzICovXG4gIHRoaXMucGVuZGluZ19idWYgPSBudWxsOyAgICAgIC8qIG91dHB1dCBzdGlsbCBwZW5kaW5nICovXG4gIHRoaXMucGVuZGluZ19idWZfc2l6ZSA9IDA7ICAvKiBzaXplIG9mIHBlbmRpbmdfYnVmICovXG4gIHRoaXMucGVuZGluZ19vdXQgPSAwOyAgICAgICAvKiBuZXh0IHBlbmRpbmcgYnl0ZSB0byBvdXRwdXQgdG8gdGhlIHN0cmVhbSAqL1xuICB0aGlzLnBlbmRpbmcgPSAwOyAgICAgICAgICAgLyogbmIgb2YgYnl0ZXMgaW4gdGhlIHBlbmRpbmcgYnVmZmVyICovXG4gIHRoaXMud3JhcCA9IDA7ICAgICAgICAgICAgICAvKiBiaXQgMCB0cnVlIGZvciB6bGliLCBiaXQgMSB0cnVlIGZvciBnemlwICovXG4gIHRoaXMuZ3poZWFkID0gbnVsbDsgICAgICAgICAvKiBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiB0byB3cml0ZSAqL1xuICB0aGlzLmd6aW5kZXggPSAwOyAgICAgICAgICAgLyogd2hlcmUgaW4gZXh0cmEsIG5hbWUsIG9yIGNvbW1lbnQgKi9cbiAgdGhpcy5tZXRob2QgPSBaX0RFRkxBVEVEJDI7IC8qIGNhbiBvbmx5IGJlIERFRkxBVEVEICovXG4gIHRoaXMubGFzdF9mbHVzaCA9IC0xOyAgIC8qIHZhbHVlIG9mIGZsdXNoIHBhcmFtIGZvciBwcmV2aW91cyBkZWZsYXRlIGNhbGwgKi9cblxuICB0aGlzLndfc2l6ZSA9IDA7ICAvKiBMWjc3IHdpbmRvdyBzaXplICgzMksgYnkgZGVmYXVsdCkgKi9cbiAgdGhpcy53X2JpdHMgPSAwOyAgLyogbG9nMih3X3NpemUpICAoOC4uMTYpICovXG4gIHRoaXMud19tYXNrID0gMDsgIC8qIHdfc2l6ZSAtIDEgKi9cblxuICB0aGlzLndpbmRvdyA9IG51bGw7XG4gIC8qIFNsaWRpbmcgd2luZG93LiBJbnB1dCBieXRlcyBhcmUgcmVhZCBpbnRvIHRoZSBzZWNvbmQgaGFsZiBvZiB0aGUgd2luZG93LFxuICAgKiBhbmQgbW92ZSB0byB0aGUgZmlyc3QgaGFsZiBsYXRlciB0byBrZWVwIGEgZGljdGlvbmFyeSBvZiBhdCBsZWFzdCB3U2l6ZVxuICAgKiBieXRlcy4gV2l0aCB0aGlzIG9yZ2FuaXphdGlvbiwgbWF0Y2hlcyBhcmUgbGltaXRlZCB0byBhIGRpc3RhbmNlIG9mXG4gICAqIHdTaXplLU1BWF9NQVRDSCBieXRlcywgYnV0IHRoaXMgZW5zdXJlcyB0aGF0IElPIGlzIGFsd2F5c1xuICAgKiBwZXJmb3JtZWQgd2l0aCBhIGxlbmd0aCBtdWx0aXBsZSBvZiB0aGUgYmxvY2sgc2l6ZS5cbiAgICovXG5cbiAgdGhpcy53aW5kb3dfc2l6ZSA9IDA7XG4gIC8qIEFjdHVhbCBzaXplIG9mIHdpbmRvdzogMip3U2l6ZSwgZXhjZXB0IHdoZW4gdGhlIHVzZXIgaW5wdXQgYnVmZmVyXG4gICAqIGlzIGRpcmVjdGx5IHVzZWQgYXMgc2xpZGluZyB3aW5kb3cuXG4gICAqL1xuXG4gIHRoaXMucHJldiA9IG51bGw7XG4gIC8qIExpbmsgdG8gb2xkZXIgc3RyaW5nIHdpdGggc2FtZSBoYXNoIGluZGV4LiBUbyBsaW1pdCB0aGUgc2l6ZSBvZiB0aGlzXG4gICAqIGFycmF5IHRvIDY0SywgdGhpcyBsaW5rIGlzIG1haW50YWluZWQgb25seSBmb3IgdGhlIGxhc3QgMzJLIHN0cmluZ3MuXG4gICAqIEFuIGluZGV4IGluIHRoaXMgYXJyYXkgaXMgdGh1cyBhIHdpbmRvdyBpbmRleCBtb2R1bG8gMzJLLlxuICAgKi9cblxuICB0aGlzLmhlYWQgPSBudWxsOyAgIC8qIEhlYWRzIG9mIHRoZSBoYXNoIGNoYWlucyBvciBOSUwuICovXG5cbiAgdGhpcy5pbnNfaCA9IDA7ICAgICAgIC8qIGhhc2ggaW5kZXggb2Ygc3RyaW5nIHRvIGJlIGluc2VydGVkICovXG4gIHRoaXMubGVnYWN5X2hhc2ggPSAwOyAvKiB1c2UgY2xhc3NpYyB6bGliIGhhc2ggaW5zdGVhZCBvZiBkZWZhdWx0IEFOWkFDKysgKi9cbiAgdGhpcy5oYXNoX3NpemUgPSAwOyAgIC8qIG51bWJlciBvZiBlbGVtZW50cyBpbiBoYXNoIHRhYmxlICovXG4gIHRoaXMuaGFzaF9iaXRzID0gMDsgICAvKiBsb2cyKGhhc2hfc2l6ZSkgKi9cbiAgdGhpcy5oYXNoX21hc2sgPSAwOyAgIC8qIGhhc2hfc2l6ZS0xICovXG5cbiAgdGhpcy5oYXNoX3NoaWZ0ID0gMDtcbiAgLyogTnVtYmVyIG9mIGJpdHMgYnkgd2hpY2ggaW5zX2ggbXVzdCBiZSBzaGlmdGVkIGF0IGVhY2ggaW5wdXRcbiAgICogc3RlcC4gSXQgbXVzdCBiZSBzdWNoIHRoYXQgYWZ0ZXIgTUlOX01BVENIIHN0ZXBzLCB0aGUgb2xkZXN0XG4gICAqIGJ5dGUgbm8gbG9uZ2VyIHRha2VzIHBhcnQgaW4gdGhlIGhhc2gga2V5LCB0aGF0IGlzOlxuICAgKiAgIGhhc2hfc2hpZnQgKiBNSU5fTUFUQ0ggPj0gaGFzaF9iaXRzXG4gICAqL1xuXG4gIHRoaXMuYmxvY2tfc3RhcnQgPSAwO1xuICAvKiBXaW5kb3cgcG9zaXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBvdXRwdXQgYmxvY2suIEdldHNcbiAgICogbmVnYXRpdmUgd2hlbiB0aGUgd2luZG93IGlzIG1vdmVkIGJhY2t3YXJkcy5cbiAgICovXG5cbiAgdGhpcy5tYXRjaF9sZW5ndGggPSAwOyAgICAgIC8qIGxlbmd0aCBvZiBiZXN0IG1hdGNoICovXG4gIHRoaXMucHJldl9tYXRjaCA9IDA7ICAgICAgICAvKiBwcmV2aW91cyBtYXRjaCAqL1xuICB0aGlzLm1hdGNoX2F2YWlsYWJsZSA9IDA7ICAgLyogc2V0IGlmIHByZXZpb3VzIG1hdGNoIGV4aXN0cyAqL1xuICB0aGlzLnN0cnN0YXJ0ID0gMDsgICAgICAgICAgLyogc3RhcnQgb2Ygc3RyaW5nIHRvIGluc2VydCAqL1xuICB0aGlzLm1hdGNoX3N0YXJ0ID0gMDsgICAgICAgLyogc3RhcnQgb2YgbWF0Y2hpbmcgc3RyaW5nICovXG4gIHRoaXMubG9va2FoZWFkID0gMDsgICAgICAgICAvKiBudW1iZXIgb2YgdmFsaWQgYnl0ZXMgYWhlYWQgaW4gd2luZG93ICovXG5cbiAgdGhpcy5wcmV2X2xlbmd0aCA9IDA7XG4gIC8qIExlbmd0aCBvZiB0aGUgYmVzdCBtYXRjaCBhdCBwcmV2aW91cyBzdGVwLiBNYXRjaGVzIG5vdCBncmVhdGVyIHRoYW4gdGhpc1xuICAgKiBhcmUgZGlzY2FyZGVkLiBUaGlzIGlzIHVzZWQgaW4gdGhlIGxhenkgbWF0Y2ggZXZhbHVhdGlvbi5cbiAgICovXG5cbiAgdGhpcy5tYXhfY2hhaW5fbGVuZ3RoID0gMDtcbiAgLyogVG8gc3BlZWQgdXAgZGVmbGF0aW9uLCBoYXNoIGNoYWlucyBhcmUgbmV2ZXIgc2VhcmNoZWQgYmV5b25kIHRoaXNcbiAgICogbGVuZ3RoLiAgQSBoaWdoZXIgbGltaXQgaW1wcm92ZXMgY29tcHJlc3Npb24gcmF0aW8gYnV0IGRlZ3JhZGVzIHRoZVxuICAgKiBzcGVlZC5cbiAgICovXG5cbiAgdGhpcy5tYXhfbGF6eV9tYXRjaCA9IDA7XG4gIC8qIEF0dGVtcHQgdG8gZmluZCBhIGJldHRlciBtYXRjaCBvbmx5IHdoZW4gdGhlIGN1cnJlbnQgbWF0Y2ggaXMgc3RyaWN0bHlcbiAgICogc21hbGxlciB0aGFuIHRoaXMgdmFsdWUuIFRoaXMgbWVjaGFuaXNtIGlzIHVzZWQgb25seSBmb3IgY29tcHJlc3Npb25cbiAgICogbGV2ZWxzID49IDQuXG4gICAqL1xuICAvLyBUaGF0J3MgYWxpYXMgdG8gbWF4X2xhenlfbWF0Y2gsIGRvbid0IHVzZSBkaXJlY3RseVxuICAvL3RoaXMubWF4X2luc2VydF9sZW5ndGggPSAwO1xuICAvKiBJbnNlcnQgbmV3IHN0cmluZ3MgaW4gdGhlIGhhc2ggdGFibGUgb25seSBpZiB0aGUgbWF0Y2ggbGVuZ3RoIGlzIG5vdFxuICAgKiBncmVhdGVyIHRoYW4gdGhpcyBsZW5ndGguIFRoaXMgc2F2ZXMgdGltZSBidXQgZGVncmFkZXMgY29tcHJlc3Npb24uXG4gICAqIG1heF9pbnNlcnRfbGVuZ3RoIGlzIHVzZWQgb25seSBmb3IgY29tcHJlc3Npb24gbGV2ZWxzIDw9IDMuXG4gICAqL1xuXG4gIHRoaXMubGV2ZWwgPSAwOyAgICAgLyogY29tcHJlc3Npb24gbGV2ZWwgKDEuLjkpICovXG4gIHRoaXMuc3RyYXRlZ3kgPSAwOyAgLyogZmF2b3Igb3IgZm9yY2UgSHVmZm1hbiBjb2RpbmcqL1xuXG4gIHRoaXMuZ29vZF9tYXRjaCA9IDA7XG4gIC8qIFVzZSBhIGZhc3RlciBzZWFyY2ggd2hlbiB0aGUgcHJldmlvdXMgbWF0Y2ggaXMgbG9uZ2VyIHRoYW4gdGhpcyAqL1xuXG4gIHRoaXMubmljZV9tYXRjaCA9IDA7IC8qIFN0b3Agc2VhcmNoaW5nIHdoZW4gY3VycmVudCBtYXRjaCBleGNlZWRzIHRoaXMgKi9cblxuICAgICAgICAgICAgICAvKiB1c2VkIGJ5IHRyZWVzLmM6ICovXG5cbiAgLyogRGlkbid0IHVzZSBjdF9kYXRhIHR5cGVkZWYgYmVsb3cgdG8gc3VwcHJlc3MgY29tcGlsZXIgd2FybmluZyAqL1xuXG4gIC8vIHN0cnVjdCBjdF9kYXRhX3MgZHluX2x0cmVlW0hFQVBfU0laRV07ICAgLyogbGl0ZXJhbCBhbmQgbGVuZ3RoIHRyZWUgKi9cbiAgLy8gc3RydWN0IGN0X2RhdGFfcyBkeW5fZHRyZWVbMipEX0NPREVTKzFdOyAvKiBkaXN0YW5jZSB0cmVlICovXG4gIC8vIHN0cnVjdCBjdF9kYXRhX3MgYmxfdHJlZVsyKkJMX0NPREVTKzFdOyAgLyogSHVmZm1hbiB0cmVlIGZvciBiaXQgbGVuZ3RocyAqL1xuXG4gIC8vIFVzZSBmbGF0IGFycmF5IG9mIERPVUJMRSBzaXplLCB3aXRoIGludGVybGVhdmVkIGZhdGEsXG4gIC8vIGJlY2F1c2UgSlMgZG9lcyBub3Qgc3VwcG9ydCBlZmZlY3RpdmVcbiAgdGhpcy5keW5fbHRyZWUgID0gbmV3IFVpbnQxNkFycmF5KEhFQVBfU0laRSAqIDIpO1xuICB0aGlzLmR5bl9kdHJlZSAgPSBuZXcgVWludDE2QXJyYXkoKDIgKiBEX0NPREVTICsgMSkgKiAyKTtcbiAgdGhpcy5ibF90cmVlICAgID0gbmV3IFVpbnQxNkFycmF5KCgyICogQkxfQ09ERVMgKyAxKSAqIDIpO1xuICB6ZXJvKHRoaXMuZHluX2x0cmVlKTtcbiAgemVybyh0aGlzLmR5bl9kdHJlZSk7XG4gIHplcm8odGhpcy5ibF90cmVlKTtcblxuICB0aGlzLmxfZGVzYyAgID0gbnVsbDsgICAgICAgICAvKiBkZXNjLiBmb3IgbGl0ZXJhbCB0cmVlICovXG4gIHRoaXMuZF9kZXNjICAgPSBudWxsOyAgICAgICAgIC8qIGRlc2MuIGZvciBkaXN0YW5jZSB0cmVlICovXG4gIHRoaXMuYmxfZGVzYyAgPSBudWxsOyAgICAgICAgIC8qIGRlc2MuIGZvciBiaXQgbGVuZ3RoIHRyZWUgKi9cblxuICAvL3VzaCBibF9jb3VudFtNQVhfQklUUysxXTtcbiAgdGhpcy5ibF9jb3VudCA9IG5ldyBVaW50MTZBcnJheShNQVhfQklUUyArIDEpO1xuICAvKiBudW1iZXIgb2YgY29kZXMgYXQgZWFjaCBiaXQgbGVuZ3RoIGZvciBhbiBvcHRpbWFsIHRyZWUgKi9cblxuICAvL2ludCBoZWFwWzIqTF9DT0RFUysxXTsgICAgICAvKiBoZWFwIHVzZWQgdG8gYnVpbGQgdGhlIEh1ZmZtYW4gdHJlZXMgKi9cbiAgdGhpcy5oZWFwID0gbmV3IFVpbnQxNkFycmF5KDIgKiBMX0NPREVTICsgMSk7ICAvKiBoZWFwIHVzZWQgdG8gYnVpbGQgdGhlIEh1ZmZtYW4gdHJlZXMgKi9cbiAgemVybyh0aGlzLmhlYXApO1xuXG4gIHRoaXMuaGVhcF9sZW4gPSAwOyAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgaGVhcCAqL1xuICB0aGlzLmhlYXBfbWF4ID0gMDsgICAgICAgICAgICAgICAvKiBlbGVtZW50IG9mIGxhcmdlc3QgZnJlcXVlbmN5ICovXG4gIC8qIFRoZSBzb25zIG9mIGhlYXBbbl0gYXJlIGhlYXBbMipuXSBhbmQgaGVhcFsyKm4rMV0uIGhlYXBbMF0gaXMgbm90IHVzZWQuXG4gICAqIFRoZSBzYW1lIGhlYXAgYXJyYXkgaXMgdXNlZCB0byBidWlsZCBhbGwgdHJlZXMuXG4gICAqL1xuXG4gIHRoaXMuZGVwdGggPSBuZXcgVWludDE2QXJyYXkoMiAqIExfQ09ERVMgKyAxKTsgLy91Y2ggZGVwdGhbMipMX0NPREVTKzFdO1xuICB6ZXJvKHRoaXMuZGVwdGgpO1xuICAvKiBEZXB0aCBvZiBlYWNoIHN1YnRyZWUgdXNlZCBhcyB0aWUgYnJlYWtlciBmb3IgdHJlZXMgb2YgZXF1YWwgZnJlcXVlbmN5XG4gICAqL1xuXG4gIHRoaXMuc3ltX2J1ZiA9IDA7ICAgICAgICAvKiBidWZmZXIgZm9yIGRpc3RhbmNlcyBhbmQgbGl0ZXJhbHMvbGVuZ3RocyAqL1xuXG4gIHRoaXMubGl0X2J1ZnNpemUgPSAwO1xuICAvKiBTaXplIG9mIG1hdGNoIGJ1ZmZlciBmb3IgbGl0ZXJhbHMvbGVuZ3Rocy4gIFRoZXJlIGFyZSA0IHJlYXNvbnMgZm9yXG4gICAqIGxpbWl0aW5nIGxpdF9idWZzaXplIHRvIDY0SzpcbiAgICogICAtIGZyZXF1ZW5jaWVzIGNhbiBiZSBrZXB0IGluIDE2IGJpdCBjb3VudGVyc1xuICAgKiAgIC0gaWYgY29tcHJlc3Npb24gaXMgbm90IHN1Y2Nlc3NmdWwgZm9yIHRoZSBmaXJzdCBibG9jaywgYWxsIGlucHV0XG4gICAqICAgICBkYXRhIGlzIHN0aWxsIGluIHRoZSB3aW5kb3cgc28gd2UgY2FuIHN0aWxsIGVtaXQgYSBzdG9yZWQgYmxvY2sgZXZlblxuICAgKiAgICAgd2hlbiBpbnB1dCBjb21lcyBmcm9tIHN0YW5kYXJkIGlucHV0LiAgKFRoaXMgY2FuIGFsc28gYmUgZG9uZSBmb3JcbiAgICogICAgIGFsbCBibG9ja3MgaWYgbGl0X2J1ZnNpemUgaXMgbm90IGdyZWF0ZXIgdGhhbiAzMksuKVxuICAgKiAgIC0gaWYgY29tcHJlc3Npb24gaXMgbm90IHN1Y2Nlc3NmdWwgZm9yIGEgZmlsZSBzbWFsbGVyIHRoYW4gNjRLLCB3ZSBjYW5cbiAgICogICAgIGV2ZW4gZW1pdCBhIHN0b3JlZCBmaWxlIGluc3RlYWQgb2YgYSBzdG9yZWQgYmxvY2sgKHNhdmluZyA1IGJ5dGVzKS5cbiAgICogICAgIFRoaXMgaXMgYXBwbGljYWJsZSBvbmx5IGZvciB6aXAgKG5vdCBnemlwIG9yIHpsaWIpLlxuICAgKiAgIC0gY3JlYXRpbmcgbmV3IEh1ZmZtYW4gdHJlZXMgbGVzcyBmcmVxdWVudGx5IG1heSBub3QgcHJvdmlkZSBmYXN0XG4gICAqICAgICBhZGFwdGF0aW9uIHRvIGNoYW5nZXMgaW4gdGhlIGlucHV0IGRhdGEgc3RhdGlzdGljcy4gKFRha2UgZm9yXG4gICAqICAgICBleGFtcGxlIGEgYmluYXJ5IGZpbGUgd2l0aCBwb29ybHkgY29tcHJlc3NpYmxlIGNvZGUgZm9sbG93ZWQgYnlcbiAgICogICAgIGEgaGlnaGx5IGNvbXByZXNzaWJsZSBzdHJpbmcgdGFibGUuKSBTbWFsbGVyIGJ1ZmZlciBzaXplcyBnaXZlXG4gICAqICAgICBmYXN0IGFkYXB0YXRpb24gYnV0IGhhdmUgb2YgY291cnNlIHRoZSBvdmVyaGVhZCBvZiB0cmFuc21pdHRpbmdcbiAgICogICAgIHRyZWVzIG1vcmUgZnJlcXVlbnRseS5cbiAgICogICAtIEkgY2FuJ3QgY291bnQgYWJvdmUgNFxuICAgKi9cblxuICB0aGlzLnN5bV9uZXh0ID0gMDsgICAgICAvKiBydW5uaW5nIGluZGV4IGluIHN5bV9idWYgKi9cbiAgdGhpcy5zeW1fZW5kID0gMDsgICAgICAgLyogc3ltYm9sIHRhYmxlIGZ1bGwgd2hlbiBzeW1fbmV4dCByZWFjaGVzIHRoaXMgKi9cblxuICB0aGlzLm9wdF9sZW4gPSAwOyAgICAgICAvKiBiaXQgbGVuZ3RoIG9mIGN1cnJlbnQgYmxvY2sgd2l0aCBvcHRpbWFsIHRyZWVzICovXG4gIHRoaXMuc3RhdGljX2xlbiA9IDA7ICAgIC8qIGJpdCBsZW5ndGggb2YgY3VycmVudCBibG9jayB3aXRoIHN0YXRpYyB0cmVlcyAqL1xuICB0aGlzLm1hdGNoZXMgPSAwOyAgICAgICAvKiBudW1iZXIgb2Ygc3RyaW5nIG1hdGNoZXMgaW4gY3VycmVudCBibG9jayAqL1xuICB0aGlzLmluc2VydCA9IDA7ICAgICAgICAvKiBieXRlcyBhdCBlbmQgb2Ygd2luZG93IGxlZnQgdG8gaW5zZXJ0ICovXG5cblxuICB0aGlzLmJpX2J1ZiA9IDA7XG4gIC8qIE91dHB1dCBidWZmZXIuIGJpdHMgYXJlIGluc2VydGVkIHN0YXJ0aW5nIGF0IHRoZSBib3R0b20gKGxlYXN0XG4gICAqIHNpZ25pZmljYW50IGJpdHMpLlxuICAgKi9cbiAgdGhpcy5iaV92YWxpZCA9IDA7XG4gIC8qIE51bWJlciBvZiB2YWxpZCBiaXRzIGluIGJpX2J1Zi4gIEFsbCBiaXRzIGFib3ZlIHRoZSBsYXN0IHZhbGlkIGJpdFxuICAgKiBhcmUgYWx3YXlzIHplcm8uXG4gICAqL1xuXG4gIC8vIFVzZWQgZm9yIHdpbmRvdyBtZW1vcnkgaW5pdC4gV2Ugc2FmZWx5IGlnbm9yZSBpdCBmb3IgSlMuIFRoYXQgbWFrZXNcbiAgLy8gc2Vuc2Ugb25seSBmb3IgcG9pbnRlcnMgYW5kIG1lbW9yeSBjaGVjayB0b29scy5cbiAgLy90aGlzLmhpZ2hfd2F0ZXIgPSAwO1xuICAvKiBIaWdoIHdhdGVyIG1hcmsgb2Zmc2V0IGluIHdpbmRvdyBmb3IgaW5pdGlhbGl6ZWQgYnl0ZXMgLS0gYnl0ZXMgYWJvdmVcbiAgICogdGhpcyBhcmUgc2V0IHRvIHplcm8gaW4gb3JkZXIgdG8gYXZvaWQgbWVtb3J5IGNoZWNrIHdhcm5pbmdzIHdoZW5cbiAgICogbG9uZ2VzdCBtYXRjaCByb3V0aW5lcyBhY2Nlc3MgYnl0ZXMgcGFzdCB0aGUgaW5wdXQuICBUaGlzIGlzIHRoZW5cbiAgICogdXBkYXRlZCB0byB0aGUgbmV3IGhpZ2ggd2F0ZXIgbWFyay5cbiAgICovXG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ2hlY2sgZm9yIGEgdmFsaWQgZGVmbGF0ZSBzdHJlYW0gc3RhdGUuIFJldHVybiAwIGlmIG9rLCAxIGlmIG5vdC5cbiAqL1xuY29uc3QgZGVmbGF0ZVN0YXRlQ2hlY2sgPSAoc3RybSkgPT4ge1xuXG4gIGlmICghc3RybSkge1xuICAgIHJldHVybiAxO1xuICB9XG4gIGNvbnN0IHMgPSBzdHJtLnN0YXRlO1xuICBpZiAoIXMgfHwgcy5zdHJtICE9PSBzdHJtIHx8IChzLnN0YXR1cyAhPT0gSU5JVF9TVEFURSAmJlxuLy8jaWZkZWYgR1pJUFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnN0YXR1cyAhPT0gR1pJUF9TVEFURSAmJlxuLy8jZW5kaWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zdGF0dXMgIT09IEVYVFJBX1NUQVRFICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3RhdHVzICE9PSBOQU1FX1NUQVRFICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3RhdHVzICE9PSBDT01NRU5UX1NUQVRFICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3RhdHVzICE9PSBIQ1JDX1NUQVRFICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3RhdHVzICE9PSBCVVNZX1NUQVRFICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuc3RhdHVzICE9PSBGSU5JU0hfU1RBVEUpKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59O1xuXG5cbmNvbnN0IGRlZmxhdGVSZXNldEtlZXAgPSAoc3RybSkgPT4ge1xuXG4gIGlmIChkZWZsYXRlU3RhdGVDaGVjayhzdHJtKSkge1xuICAgIHJldHVybiBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IkMik7XG4gIH1cblxuICBzdHJtLnRvdGFsX2luID0gc3RybS50b3RhbF9vdXQgPSAwO1xuICBzdHJtLmRhdGFfdHlwZSA9IFpfVU5LTk9XTjtcblxuICBjb25zdCBzID0gc3RybS5zdGF0ZTtcbiAgcy5wZW5kaW5nID0gMDtcbiAgcy5wZW5kaW5nX291dCA9IDA7XG5cbiAgaWYgKHMud3JhcCA8IDApIHtcbiAgICBzLndyYXAgPSAtcy53cmFwO1xuICAgIC8qIHdhcyBtYWRlIG5lZ2F0aXZlIGJ5IGRlZmxhdGUoLi4uLCBaX0ZJTklTSCk7ICovXG4gIH1cbiAgcy5zdGF0dXMgPVxuLy8jaWZkZWYgR1pJUFxuICAgIHMud3JhcCA9PT0gMiA/IEdaSVBfU1RBVEUgOlxuLy8jZW5kaWZcbiAgICBzLndyYXAgPyBJTklUX1NUQVRFIDogQlVTWV9TVEFURTtcbiAgc3RybS5hZGxlciA9IChzLndyYXAgPT09IDIpID9cbiAgICAwICAvLyBjcmMzMigwLCBaX05VTEwsIDApXG4gIDpcbiAgICAxOyAvLyBhZGxlcjMyKDAsIFpfTlVMTCwgMClcbiAgcy5sYXN0X2ZsdXNoID0gLTI7XG4gIF90cl9pbml0KHMpO1xuICByZXR1cm4gWl9PSyQzO1xufTtcblxuXG5jb25zdCBkZWZsYXRlUmVzZXQgPSAoc3RybSkgPT4ge1xuXG4gIGNvbnN0IHJldCA9IGRlZmxhdGVSZXNldEtlZXAoc3RybSk7XG4gIGlmIChyZXQgPT09IFpfT0skMykge1xuICAgIGxtX2luaXQoc3RybS5zdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn07XG5cblxuY29uc3QgZGVmbGF0ZVNldEhlYWRlciA9IChzdHJtLCBoZWFkKSA9PiB7XG5cbiAgaWYgKGRlZmxhdGVTdGF0ZUNoZWNrKHN0cm0pIHx8IHN0cm0uc3RhdGUud3JhcCAhPT0gMikge1xuICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUiQyO1xuICB9XG4gIHN0cm0uc3RhdGUuZ3poZWFkID0gaGVhZDtcbiAgcmV0dXJuIFpfT0skMztcbn07XG5cblxuY29uc3QgZGVmbGF0ZUluaXQyID0gKHN0cm0sIGxldmVsLCBtZXRob2QsIHdpbmRvd0JpdHMsIG1lbUxldmVsLCBzdHJhdGVneSwgbGVnYWN5SGFzaCkgPT4ge1xuXG4gIGlmICghc3RybSkgeyAvLyA9PT0gWl9OVUxMXG4gICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SJDI7XG4gIH1cbiAgbGV0IHdyYXAgPSAxO1xuXG4gIGlmIChsZXZlbCA9PT0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OJDEpIHtcbiAgICBsZXZlbCA9IDY7XG4gIH1cblxuICBpZiAod2luZG93Qml0cyA8IDApIHsgLyogc3VwcHJlc3MgemxpYiB3cmFwcGVyICovXG4gICAgd3JhcCA9IDA7XG4gICAgd2luZG93Qml0cyA9IC13aW5kb3dCaXRzO1xuICB9XG5cbiAgZWxzZSBpZiAod2luZG93Qml0cyA+IDE1KSB7XG4gICAgd3JhcCA9IDI7ICAgICAgICAgICAvKiB3cml0ZSBnemlwIHdyYXBwZXIgaW5zdGVhZCAqL1xuICAgIHdpbmRvd0JpdHMgLT0gMTY7XG4gIH1cblxuXG4gIGlmIChtZW1MZXZlbCA8IDEgfHwgbWVtTGV2ZWwgPiBNQVhfTUVNX0xFVkVMIHx8IG1ldGhvZCAhPT0gWl9ERUZMQVRFRCQyIHx8XG4gICAgd2luZG93Qml0cyA8IDggfHwgd2luZG93Qml0cyA+IDE1IHx8IGxldmVsIDwgMCB8fCBsZXZlbCA+IDkgfHxcbiAgICBzdHJhdGVneSA8IDAgfHwgc3RyYXRlZ3kgPiBaX0ZJWEVEIHx8ICh3aW5kb3dCaXRzID09PSA4ICYmIHdyYXAgIT09IDEpKSB7XG4gICAgcmV0dXJuIGVycihzdHJtLCBaX1NUUkVBTV9FUlJPUiQyKTtcbiAgfVxuXG5cbiAgaWYgKHdpbmRvd0JpdHMgPT09IDgpIHtcbiAgICB3aW5kb3dCaXRzID0gOTtcbiAgfVxuICAvKiB1bnRpbCAyNTYtYnl0ZSB3aW5kb3cgYnVnIGZpeGVkICovXG5cbiAgY29uc3QgcyA9IG5ldyBEZWZsYXRlU3RhdGUoKTtcblxuICBzdHJtLnN0YXRlID0gcztcbiAgcy5zdHJtID0gc3RybTtcbiAgcy5zdGF0dXMgPSBJTklUX1NUQVRFOyAgICAgLyogdG8gcGFzcyBzdGF0ZSB0ZXN0IGluIGRlZmxhdGVSZXNldCgpICovXG5cbiAgcy53cmFwID0gd3JhcDtcbiAgcy5nemhlYWQgPSBudWxsO1xuICBzLndfYml0cyA9IHdpbmRvd0JpdHM7XG4gIHMud19zaXplID0gMSA8PCBzLndfYml0cztcbiAgcy53X21hc2sgPSBzLndfc2l6ZSAtIDE7XG5cbiAgcy5sZWdhY3lfaGFzaCA9IGxlZ2FjeUhhc2ggPyAxIDogMDtcblxuICBzLmhhc2hfYml0cyA9IG1lbUxldmVsICsgNztcbiAgLyogQU5aQUMrKyBoYXNoIG5lZWRzID49IDE1IGhhc2ggYml0cyB0byBzcGFuIGl0cyA0IHJlYWQgYnl0ZXMuICovXG4gIGlmICghcy5sZWdhY3lfaGFzaCAmJiBzLmhhc2hfYml0cyA8IDE1KSB7XG4gICAgcy5oYXNoX2JpdHMgPSAxNTtcbiAgfVxuICBzLmhhc2hfc2l6ZSA9IDEgPDwgcy5oYXNoX2JpdHM7XG4gIHMuaGFzaF9tYXNrID0gcy5oYXNoX3NpemUgLSAxO1xuICBzLmhhc2hfc2hpZnQgPSB+figocy5oYXNoX2JpdHMgKyBNSU5fTUFUQ0ggLSAxKSAvIE1JTl9NQVRDSCk7XG5cbiAgcy53aW5kb3cgPSBuZXcgVWludDhBcnJheShzLndfc2l6ZSAqIDIpO1xuICBzLmhlYWQgPSBuZXcgVWludDE2QXJyYXkocy5oYXNoX3NpemUpO1xuICBzLnByZXYgPSBuZXcgVWludDE2QXJyYXkocy53X3NpemUpO1xuXG4gIC8vIERvbid0IG5lZWQgbWVtIGluaXQgbWFnaWMgZm9yIEpTLlxuICAvL3MuaGlnaF93YXRlciA9IDA7ICAvKiBub3RoaW5nIHdyaXR0ZW4gdG8gcy0+d2luZG93IHlldCAqL1xuXG4gIHMubGl0X2J1ZnNpemUgPSAxIDw8IChtZW1MZXZlbCArIDYpOyAvKiAxNksgZWxlbWVudHMgYnkgZGVmYXVsdCAqL1xuXG4gIC8qIFdlIG92ZXJsYXkgcGVuZGluZ19idWYgYW5kIHN5bV9idWYuIFRoaXMgd29ya3Mgc2luY2UgdGhlIGF2ZXJhZ2Ugc2l6ZVxuICAgKiBmb3IgbGVuZ3RoL2Rpc3RhbmNlIHBhaXJzIG92ZXIgYW55IGNvbXByZXNzZWQgYmxvY2sgaXMgYXNzdXJlZCB0byBiZSAzMVxuICAgKiBiaXRzIG9yIGxlc3MuXG4gICAqXG4gICAqIEFuYWx5c2lzOiBUaGUgbG9uZ2VzdCBmaXhlZCBjb2RlcyBhcmUgYSBsZW5ndGggY29kZSBvZiA4IGJpdHMgcGx1cyA1XG4gICAqIGV4dHJhIGJpdHMsIGZvciBsZW5ndGhzIDEzMSB0byAyNTcuIFRoZSBsb25nZXN0IGZpeGVkIGRpc3RhbmNlIGNvZGVzIGFyZVxuICAgKiA1IGJpdHMgcGx1cyAxMyBleHRyYSBiaXRzLCBmb3IgZGlzdGFuY2VzIDE2Mzg1IHRvIDMyNzY4LiBUaGUgbG9uZ2VzdFxuICAgKiBwb3NzaWJsZSBmaXhlZC1jb2RlcyBsZW5ndGgvZGlzdGFuY2UgcGFpciBpcyB0aGVuIDMxIGJpdHMgdG90YWwuXG4gICAqXG4gICAqIHN5bV9idWYgc3RhcnRzIG9uZS1mb3VydGggb2YgdGhlIHdheSBpbnRvIHBlbmRpbmdfYnVmLiBTbyB0aGVyZSBhcmVcbiAgICogdGhyZWUgYnl0ZXMgaW4gc3ltX2J1ZiBmb3IgZXZlcnkgZm91ciBieXRlcyBpbiBwZW5kaW5nX2J1Zi4gRWFjaCBzeW1ib2xcbiAgICogaW4gc3ltX2J1ZiBpcyB0aHJlZSBieXRlcyAtLSB0d28gZm9yIHRoZSBkaXN0YW5jZSBhbmQgb25lIGZvciB0aGVcbiAgICogbGl0ZXJhbC9sZW5ndGguIEFzIGVhY2ggc3ltYm9sIGlzIGNvbnN1bWVkLCB0aGUgcG9pbnRlciB0byB0aGUgbmV4dFxuICAgKiBzeW1fYnVmIHZhbHVlIHRvIHJlYWQgbW92ZXMgZm9yd2FyZCB0aHJlZSBieXRlcy4gRnJvbSB0aGF0IHN5bWJvbCwgdXAgdG9cbiAgICogMzEgYml0cyBhcmUgd3JpdHRlbiB0byBwZW5kaW5nX2J1Zi4gVGhlIGNsb3Nlc3QgdGhlIHdyaXR0ZW4gcGVuZGluZ19idWZcbiAgICogYml0cyBnZXRzIHRvIHRoZSBuZXh0IHN5bV9idWYgc3ltYm9sIHRvIHJlYWQgaXMganVzdCBiZWZvcmUgdGhlIGxhc3RcbiAgICogY29kZSBpcyB3cml0dGVuLiBBdCB0aGF0IHRpbWUsIDMxKihuLTIpIGJpdHMgaGF2ZSBiZWVuIHdyaXR0ZW4sIGp1c3RcbiAgICogYWZ0ZXIgMjQqKG4tMikgYml0cyBoYXZlIGJlZW4gY29uc3VtZWQgZnJvbSBzeW1fYnVmLiBzeW1fYnVmIHN0YXJ0cyBhdFxuICAgKiA4Km4gYml0cyBpbnRvIHBlbmRpbmdfYnVmLiAoTm90ZSB0aGF0IHRoZSBzeW1ib2wgYnVmZmVyIGZpbGxzIHdoZW4gbi0xXG4gICAqIHN5bWJvbHMgYXJlIHdyaXR0ZW4uKSBUaGUgY2xvc2VzdCB0aGUgd3JpdGluZyBnZXRzIHRvIHdoYXQgaXMgdW5yZWFkIGlzXG4gICAqIHRoZW4gbisxNCBiaXRzLiBIZXJlIG4gaXMgbGl0X2J1ZnNpemUsIHdoaWNoIGlzIDE2Mzg0IGJ5IGRlZmF1bHQsIGFuZFxuICAgKiBjYW4gcmFuZ2UgZnJvbSAxMjggdG8gMzI3NjguXG4gICAqXG4gICAqIFRoZXJlZm9yZSwgYXQgYSBtaW5pbXVtLCB0aGVyZSBhcmUgMTQyIGJpdHMgb2Ygc3BhY2UgYmV0d2VlbiB3aGF0IGlzXG4gICAqIHdyaXR0ZW4gYW5kIHdoYXQgaXMgcmVhZCBpbiB0aGUgb3ZlcmxhaW4gYnVmZmVycywgc28gdGhlIHN5bWJvbHMgY2Fubm90XG4gICAqIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBjb21wcmVzc2VkIGRhdGEuIFRoYXQgc3BhY2UgaXMgYWN0dWFsbHkgMTM5IGJpdHMsXG4gICAqIGR1ZSB0byB0aGUgdGhyZWUtYml0IGZpeGVkLWNvZGUgYmxvY2sgaGVhZGVyLlxuICAgKlxuICAgKiBUaGF0IGNvdmVycyB0aGUgY2FzZSB3aGVyZSBlaXRoZXIgWl9GSVhFRCBpcyBzcGVjaWZpZWQsIGZvcmNpbmcgZml4ZWRcbiAgICogY29kZXMsIG9yIHdoZW4gdGhlIHVzZSBvZiBmaXhlZCBjb2RlcyBpcyBjaG9zZW4sIGJlY2F1c2UgdGhhdCBjaG9pY2VcbiAgICogcmVzdWx0cyBpbiBhIHNtYWxsZXIgY29tcHJlc3NlZCBibG9jayB0aGFuIGR5bmFtaWMgY29kZXMuIFRoYXQgbGF0dGVyXG4gICAqIGNvbmRpdGlvbiB0aGVuIGFzc3VyZXMgdGhhdCB0aGUgYWJvdmUgYW5hbHlzaXMgYWxzbyBjb3ZlcnMgYWxsIGR5bmFtaWNcbiAgICogYmxvY2tzLiBBIGR5bmFtaWMtY29kZSBibG9jayB3aWxsIG9ubHkgYmUgY2hvc2VuIHRvIGJlIGVtaXR0ZWQgaWYgaXQgaGFzXG4gICAqIGZld2VyIGJpdHMgdGhhbiBhIGZpeGVkLWNvZGUgYmxvY2sgd291bGQgZm9yIHRoZSBzYW1lIHNldCBvZiBzeW1ib2xzLlxuICAgKiBUaGVyZWZvcmUgaXRzIGF2ZXJhZ2Ugc3ltYm9sIGxlbmd0aCBpcyBhc3N1cmVkIHRvIGJlIGxlc3MgdGhhbiAzMS4gU29cbiAgICogdGhlIGNvbXByZXNzZWQgZGF0YSBmb3IgYSBkeW5hbWljIGJsb2NrIGFsc28gY2Fubm90IG92ZXJ3cml0ZSB0aGVcbiAgICogc3ltYm9scyBmcm9tIHdoaWNoIGl0IGlzIGJlaW5nIGNvbnN0cnVjdGVkLlxuICAgKi9cblxuICBzLnBlbmRpbmdfYnVmX3NpemUgPSBzLmxpdF9idWZzaXplICogNDtcbiAgcy5wZW5kaW5nX2J1ZiA9IG5ldyBVaW50OEFycmF5KHMucGVuZGluZ19idWZfc2l6ZSk7XG5cbiAgLy8gSXQgaXMgb2Zmc2V0IGZyb20gYHMucGVuZGluZ19idWZgIChzaXplIGlzIGBzLmxpdF9idWZzaXplICogMmApXG4gIC8vcy0+c3ltX2J1ZiA9IHMtPnBlbmRpbmdfYnVmICsgcy0+bGl0X2J1ZnNpemU7XG4gIHMuc3ltX2J1ZiA9IHMubGl0X2J1ZnNpemU7XG5cbiAgLy9zLT5zeW1fZW5kID0gKHMtPmxpdF9idWZzaXplIC0gMSkgKiAzO1xuICBzLnN5bV9lbmQgPSAocy5saXRfYnVmc2l6ZSAtIDEpICogMztcbiAgLyogV2UgYXZvaWQgZXF1YWxpdHkgd2l0aCBsaXRfYnVmc2l6ZSozIGJlY2F1c2Ugb2Ygd3JhcGFyb3VuZCBhdCA2NEtcbiAgICogb24gMTYgYml0IG1hY2hpbmVzIGFuZCBiZWNhdXNlIHN0b3JlZCBibG9ja3MgYXJlIHJlc3RyaWN0ZWQgdG9cbiAgICogNjRLLTEgYnl0ZXMuXG4gICAqL1xuXG4gIHMubGV2ZWwgPSBsZXZlbDtcbiAgcy5zdHJhdGVneSA9IHN0cmF0ZWd5O1xuICBzLm1ldGhvZCA9IG1ldGhvZDtcblxuICByZXR1cm4gZGVmbGF0ZVJlc2V0KHN0cm0pO1xufTtcblxuY29uc3QgZGVmbGF0ZUluaXQgPSAoc3RybSwgbGV2ZWwpID0+IHtcblxuICByZXR1cm4gZGVmbGF0ZUluaXQyKHN0cm0sIGxldmVsLCBaX0RFRkxBVEVEJDIsIE1BWF9XQklUUyQxLCBERUZfTUVNX0xFVkVMLCBaX0RFRkFVTFRfU1RSQVRFR1kkMSk7XG59O1xuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbmNvbnN0IGRlZmxhdGUkMiA9IChzdHJtLCBmbHVzaCkgPT4ge1xuXG4gIGlmIChkZWZsYXRlU3RhdGVDaGVjayhzdHJtKSB8fCBmbHVzaCA+IFpfQkxPQ0skMSB8fCBmbHVzaCA8IDApIHtcbiAgICByZXR1cm4gc3RybSA/IGVycihzdHJtLCBaX1NUUkVBTV9FUlJPUiQyKSA6IFpfU1RSRUFNX0VSUk9SJDI7XG4gIH1cblxuICBjb25zdCBzID0gc3RybS5zdGF0ZTtcblxuICBpZiAoIXN0cm0ub3V0cHV0IHx8XG4gICAgICAoc3RybS5hdmFpbF9pbiAhPT0gMCAmJiAhc3RybS5pbnB1dCkgfHxcbiAgICAgIChzLnN0YXR1cyA9PT0gRklOSVNIX1NUQVRFICYmIGZsdXNoICE9PSBaX0ZJTklTSCQzKSkge1xuICAgIHJldHVybiBlcnIoc3RybSwgKHN0cm0uYXZhaWxfb3V0ID09PSAwKSA/IFpfQlVGX0VSUk9SJDIgOiBaX1NUUkVBTV9FUlJPUiQyKTtcbiAgfVxuXG4gIGNvbnN0IG9sZF9mbHVzaCA9IHMubGFzdF9mbHVzaDtcbiAgcy5sYXN0X2ZsdXNoID0gZmx1c2g7XG5cbiAgLyogRmx1c2ggYXMgbXVjaCBwZW5kaW5nIG91dHB1dCBhcyBwb3NzaWJsZSAqL1xuICBpZiAocy5wZW5kaW5nICE9PSAwKSB7XG4gICAgZmx1c2hfcGVuZGluZyhzdHJtKTtcbiAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIC8qIFNpbmNlIGF2YWlsX291dCBpcyAwLCBkZWZsYXRlIHdpbGwgYmUgY2FsbGVkIGFnYWluIHdpdGhcbiAgICAgICAqIG1vcmUgb3V0cHV0IHNwYWNlLCBidXQgcG9zc2libHkgd2l0aCBib3RoIHBlbmRpbmcgYW5kXG4gICAgICAgKiBhdmFpbF9pbiBlcXVhbCB0byB6ZXJvLiBUaGVyZSB3b24ndCBiZSBhbnl0aGluZyB0byBkbyxcbiAgICAgICAqIGJ1dCB0aGlzIGlzIG5vdCBhbiBlcnJvciBzaXR1YXRpb24gc28gbWFrZSBzdXJlIHdlXG4gICAgICAgKiByZXR1cm4gT0sgaW5zdGVhZCBvZiBCVUZfRVJST1IgYXQgbmV4dCBjYWxsIG9mIGRlZmxhdGU6XG4gICAgICAgKi9cbiAgICAgIHMubGFzdF9mbHVzaCA9IC0xO1xuICAgICAgcmV0dXJuIFpfT0skMztcbiAgICB9XG5cbiAgICAvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc29tZXRoaW5nIHRvIGRvIGFuZCBhdm9pZCBkdXBsaWNhdGUgY29uc2VjdXRpdmVcbiAgICAgKiBmbHVzaGVzLiBGb3IgcmVwZWF0ZWQgYW5kIHVzZWxlc3MgY2FsbHMgd2l0aCBaX0ZJTklTSCwgd2Uga2VlcFxuICAgICAqIHJldHVybmluZyBaX1NUUkVBTV9FTkQgaW5zdGVhZCBvZiBaX0JVRl9FUlJPUi5cbiAgICAgKi9cbiAgfSBlbHNlIGlmIChzdHJtLmF2YWlsX2luID09PSAwICYmIHJhbmsoZmx1c2gpIDw9IHJhbmsob2xkX2ZsdXNoKSAmJlxuICAgIGZsdXNoICE9PSBaX0ZJTklTSCQzKSB7XG4gICAgcmV0dXJuIGVycihzdHJtLCBaX0JVRl9FUlJPUiQyKTtcbiAgfVxuXG4gIC8qIFVzZXIgbXVzdCBub3QgcHJvdmlkZSBtb3JlIGlucHV0IGFmdGVyIHRoZSBmaXJzdCBGSU5JU0g6ICovXG4gIGlmIChzLnN0YXR1cyA9PT0gRklOSVNIX1NUQVRFICYmIHN0cm0uYXZhaWxfaW4gIT09IDApIHtcbiAgICByZXR1cm4gZXJyKHN0cm0sIFpfQlVGX0VSUk9SJDIpO1xuICB9XG5cbiAgLyogV3JpdGUgdGhlIGhlYWRlciAqL1xuICBpZiAocy5zdGF0dXMgPT09IElOSVRfU1RBVEUgJiYgcy53cmFwID09PSAwKSB7XG4gICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFO1xuICB9XG4gIGlmIChzLnN0YXR1cyA9PT0gSU5JVF9TVEFURSkge1xuICAgIC8qIHpsaWIgaGVhZGVyICovXG4gICAgbGV0IGhlYWRlciA9IChaX0RFRkxBVEVEJDIgKyAoKHMud19iaXRzIC0gOCkgPDwgNCkpIDw8IDg7XG4gICAgbGV0IGxldmVsX2ZsYWdzID0gLTE7XG5cbiAgICBpZiAocy5zdHJhdGVneSA+PSBaX0hVRkZNQU5fT05MWSB8fCBzLmxldmVsIDwgMikge1xuICAgICAgbGV2ZWxfZmxhZ3MgPSAwO1xuICAgIH0gZWxzZSBpZiAocy5sZXZlbCA8IDYpIHtcbiAgICAgIGxldmVsX2ZsYWdzID0gMTtcbiAgICB9IGVsc2UgaWYgKHMubGV2ZWwgPT09IDYpIHtcbiAgICAgIGxldmVsX2ZsYWdzID0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV2ZWxfZmxhZ3MgPSAzO1xuICAgIH1cbiAgICBoZWFkZXIgfD0gKGxldmVsX2ZsYWdzIDw8IDYpO1xuICAgIGlmIChzLnN0cnN0YXJ0ICE9PSAwKSB7IGhlYWRlciB8PSBQUkVTRVRfRElDVDsgfVxuICAgIGhlYWRlciArPSAzMSAtIChoZWFkZXIgJSAzMSk7XG5cbiAgICBwdXRTaG9ydE1TQihzLCBoZWFkZXIpO1xuXG4gICAgLyogU2F2ZSB0aGUgYWRsZXIzMiBvZiB0aGUgcHJlc2V0IGRpY3Rpb25hcnk6ICovXG4gICAgaWYgKHMuc3Ryc3RhcnQgIT09IDApIHtcbiAgICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgPj4+IDE2KTtcbiAgICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgJiAweGZmZmYpO1xuICAgIH1cbiAgICBzdHJtLmFkbGVyID0gMTsgLy8gYWRsZXIzMigwTCwgWl9OVUxMLCAwKTtcbiAgICBzLnN0YXR1cyA9IEJVU1lfU1RBVEU7XG5cbiAgICAvKiBDb21wcmVzc2lvbiBtdXN0IHN0YXJ0IHdpdGggYW4gZW1wdHkgcGVuZGluZyBidWZmZXIgKi9cbiAgICBmbHVzaF9wZW5kaW5nKHN0cm0pO1xuICAgIGlmIChzLnBlbmRpbmcgIT09IDApIHtcbiAgICAgIHMubGFzdF9mbHVzaCA9IC0xO1xuICAgICAgcmV0dXJuIFpfT0skMztcbiAgICB9XG4gIH1cbi8vI2lmZGVmIEdaSVBcbiAgaWYgKHMuc3RhdHVzID09PSBHWklQX1NUQVRFKSB7XG4gICAgLyogZ3ppcCBoZWFkZXIgKi9cbiAgICBzdHJtLmFkbGVyID0gMDsgIC8vY3JjMzIoMEwsIFpfTlVMTCwgMCk7XG4gICAgcHV0X2J5dGUocywgMzEpO1xuICAgIHB1dF9ieXRlKHMsIDEzOSk7XG4gICAgcHV0X2J5dGUocywgOCk7XG4gICAgaWYgKCFzLmd6aGVhZCkgeyAvLyBzLT5nemhlYWQgPT0gWl9OVUxMXG4gICAgICBwdXRfYnl0ZShzLCAwKTtcbiAgICAgIHB1dF9ieXRlKHMsIDApO1xuICAgICAgcHV0X2J5dGUocywgMCk7XG4gICAgICBwdXRfYnl0ZShzLCAwKTtcbiAgICAgIHB1dF9ieXRlKHMsIDApO1xuICAgICAgcHV0X2J5dGUocywgcy5sZXZlbCA9PT0gOSA/IDIgOlxuICAgICAgICAgICAgICAgICAgKHMuc3RyYXRlZ3kgPj0gWl9IVUZGTUFOX09OTFkgfHwgcy5sZXZlbCA8IDIgP1xuICAgICAgICAgICAgICAgICAgIDQgOiAwKSk7XG4gICAgICBwdXRfYnl0ZShzLCBPU19DT0RFKTtcbiAgICAgIHMuc3RhdHVzID0gQlVTWV9TVEFURTtcblxuICAgICAgLyogQ29tcHJlc3Npb24gbXVzdCBzdGFydCB3aXRoIGFuIGVtcHR5IHBlbmRpbmcgYnVmZmVyICovXG4gICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pO1xuICAgICAgaWYgKHMucGVuZGluZyAhPT0gMCkge1xuICAgICAgICBzLmxhc3RfZmx1c2ggPSAtMTtcbiAgICAgICAgcmV0dXJuIFpfT0skMztcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBwdXRfYnl0ZShzLCAocy5nemhlYWQudGV4dCA/IDEgOiAwKSArXG4gICAgICAgICAgICAgICAgICAocy5nemhlYWQuaGNyYyA/IDIgOiAwKSArXG4gICAgICAgICAgICAgICAgICAoIXMuZ3poZWFkLmV4dHJhID8gMCA6IDQpICtcbiAgICAgICAgICAgICAgICAgICghcy5nemhlYWQubmFtZSA/IDAgOiA4KSArXG4gICAgICAgICAgICAgICAgICAoIXMuZ3poZWFkLmNvbW1lbnQgPyAwIDogMTYpXG4gICAgICApO1xuICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQudGltZSAmIDB4ZmYpO1xuICAgICAgcHV0X2J5dGUocywgKHMuZ3poZWFkLnRpbWUgPj4gOCkgJiAweGZmKTtcbiAgICAgIHB1dF9ieXRlKHMsIChzLmd6aGVhZC50aW1lID4+IDE2KSAmIDB4ZmYpO1xuICAgICAgcHV0X2J5dGUocywgKHMuZ3poZWFkLnRpbWUgPj4gMjQpICYgMHhmZik7XG4gICAgICBwdXRfYnl0ZShzLCBzLmxldmVsID09PSA5ID8gMiA6XG4gICAgICAgICAgICAgICAgICAocy5zdHJhdGVneSA+PSBaX0hVRkZNQU5fT05MWSB8fCBzLmxldmVsIDwgMiA/XG4gICAgICAgICAgICAgICAgICAgNCA6IDApKTtcbiAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLm9zICYgMHhmZik7XG4gICAgICBpZiAocy5nemhlYWQuZXh0cmEgJiYgcy5nemhlYWQuZXh0cmEubGVuZ3RoKSB7XG4gICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLmV4dHJhLmxlbmd0aCAmIDB4ZmYpO1xuICAgICAgICBwdXRfYnl0ZShzLCAocy5nemhlYWQuZXh0cmEubGVuZ3RoID4+IDgpICYgMHhmZik7XG4gICAgICB9XG4gICAgICBpZiAocy5nemhlYWQuaGNyYykge1xuICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzJfMShzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcsIDApO1xuICAgICAgfVxuICAgICAgcy5nemluZGV4ID0gMDtcbiAgICAgIHMuc3RhdHVzID0gRVhUUkFfU1RBVEU7XG4gICAgfVxuICB9XG4gIGlmIChzLnN0YXR1cyA9PT0gRVhUUkFfU1RBVEUpIHtcbiAgICBpZiAocy5nemhlYWQuZXh0cmEvKiAhPSBaX05VTEwqLykge1xuICAgICAgbGV0IGJlZyA9IHMucGVuZGluZzsgICAvKiBzdGFydCBvZiBieXRlcyB0byB1cGRhdGUgY3JjICovXG4gICAgICBsZXQgbGVmdCA9IChzLmd6aGVhZC5leHRyYS5sZW5ndGggJiAweGZmZmYpIC0gcy5nemluZGV4O1xuICAgICAgd2hpbGUgKHMucGVuZGluZyArIGxlZnQgPiBzLnBlbmRpbmdfYnVmX3NpemUpIHtcbiAgICAgICAgbGV0IGNvcHkgPSBzLnBlbmRpbmdfYnVmX3NpemUgLSBzLnBlbmRpbmc7XG4gICAgICAgIC8vIHptZW1jcHkocy5wZW5kaW5nX2J1ZiArIHMucGVuZGluZyxcbiAgICAgICAgLy8gICAgcy5nemhlYWQuZXh0cmEgKyBzLmd6aW5kZXgsIGNvcHkpO1xuICAgICAgICBzLnBlbmRpbmdfYnVmLnNldChzLmd6aGVhZC5leHRyYS5zdWJhcnJheShzLmd6aW5kZXgsIHMuZ3ppbmRleCArIGNvcHkpLCBzLnBlbmRpbmcpO1xuICAgICAgICBzLnBlbmRpbmcgPSBzLnBlbmRpbmdfYnVmX3NpemU7XG4gICAgICAgIC8vLS0tIEhDUkNfVVBEQVRFKGJlZykgLS0tLy9cbiAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7XG4gICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyXzEoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpO1xuICAgICAgICB9XG4gICAgICAgIC8vLS0tLy9cbiAgICAgICAgcy5nemluZGV4ICs9IGNvcHk7XG4gICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7XG4gICAgICAgIGlmIChzLnBlbmRpbmcgIT09IDApIHtcbiAgICAgICAgICBzLmxhc3RfZmx1c2ggPSAtMTtcbiAgICAgICAgICByZXR1cm4gWl9PSyQzO1xuICAgICAgICB9XG4gICAgICAgIGJlZyA9IDA7XG4gICAgICAgIGxlZnQgLT0gY29weTtcbiAgICAgIH1cbiAgICAgIC8vIEpTIHNwZWNpZmljOiBzLmd6aGVhZC5leHRyYSBtYXkgYmUgVHlwZWRBcnJheSBvciBBcnJheSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgLy8gICAgICAgICAgICAgIFR5cGVkQXJyYXkuc2xpY2UgYW5kIFR5cGVkQXJyYXkuZnJvbSBkb24ndCBleGlzdCBpbiBJRTEwLUlFMTFcbiAgICAgIGxldCBnemhlYWRfZXh0cmEgPSBuZXcgVWludDhBcnJheShzLmd6aGVhZC5leHRyYSk7XG4gICAgICAvLyB6bWVtY3B5KHMtPnBlbmRpbmdfYnVmICsgcy0+cGVuZGluZyxcbiAgICAgIC8vICAgICBzLT5nemhlYWQtPmV4dHJhICsgcy0+Z3ppbmRleCwgbGVmdCk7XG4gICAgICBzLnBlbmRpbmdfYnVmLnNldChnemhlYWRfZXh0cmEuc3ViYXJyYXkocy5nemluZGV4LCBzLmd6aW5kZXggKyBsZWZ0KSwgcy5wZW5kaW5nKTtcbiAgICAgIHMucGVuZGluZyArPSBsZWZ0O1xuICAgICAgLy8tLS0gSENSQ19VUERBVEUoYmVnKSAtLS0vL1xuICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7XG4gICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMl8xKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTtcbiAgICAgIH1cbiAgICAgIC8vLS0tLy9cbiAgICAgIHMuZ3ppbmRleCA9IDA7XG4gICAgfVxuICAgIHMuc3RhdHVzID0gTkFNRV9TVEFURTtcbiAgfVxuICBpZiAocy5zdGF0dXMgPT09IE5BTUVfU1RBVEUpIHtcbiAgICBpZiAocy5nemhlYWQubmFtZS8qICE9IFpfTlVMTCovKSB7XG4gICAgICBsZXQgYmVnID0gcy5wZW5kaW5nOyAgIC8qIHN0YXJ0IG9mIGJ5dGVzIHRvIHVwZGF0ZSBjcmMgKi9cbiAgICAgIGxldCB2YWw7XG4gICAgICBkbyB7XG4gICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkge1xuICAgICAgICAgIC8vLS0tIEhDUkNfVVBEQVRFKGJlZykgLS0tLy9cbiAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHtcbiAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMl8xKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7XG4gICAgICAgICAgaWYgKHMucGVuZGluZyAhPT0gMCkge1xuICAgICAgICAgICAgcy5sYXN0X2ZsdXNoID0gLTE7XG4gICAgICAgICAgICByZXR1cm4gWl9PSyQzO1xuICAgICAgICAgIH1cbiAgICAgICAgICBiZWcgPSAwO1xuICAgICAgICB9XG4gICAgICAgIC8vIEpTIHNwZWNpZmljOiBsaXR0bGUgbWFnaWMgdG8gYWRkIHplcm8gdGVybWluYXRvciB0byBlbmQgb2Ygc3RyaW5nXG4gICAgICAgIGlmIChzLmd6aW5kZXggPCBzLmd6aGVhZC5uYW1lLmxlbmd0aCkge1xuICAgICAgICAgIHZhbCA9IHMuZ3poZWFkLm5hbWUuY2hhckNvZGVBdChzLmd6aW5kZXgrKykgJiAweGZmO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcHV0X2J5dGUocywgdmFsKTtcbiAgICAgIH0gd2hpbGUgKHZhbCAhPT0gMCk7XG4gICAgICAvLy0tLSBIQ1JDX1VQREFURShiZWcpIC0tLS8vXG4gICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHtcbiAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyXzEoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpO1xuICAgICAgfVxuICAgICAgLy8tLS0vL1xuICAgICAgcy5nemluZGV4ID0gMDtcbiAgICB9XG4gICAgcy5zdGF0dXMgPSBDT01NRU5UX1NUQVRFO1xuICB9XG4gIGlmIChzLnN0YXR1cyA9PT0gQ09NTUVOVF9TVEFURSkge1xuICAgIGlmIChzLmd6aGVhZC5jb21tZW50LyogIT0gWl9OVUxMKi8pIHtcbiAgICAgIGxldCBiZWcgPSBzLnBlbmRpbmc7ICAgLyogc3RhcnQgb2YgYnl0ZXMgdG8gdXBkYXRlIGNyYyAqL1xuICAgICAgbGV0IHZhbDtcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7XG4gICAgICAgICAgLy8tLS0gSENSQ19VUERBVEUoYmVnKSAtLS0vL1xuICAgICAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykge1xuICAgICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyXzEoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTtcbiAgICAgICAgICBpZiAocy5wZW5kaW5nICE9PSAwKSB7XG4gICAgICAgICAgICBzLmxhc3RfZmx1c2ggPSAtMTtcbiAgICAgICAgICAgIHJldHVybiBaX09LJDM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJlZyA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSlMgc3BlY2lmaWM6IGxpdHRsZSBtYWdpYyB0byBhZGQgemVybyB0ZXJtaW5hdG9yIHRvIGVuZCBvZiBzdHJpbmdcbiAgICAgICAgaWYgKHMuZ3ppbmRleCA8IHMuZ3poZWFkLmNvbW1lbnQubGVuZ3RoKSB7XG4gICAgICAgICAgdmFsID0gcy5nemhlYWQuY29tbWVudC5jaGFyQ29kZUF0KHMuZ3ppbmRleCsrKSAmIDB4ZmY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsID0gMDtcbiAgICAgICAgfVxuICAgICAgICBwdXRfYnl0ZShzLCB2YWwpO1xuICAgICAgfSB3aGlsZSAodmFsICE9PSAwKTtcbiAgICAgIC8vLS0tIEhDUkNfVVBEQVRFKGJlZykgLS0tLy9cbiAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykge1xuICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzJfMShzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7XG4gICAgICB9XG4gICAgICAvLy0tLS8vXG4gICAgfVxuICAgIHMuc3RhdHVzID0gSENSQ19TVEFURTtcbiAgfVxuICBpZiAocy5zdGF0dXMgPT09IEhDUkNfU1RBVEUpIHtcbiAgICBpZiAocy5nemhlYWQuaGNyYykge1xuICAgICAgaWYgKHMucGVuZGluZyArIDIgPiBzLnBlbmRpbmdfYnVmX3NpemUpIHtcbiAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTtcbiAgICAgICAgaWYgKHMucGVuZGluZyAhPT0gMCkge1xuICAgICAgICAgIHMubGFzdF9mbHVzaCA9IC0xO1xuICAgICAgICAgIHJldHVybiBaX09LJDM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHB1dF9ieXRlKHMsIHN0cm0uYWRsZXIgJiAweGZmKTtcbiAgICAgIHB1dF9ieXRlKHMsIChzdHJtLmFkbGVyID4+IDgpICYgMHhmZik7XG4gICAgICBzdHJtLmFkbGVyID0gMDsgLy9jcmMzMigwTCwgWl9OVUxMLCAwKTtcbiAgICB9XG4gICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFO1xuXG4gICAgLyogQ29tcHJlc3Npb24gbXVzdCBzdGFydCB3aXRoIGFuIGVtcHR5IHBlbmRpbmcgYnVmZmVyICovXG4gICAgZmx1c2hfcGVuZGluZyhzdHJtKTtcbiAgICBpZiAocy5wZW5kaW5nICE9PSAwKSB7XG4gICAgICBzLmxhc3RfZmx1c2ggPSAtMTtcbiAgICAgIHJldHVybiBaX09LJDM7XG4gICAgfVxuICB9XG4vLyNlbmRpZlxuXG4gIC8qIFN0YXJ0IGEgbmV3IGJsb2NrIG9yIGNvbnRpbnVlIHRoZSBjdXJyZW50IG9uZS5cbiAgICovXG4gIGlmIChzdHJtLmF2YWlsX2luICE9PSAwIHx8IHMubG9va2FoZWFkICE9PSAwIHx8XG4gICAgKGZsdXNoICE9PSBaX05PX0ZMVVNIJDIgJiYgcy5zdGF0dXMgIT09IEZJTklTSF9TVEFURSkpIHtcbiAgICBsZXQgYnN0YXRlID0gcy5sZXZlbCA9PT0gMCA/IGRlZmxhdGVfc3RvcmVkKHMsIGZsdXNoKSA6XG4gICAgICAgICAgICAgICAgIHMuc3RyYXRlZ3kgPT09IFpfSFVGRk1BTl9PTkxZID8gZGVmbGF0ZV9odWZmKHMsIGZsdXNoKSA6XG4gICAgICAgICAgICAgICAgIHMuc3RyYXRlZ3kgPT09IFpfUkxFID8gZGVmbGF0ZV9ybGUocywgZmx1c2gpIDpcbiAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5mdW5jKHMsIGZsdXNoKTtcblxuICAgIGlmIChic3RhdGUgPT09IEJTX0ZJTklTSF9TVEFSVEVEIHx8IGJzdGF0ZSA9PT0gQlNfRklOSVNIX0RPTkUpIHtcbiAgICAgIHMuc3RhdHVzID0gRklOSVNIX1NUQVRFO1xuICAgIH1cbiAgICBpZiAoYnN0YXRlID09PSBCU19ORUVEX01PUkUgfHwgYnN0YXRlID09PSBCU19GSU5JU0hfU1RBUlRFRCkge1xuICAgICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICAgIHMubGFzdF9mbHVzaCA9IC0xO1xuICAgICAgICAvKiBhdm9pZCBCVUZfRVJST1IgbmV4dCBjYWxsLCBzZWUgYWJvdmUgKi9cbiAgICAgIH1cbiAgICAgIHJldHVybiBaX09LJDM7XG4gICAgICAvKiBJZiBmbHVzaCAhPSBaX05PX0ZMVVNIICYmIGF2YWlsX291dCA9PSAwLCB0aGUgbmV4dCBjYWxsXG4gICAgICAgKiBvZiBkZWZsYXRlIHNob3VsZCB1c2UgdGhlIHNhbWUgZmx1c2ggcGFyYW1ldGVyIHRvIG1ha2Ugc3VyZVxuICAgICAgICogdGhhdCB0aGUgZmx1c2ggaXMgY29tcGxldGUuIFNvIHdlIGRvbid0IGhhdmUgdG8gb3V0cHV0IGFuXG4gICAgICAgKiBlbXB0eSBibG9jayBoZXJlLCB0aGlzIHdpbGwgYmUgZG9uZSBhdCBuZXh0IGNhbGwuIFRoaXMgYWxzb1xuICAgICAgICogZW5zdXJlcyB0aGF0IGZvciBhIHZlcnkgc21hbGwgb3V0cHV0IGJ1ZmZlciwgd2UgZW1pdCBhdCBtb3N0XG4gICAgICAgKiBvbmUgZW1wdHkgYmxvY2suXG4gICAgICAgKi9cbiAgICB9XG4gICAgaWYgKGJzdGF0ZSA9PT0gQlNfQkxPQ0tfRE9ORSkge1xuICAgICAgaWYgKGZsdXNoID09PSBaX1BBUlRJQUxfRkxVU0gpIHtcbiAgICAgICAgX3RyX2FsaWduKHMpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoZmx1c2ggIT09IFpfQkxPQ0skMSkgeyAvKiBGVUxMX0ZMVVNIIG9yIFNZTkNfRkxVU0ggKi9cblxuICAgICAgICBfdHJfc3RvcmVkX2Jsb2NrKHMsIDAsIDAsIGZhbHNlKTtcbiAgICAgICAgLyogRm9yIGEgZnVsbCBmbHVzaCwgdGhpcyBlbXB0eSBibG9jayB3aWxsIGJlIHJlY29nbml6ZWRcbiAgICAgICAgICogYXMgYSBzcGVjaWFsIG1hcmtlciBieSBpbmZsYXRlX3N5bmMoKS5cbiAgICAgICAgICovXG4gICAgICAgIGlmIChmbHVzaCA9PT0gWl9GVUxMX0ZMVVNIJDEpIHtcbiAgICAgICAgICAvKioqIENMRUFSX0hBU0gocyk7ICoqKi8gICAgICAgICAgICAgLyogZm9yZ2V0IGhpc3RvcnkgKi9cbiAgICAgICAgICB6ZXJvKHMuaGVhZCk7IC8vIEZpbGwgd2l0aCBOSUwgKD0gMCk7XG5cbiAgICAgICAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHtcbiAgICAgICAgICAgIHMuc3Ryc3RhcnQgPSAwO1xuICAgICAgICAgICAgcy5ibG9ja19zdGFydCA9IDA7XG4gICAgICAgICAgICBzLmluc2VydCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pO1xuICAgICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICAgIHMubGFzdF9mbHVzaCA9IC0xOyAvKiBhdm9pZCBCVUZfRVJST1IgYXQgbmV4dCBjYWxsLCBzZWUgYWJvdmUgKi9cbiAgICAgICAgcmV0dXJuIFpfT0skMztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZmx1c2ggIT09IFpfRklOSVNIJDMpIHsgcmV0dXJuIFpfT0skMzsgfVxuICBpZiAocy53cmFwIDw9IDApIHsgcmV0dXJuIFpfU1RSRUFNX0VORCQzOyB9XG5cbiAgLyogV3JpdGUgdGhlIHRyYWlsZXIgKi9cbiAgaWYgKHMud3JhcCA9PT0gMikge1xuICAgIHB1dF9ieXRlKHMsIHN0cm0uYWRsZXIgJiAweGZmKTtcbiAgICBwdXRfYnl0ZShzLCAoc3RybS5hZGxlciA+PiA4KSAmIDB4ZmYpO1xuICAgIHB1dF9ieXRlKHMsIChzdHJtLmFkbGVyID4+IDE2KSAmIDB4ZmYpO1xuICAgIHB1dF9ieXRlKHMsIChzdHJtLmFkbGVyID4+IDI0KSAmIDB4ZmYpO1xuICAgIHB1dF9ieXRlKHMsIHN0cm0udG90YWxfaW4gJiAweGZmKTtcbiAgICBwdXRfYnl0ZShzLCAoc3RybS50b3RhbF9pbiA+PiA4KSAmIDB4ZmYpO1xuICAgIHB1dF9ieXRlKHMsIChzdHJtLnRvdGFsX2luID4+IDE2KSAmIDB4ZmYpO1xuICAgIHB1dF9ieXRlKHMsIChzdHJtLnRvdGFsX2luID4+IDI0KSAmIDB4ZmYpO1xuICB9XG4gIGVsc2VcbiAge1xuICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgPj4+IDE2KTtcbiAgICBwdXRTaG9ydE1TQihzLCBzdHJtLmFkbGVyICYgMHhmZmZmKTtcbiAgfVxuXG4gIGZsdXNoX3BlbmRpbmcoc3RybSk7XG4gIC8qIElmIGF2YWlsX291dCBpcyB6ZXJvLCB0aGUgYXBwbGljYXRpb24gd2lsbCBjYWxsIGRlZmxhdGUgYWdhaW5cbiAgICogdG8gZmx1c2ggdGhlIHJlc3QuXG4gICAqL1xuICBpZiAocy53cmFwID4gMCkgeyBzLndyYXAgPSAtcy53cmFwOyB9XG4gIC8qIHdyaXRlIHRoZSB0cmFpbGVyIG9ubHkgb25jZSEgKi9cbiAgcmV0dXJuIHMucGVuZGluZyAhPT0gMCA/IFpfT0skMyA6IFpfU1RSRUFNX0VORCQzO1xufTtcblxuXG5jb25zdCBkZWZsYXRlRW5kID0gKHN0cm0pID0+IHtcblxuICBpZiAoZGVmbGF0ZVN0YXRlQ2hlY2soc3RybSkpIHtcbiAgICByZXR1cm4gWl9TVFJFQU1fRVJST1IkMjtcbiAgfVxuXG4gIGNvbnN0IHN0YXR1cyA9IHN0cm0uc3RhdGUuc3RhdHVzO1xuXG4gIHN0cm0uc3RhdGUgPSBudWxsO1xuXG4gIHJldHVybiBzdGF0dXMgPT09IEJVU1lfU1RBVEUgPyBlcnIoc3RybSwgWl9EQVRBX0VSUk9SJDIpIDogWl9PSyQzO1xufTtcblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBJbml0aWFsaXplcyB0aGUgY29tcHJlc3Npb24gZGljdGlvbmFyeSBmcm9tIHRoZSBnaXZlbiBieXRlXG4gKiBzZXF1ZW5jZSB3aXRob3V0IHByb2R1Y2luZyBhbnkgY29tcHJlc3NlZCBvdXRwdXQuXG4gKi9cbmNvbnN0IGRlZmxhdGVTZXREaWN0aW9uYXJ5ID0gKHN0cm0sIGRpY3Rpb25hcnkpID0+IHtcblxuICBsZXQgZGljdExlbmd0aCA9IGRpY3Rpb25hcnkubGVuZ3RoO1xuXG4gIGlmIChkZWZsYXRlU3RhdGVDaGVjayhzdHJtKSkge1xuICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUiQyO1xuICB9XG5cbiAgY29uc3QgcyA9IHN0cm0uc3RhdGU7XG4gIGNvbnN0IHdyYXAgPSBzLndyYXA7XG5cbiAgaWYgKHdyYXAgPT09IDIgfHwgKHdyYXAgPT09IDEgJiYgcy5zdGF0dXMgIT09IElOSVRfU1RBVEUpIHx8IHMubG9va2FoZWFkKSB7XG4gICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SJDI7XG4gIH1cblxuICAvKiB3aGVuIHVzaW5nIHpsaWIgd3JhcHBlcnMsIGNvbXB1dGUgQWRsZXItMzIgZm9yIHByb3ZpZGVkIGRpY3Rpb25hcnkgKi9cbiAgaWYgKHdyYXAgPT09IDEpIHtcbiAgICAvKiBhZGxlcjMyKHN0cm0tPmFkbGVyLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKTsgKi9cbiAgICBzdHJtLmFkbGVyID0gYWRsZXIzMl8xKHN0cm0uYWRsZXIsIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgsIDApO1xuICB9XG5cbiAgcy53cmFwID0gMDsgICAvKiBhdm9pZCBjb21wdXRpbmcgQWRsZXItMzIgaW4gcmVhZF9idWYgKi9cblxuICAvKiBpZiBkaWN0aW9uYXJ5IHdvdWxkIGZpbGwgd2luZG93LCBqdXN0IHJlcGxhY2UgdGhlIGhpc3RvcnkgKi9cbiAgaWYgKGRpY3RMZW5ndGggPj0gcy53X3NpemUpIHtcbiAgICBpZiAod3JhcCA9PT0gMCkgeyAgICAgICAgICAgIC8qIGFscmVhZHkgZW1wdHkgb3RoZXJ3aXNlICovXG4gICAgICAvKioqIENMRUFSX0hBU0gocyk7ICoqKi9cbiAgICAgIHplcm8ocy5oZWFkKTsgLy8gRmlsbCB3aXRoIE5JTCAoPSAwKTtcbiAgICAgIHMuc3Ryc3RhcnQgPSAwO1xuICAgICAgcy5ibG9ja19zdGFydCA9IDA7XG4gICAgICBzLmluc2VydCA9IDA7XG4gICAgfVxuICAgIC8qIHVzZSB0aGUgdGFpbCAqL1xuICAgIC8vIGRpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5LnNsaWNlKGRpY3RMZW5ndGggLSBzLndfc2l6ZSk7XG4gICAgbGV0IHRtcERpY3QgPSBuZXcgVWludDhBcnJheShzLndfc2l6ZSk7XG4gICAgdG1wRGljdC5zZXQoZGljdGlvbmFyeS5zdWJhcnJheShkaWN0TGVuZ3RoIC0gcy53X3NpemUsIGRpY3RMZW5ndGgpLCAwKTtcbiAgICBkaWN0aW9uYXJ5ID0gdG1wRGljdDtcbiAgICBkaWN0TGVuZ3RoID0gcy53X3NpemU7XG4gIH1cbiAgLyogaW5zZXJ0IGRpY3Rpb25hcnkgaW50byB3aW5kb3cgYW5kIGhhc2ggKi9cbiAgY29uc3QgYXZhaWwgPSBzdHJtLmF2YWlsX2luO1xuICBjb25zdCBuZXh0ID0gc3RybS5uZXh0X2luO1xuICBjb25zdCBpbnB1dCA9IHN0cm0uaW5wdXQ7XG4gIHN0cm0uYXZhaWxfaW4gPSBkaWN0TGVuZ3RoO1xuICBzdHJtLm5leHRfaW4gPSAwO1xuICBzdHJtLmlucHV0ID0gZGljdGlvbmFyeTtcbiAgZmlsbF93aW5kb3cocyk7XG4gIHdoaWxlIChzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHtcbiAgICBsZXQgc3RyID0gcy5zdHJzdGFydDtcbiAgICBsZXQgbiA9IHMubG9va2FoZWFkIC0gKE1JTl9NQVRDSCAtIDEpO1xuICAgIGRvIHtcbiAgICAgIElOU0VSVF9TVFJJTkcocywgc3RyKTtcbiAgICAgIHN0cisrO1xuICAgIH0gd2hpbGUgKC0tbik7XG4gICAgcy5zdHJzdGFydCA9IHN0cjtcbiAgICBzLmxvb2thaGVhZCA9IE1JTl9NQVRDSCAtIDE7XG4gICAgZmlsbF93aW5kb3cocyk7XG4gIH1cbiAgcy5zdHJzdGFydCArPSBzLmxvb2thaGVhZDtcbiAgcy5ibG9ja19zdGFydCA9IHMuc3Ryc3RhcnQ7XG4gIHMuaW5zZXJ0ID0gcy5sb29rYWhlYWQ7XG4gIHMubG9va2FoZWFkID0gMDtcbiAgcy5tYXRjaF9sZW5ndGggPSBzLnByZXZfbGVuZ3RoID0gTUlOX01BVENIIC0gMTtcbiAgcy5tYXRjaF9hdmFpbGFibGUgPSAwO1xuICBzdHJtLm5leHRfaW4gPSBuZXh0O1xuICBzdHJtLmlucHV0ID0gaW5wdXQ7XG4gIHN0cm0uYXZhaWxfaW4gPSBhdmFpbDtcbiAgcy53cmFwID0gd3JhcDtcbiAgcmV0dXJuIFpfT0skMztcbn07XG5cblxudmFyIGRlZmxhdGVJbml0XzEgPSBkZWZsYXRlSW5pdDtcbnZhciBkZWZsYXRlSW5pdDJfMSA9IGRlZmxhdGVJbml0MjtcbnZhciBkZWZsYXRlUmVzZXRfMSA9IGRlZmxhdGVSZXNldDtcbnZhciBkZWZsYXRlUmVzZXRLZWVwXzEgPSBkZWZsYXRlUmVzZXRLZWVwO1xudmFyIGRlZmxhdGVTZXRIZWFkZXJfMSA9IGRlZmxhdGVTZXRIZWFkZXI7XG52YXIgZGVmbGF0ZV8yJDEgPSBkZWZsYXRlJDI7XG52YXIgZGVmbGF0ZUVuZF8xID0gZGVmbGF0ZUVuZDtcbnZhciBkZWZsYXRlU2V0RGljdGlvbmFyeV8xID0gZGVmbGF0ZVNldERpY3Rpb25hcnk7XG52YXIgZGVmbGF0ZUluZm8gPSAncGFrbyBkZWZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSc7XG5cbi8qIE5vdCBpbXBsZW1lbnRlZFxubW9kdWxlLmV4cG9ydHMuZGVmbGF0ZUJvdW5kID0gZGVmbGF0ZUJvdW5kO1xubW9kdWxlLmV4cG9ydHMuZGVmbGF0ZUNvcHkgPSBkZWZsYXRlQ29weTtcbm1vZHVsZS5leHBvcnRzLmRlZmxhdGVHZXREaWN0aW9uYXJ5ID0gZGVmbGF0ZUdldERpY3Rpb25hcnk7XG5tb2R1bGUuZXhwb3J0cy5kZWZsYXRlUGFyYW1zID0gZGVmbGF0ZVBhcmFtcztcbm1vZHVsZS5leHBvcnRzLmRlZmxhdGVQZW5kaW5nID0gZGVmbGF0ZVBlbmRpbmc7XG5tb2R1bGUuZXhwb3J0cy5kZWZsYXRlUHJpbWUgPSBkZWZsYXRlUHJpbWU7XG5tb2R1bGUuZXhwb3J0cy5kZWZsYXRlVHVuZSA9IGRlZmxhdGVUdW5lO1xuKi9cblxudmFyIGRlZmxhdGVfMSQyID0ge1xuXHRkZWZsYXRlSW5pdDogZGVmbGF0ZUluaXRfMSxcblx0ZGVmbGF0ZUluaXQyOiBkZWZsYXRlSW5pdDJfMSxcblx0ZGVmbGF0ZVJlc2V0OiBkZWZsYXRlUmVzZXRfMSxcblx0ZGVmbGF0ZVJlc2V0S2VlcDogZGVmbGF0ZVJlc2V0S2VlcF8xLFxuXHRkZWZsYXRlU2V0SGVhZGVyOiBkZWZsYXRlU2V0SGVhZGVyXzEsXG5cdGRlZmxhdGU6IGRlZmxhdGVfMiQxLFxuXHRkZWZsYXRlRW5kOiBkZWZsYXRlRW5kXzEsXG5cdGRlZmxhdGVTZXREaWN0aW9uYXJ5OiBkZWZsYXRlU2V0RGljdGlvbmFyeV8xLFxuXHRkZWZsYXRlSW5mbzogZGVmbGF0ZUluZm9cbn07XG5cbmNvbnN0IF9oYXMgPSAob2JqLCBrZXkpID0+IHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG59O1xuXG52YXIgYXNzaWduID0gZnVuY3Rpb24gKG9iaiAvKmZyb20xLCBmcm9tMiwgZnJvbTMsIC4uLiovKSB7XG4gIGNvbnN0IHNvdXJjZXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICB3aGlsZSAoc291cmNlcy5sZW5ndGgpIHtcbiAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VzLnNoaWZ0KCk7XG4gICAgaWYgKCFzb3VyY2UpIHsgY29udGludWU7IH1cblxuICAgIGlmICh0eXBlb2Ygc291cmNlICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzb3VyY2UgKyAnbXVzdCBiZSBub24tb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwIGluIHNvdXJjZSkge1xuICAgICAgaWYgKF9oYXMoc291cmNlLCBwKSkge1xuICAgICAgICBvYmpbcF0gPSBzb3VyY2VbcF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cblxuLy8gSm9pbiBhcnJheSBvZiBjaHVua3MgdG8gc2luZ2xlIGFycmF5LlxudmFyIGZsYXR0ZW5DaHVua3MgPSAoY2h1bmtzKSA9PiB7XG4gIC8vIGNhbGN1bGF0ZSBkYXRhIGxlbmd0aFxuICBsZXQgbGVuID0gMDtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGNodW5rcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBsZW4gKz0gY2h1bmtzW2ldLmxlbmd0aDtcbiAgfVxuXG4gIC8vIGpvaW4gY2h1bmtzXG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGxlbik7XG5cbiAgZm9yIChsZXQgaSA9IDAsIHBvcyA9IDAsIGwgPSBjaHVua3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgbGV0IGNodW5rID0gY2h1bmtzW2ldO1xuICAgIHJlc3VsdC5zZXQoY2h1bmssIHBvcyk7XG4gICAgcG9zICs9IGNodW5rLmxlbmd0aDtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgY29tbW9uID0ge1xuXHRhc3NpZ246IGFzc2lnbixcblx0ZmxhdHRlbkNodW5rczogZmxhdHRlbkNodW5rc1xufTtcblxuLy8gU3RyaW5nIGVuY29kZS9kZWNvZGUgaGVscGVyc1xuXG5cbi8vIFF1aWNrIGNoZWNrIGlmIHdlIGNhbiB1c2UgZmFzdCBhcnJheSB0byBiaW4gc3RyaW5nIGNvbnZlcnNpb25cbi8vXG4vLyAtIGFwcGx5KEFycmF5KSBjYW4gZmFpbCBvbiBBbmRyb2lkIDIuMlxuLy8gLSBhcHBseShVaW50OEFycmF5KSBjYW4gZmFpbCBvbiBpT1MgNS4xIFNhZmFyaVxuLy9cbmxldCBTVFJfQVBQTFlfVUlBX09LID0gdHJ1ZTtcblxudHJ5IHsgU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBuZXcgVWludDhBcnJheSgxKSk7IH0gY2F0Y2ggKF9fKSB7IFNUUl9BUFBMWV9VSUFfT0sgPSBmYWxzZTsgfVxuXG5cbi8vIFRhYmxlIHdpdGggdXRmOCBsZW5ndGhzIChjYWxjdWxhdGVkIGJ5IGZpcnN0IGJ5dGUgb2Ygc2VxdWVuY2UpXG4vLyBOb3RlLCB0aGF0IDUgJiA2LWJ5dGUgdmFsdWVzIGFuZCBzb21lIDQtYnl0ZSB2YWx1ZXMgY2FuIG5vdCBiZSByZXByZXNlbnRlZCBpbiBKUyxcbi8vIGJlY2F1c2UgbWF4IHBvc3NpYmxlIGNvZGVwb2ludCBpcyAweDEwZmZmZlxuY29uc3QgX3V0ZjhsZW4gPSBuZXcgVWludDhBcnJheSgyNTYpO1xuZm9yIChsZXQgcSA9IDA7IHEgPCAyNTY7IHErKykge1xuICBfdXRmOGxlbltxXSA9IChxID49IDI1MiA/IDYgOiBxID49IDI0OCA/IDUgOiBxID49IDI0MCA/IDQgOiBxID49IDIyNCA/IDMgOiBxID49IDE5MiA/IDIgOiAxKTtcbn1cbl91dGY4bGVuWzI1NF0gPSBfdXRmOGxlblsyNTVdID0gMTsgLy8gSW52YWxpZCBzZXF1ZW5jZSBzdGFydFxuXG5cbi8vIGNvbnZlcnQgc3RyaW5nIHRvIGFycmF5ICh0eXBlZCwgd2hlbiBwb3NzaWJsZSlcbnZhciBzdHJpbmcyYnVmID0gKHN0cikgPT4ge1xuICBpZiAodHlwZW9mIFRleHRFbmNvZGVyID09PSAnZnVuY3Rpb24nICYmIFRleHRFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGUpIHtcbiAgICByZXR1cm4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHN0cik7XG4gIH1cblxuICBsZXQgYnVmLCBjLCBjMiwgbV9wb3MsIGksIHN0cl9sZW4gPSBzdHIubGVuZ3RoLCBidWZfbGVuID0gMDtcblxuICAvLyBjb3VudCBiaW5hcnkgc2l6ZVxuICBmb3IgKG1fcG9zID0gMDsgbV9wb3MgPCBzdHJfbGVuOyBtX3BvcysrKSB7XG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zKTtcbiAgICBpZiAoKGMgJiAweGZjMDApID09PSAweGQ4MDAgJiYgKG1fcG9zICsgMSA8IHN0cl9sZW4pKSB7XG4gICAgICBjMiA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zICsgMSk7XG4gICAgICBpZiAoKGMyICYgMHhmYzAwKSA9PT0gMHhkYzAwKSB7XG4gICAgICAgIGMgPSAweDEwMDAwICsgKChjIC0gMHhkODAwKSA8PCAxMCkgKyAoYzIgLSAweGRjMDApO1xuICAgICAgICBtX3BvcysrO1xuICAgICAgfVxuICAgIH1cbiAgICBidWZfbGVuICs9IGMgPCAweDgwID8gMSA6IGMgPCAweDgwMCA/IDIgOiBjIDwgMHgxMDAwMCA/IDMgOiA0O1xuICB9XG5cbiAgLy8gYWxsb2NhdGUgYnVmZmVyXG4gIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGJ1Zl9sZW4pO1xuXG4gIC8vIGNvbnZlcnRcbiAgZm9yIChpID0gMCwgbV9wb3MgPSAwOyBpIDwgYnVmX2xlbjsgbV9wb3MrKykge1xuICAgIGMgPSBzdHIuY2hhckNvZGVBdChtX3Bvcyk7XG4gICAgaWYgKChjICYgMHhmYzAwKSA9PT0gMHhkODAwICYmIChtX3BvcyArIDEgPCBzdHJfbGVuKSkge1xuICAgICAgYzIgPSBzdHIuY2hhckNvZGVBdChtX3BvcyArIDEpO1xuICAgICAgaWYgKChjMiAmIDB4ZmMwMCkgPT09IDB4ZGMwMCkge1xuICAgICAgICBjID0gMHgxMDAwMCArICgoYyAtIDB4ZDgwMCkgPDwgMTApICsgKGMyIC0gMHhkYzAwKTtcbiAgICAgICAgbV9wb3MrKztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGMgPCAweDgwKSB7XG4gICAgICAvKiBvbmUgYnl0ZSAqL1xuICAgICAgYnVmW2krK10gPSBjO1xuICAgIH0gZWxzZSBpZiAoYyA8IDB4ODAwKSB7XG4gICAgICAvKiB0d28gYnl0ZXMgKi9cbiAgICAgIGJ1ZltpKytdID0gMHhDMCB8IChjID4+PiA2KTtcbiAgICAgIGJ1ZltpKytdID0gMHg4MCB8IChjICYgMHgzZik7XG4gICAgfSBlbHNlIGlmIChjIDwgMHgxMDAwMCkge1xuICAgICAgLyogdGhyZWUgYnl0ZXMgKi9cbiAgICAgIGJ1ZltpKytdID0gMHhFMCB8IChjID4+PiAxMik7XG4gICAgICBidWZbaSsrXSA9IDB4ODAgfCAoYyA+Pj4gNiAmIDB4M2YpO1xuICAgICAgYnVmW2krK10gPSAweDgwIHwgKGMgJiAweDNmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLyogZm91ciBieXRlcyAqL1xuICAgICAgYnVmW2krK10gPSAweGYwIHwgKGMgPj4+IDE4KTtcbiAgICAgIGJ1ZltpKytdID0gMHg4MCB8IChjID4+PiAxMiAmIDB4M2YpO1xuICAgICAgYnVmW2krK10gPSAweDgwIHwgKGMgPj4+IDYgJiAweDNmKTtcbiAgICAgIGJ1ZltpKytdID0gMHg4MCB8IChjICYgMHgzZik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ1Zjtcbn07XG5cbi8vIEhlbHBlclxuY29uc3QgYnVmMmJpbnN0cmluZyA9IChidWYsIGxlbikgPT4ge1xuICAvLyBPbiBDaHJvbWUsIHRoZSBhcmd1bWVudHMgaW4gYSBmdW5jdGlvbiBjYWxsIHRoYXQgYXJlIGFsbG93ZWQgaXMgYDY1NTM0YC5cbiAgLy8gSWYgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyIGlzIHNtYWxsZXIgdGhhbiB0aGF0LCB3ZSBjYW4gdXNlIHRoaXMgb3B0aW1pemF0aW9uLFxuICAvLyBvdGhlcndpc2Ugd2Ugd2lsbCB0YWtlIGEgc2xvd2VyIHBhdGguXG4gIGlmIChsZW4gPCA2NTUzNCkge1xuICAgIGlmIChidWYuc3ViYXJyYXkgJiYgU1RSX0FQUExZX1VJQV9PSykge1xuICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgYnVmLmxlbmd0aCA9PT0gbGVuID8gYnVmIDogYnVmLnN1YmFycmF5KDAsIGxlbikpO1xuICAgIH1cbiAgfVxuXG4gIGxldCByZXN1bHQgPSAnJztcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLy8gY29udmVydCBhcnJheSB0byBzdHJpbmdcbnZhciBidWYyc3RyaW5nID0gKGJ1ZiwgbWF4KSA9PiB7XG4gIGNvbnN0IGxlbiA9IG1heCB8fCBidWYubGVuZ3RoO1xuXG4gIGlmICh0eXBlb2YgVGV4dERlY29kZXIgPT09ICdmdW5jdGlvbicgJiYgVGV4dERlY29kZXIucHJvdG90eXBlLmRlY29kZSkge1xuICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoYnVmLnN1YmFycmF5KDAsIG1heCkpO1xuICB9XG5cbiAgbGV0IGksIG91dDtcblxuICAvLyBSZXNlcnZlIG1heCBwb3NzaWJsZSBsZW5ndGggKDIgd29yZHMgcGVyIGNoYXIpXG4gIC8vIE5COiBieSB1bmtub3duIHJlYXNvbnMsIEFycmF5IGlzIHNpZ25pZmljYW50bHkgZmFzdGVyIGZvclxuICAvLyAgICAgU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseSB0aGFuIFVpbnQxNkFycmF5LlxuICBjb25zdCB1dGYxNmJ1ZiA9IG5ldyBBcnJheShsZW4gKiAyKTtcblxuICBmb3IgKG91dCA9IDAsIGkgPSAwOyBpIDwgbGVuOykge1xuICAgIGxldCBjID0gYnVmW2krK107XG4gICAgLy8gcXVpY2sgcHJvY2VzcyBhc2NpaVxuICAgIGlmIChjIDwgMHg4MCkgeyB1dGYxNmJ1ZltvdXQrK10gPSBjOyBjb250aW51ZTsgfVxuXG4gICAgbGV0IGNfbGVuID0gX3V0ZjhsZW5bY107XG4gICAgLy8gc2tpcCA1ICYgNiBieXRlIGNvZGVzXG4gICAgaWYgKGNfbGVuID4gNCkgeyB1dGYxNmJ1ZltvdXQrK10gPSAweGZmZmQ7IGkgKz0gY19sZW4gLSAxOyBjb250aW51ZTsgfVxuXG4gICAgLy8gYXBwbHkgbWFzayBvbiBmaXJzdCBieXRlXG4gICAgYyAmPSBjX2xlbiA9PT0gMiA/IDB4MWYgOiBjX2xlbiA9PT0gMyA/IDB4MGYgOiAweDA3O1xuICAgIC8vIGpvaW4gdGhlIHJlc3RcbiAgICB3aGlsZSAoY19sZW4gPiAxICYmIGkgPCBsZW4pIHtcbiAgICAgIGMgPSAoYyA8PCA2KSB8IChidWZbaSsrXSAmIDB4M2YpO1xuICAgICAgY19sZW4tLTtcbiAgICB9XG5cbiAgICAvLyB0ZXJtaW5hdGVkIGJ5IGVuZCBvZiBzdHJpbmc/XG4gICAgaWYgKGNfbGVuID4gMSkgeyB1dGYxNmJ1ZltvdXQrK10gPSAweGZmZmQ7IGNvbnRpbnVlOyB9XG5cbiAgICBpZiAoYyA8IDB4MTAwMDApIHtcbiAgICAgIHV0ZjE2YnVmW291dCsrXSA9IGM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGMgLT0gMHgxMDAwMDtcbiAgICAgIHV0ZjE2YnVmW291dCsrXSA9IDB4ZDgwMCB8ICgoYyA+PiAxMCkgJiAweDNmZik7XG4gICAgICB1dGYxNmJ1ZltvdXQrK10gPSAweGRjMDAgfCAoYyAmIDB4M2ZmKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnVmMmJpbnN0cmluZyh1dGYxNmJ1Ziwgb3V0KTtcbn07XG5cblxuLy8gQ2FsY3VsYXRlIG1heCBwb3NzaWJsZSBwb3NpdGlvbiBpbiB1dGY4IGJ1ZmZlcixcbi8vIHRoYXQgd2lsbCBub3QgYnJlYWsgc2VxdWVuY2UuIElmIHRoYXQncyBub3QgcG9zc2libGVcbi8vIC0gKHZlcnkgc21hbGwgbGltaXRzKSByZXR1cm4gbWF4IHNpemUgYXMgaXMuXG4vL1xuLy8gYnVmW10gLSB1dGY4IGJ5dGVzIGFycmF5XG4vLyBtYXggICAtIGxlbmd0aCBsaW1pdCAobWFuZGF0b3J5KTtcbnZhciB1dGY4Ym9yZGVyID0gKGJ1ZiwgbWF4KSA9PiB7XG5cbiAgbWF4ID0gbWF4IHx8IGJ1Zi5sZW5ndGg7XG4gIGlmIChtYXggPiBidWYubGVuZ3RoKSB7IG1heCA9IGJ1Zi5sZW5ndGg7IH1cblxuICAvLyBnbyBiYWNrIGZyb20gbGFzdCBwb3NpdGlvbiwgdW50aWwgc3RhcnQgb2Ygc2VxdWVuY2UgZm91bmRcbiAgbGV0IHBvcyA9IG1heCAtIDE7XG4gIHdoaWxlIChwb3MgPj0gMCAmJiAoYnVmW3Bvc10gJiAweEMwKSA9PT0gMHg4MCkgeyBwb3MtLTsgfVxuXG4gIC8vIFZlcnkgc21hbGwgYW5kIGJyb2tlbiBzZXF1ZW5jZSxcbiAgLy8gcmV0dXJuIG1heCwgYmVjYXVzZSB3ZSBzaG91bGQgcmV0dXJuIHNvbWV0aGluZyBhbnl3YXkuXG4gIGlmIChwb3MgPCAwKSB7IHJldHVybiBtYXg7IH1cblxuICAvLyBJZiB3ZSBjYW1lIHRvIHN0YXJ0IG9mIGJ1ZmZlciAtIHRoYXQgbWVhbnMgYnVmZmVyIGlzIHRvbyBzbWFsbCxcbiAgLy8gcmV0dXJuIG1heCB0b28uXG4gIGlmIChwb3MgPT09IDApIHsgcmV0dXJuIG1heDsgfVxuXG4gIHJldHVybiAocG9zICsgX3V0ZjhsZW5bYnVmW3Bvc11dID4gbWF4KSA/IHBvcyA6IG1heDtcbn07XG5cbnZhciBzdHJpbmdzID0ge1xuXHRzdHJpbmcyYnVmOiBzdHJpbmcyYnVmLFxuXHRidWYyc3RyaW5nOiBidWYyc3RyaW5nLFxuXHR1dGY4Ym9yZGVyOiB1dGY4Ym9yZGVyXG59O1xuXG4vLyAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXJcbi8vIChDKSAyMDE0LTIwMTcgVml0YWx5IFB1enJpbiBhbmQgQW5kcmV5IFR1cGl0c2luXG4vL1xuLy8gVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWRcbi8vIHdhcnJhbnR5LiBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlc1xuLy8gYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSxcbi8vIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXRcbi8vIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcbi8vXG4vLyAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdFxuLy8gICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZVxuLy8gICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmVcbi8vICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC5cbi8vIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlXG4vLyAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS5cbi8vIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uXG5cbmZ1bmN0aW9uIFpTdHJlYW0oKSB7XG4gIC8qIG5leHQgaW5wdXQgYnl0ZSAqL1xuICB0aGlzLmlucHV0ID0gbnVsbDsgLy8gSlMgc3BlY2lmaWMsIGJlY2F1c2Ugd2UgaGF2ZSBubyBwb2ludGVyc1xuICB0aGlzLm5leHRfaW4gPSAwO1xuICAvKiBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGF0IGlucHV0ICovXG4gIHRoaXMuYXZhaWxfaW4gPSAwO1xuICAvKiB0b3RhbCBudW1iZXIgb2YgaW5wdXQgYnl0ZXMgcmVhZCBzbyBmYXIgKi9cbiAgdGhpcy50b3RhbF9pbiA9IDA7XG4gIC8qIG5leHQgb3V0cHV0IGJ5dGUgc2hvdWxkIGJlIHB1dCB0aGVyZSAqL1xuICB0aGlzLm91dHB1dCA9IG51bGw7IC8vIEpTIHNwZWNpZmljLCBiZWNhdXNlIHdlIGhhdmUgbm8gcG9pbnRlcnNcbiAgdGhpcy5uZXh0X291dCA9IDA7XG4gIC8qIHJlbWFpbmluZyBmcmVlIHNwYWNlIGF0IG91dHB1dCAqL1xuICB0aGlzLmF2YWlsX291dCA9IDA7XG4gIC8qIHRvdGFsIG51bWJlciBvZiBieXRlcyBvdXRwdXQgc28gZmFyICovXG4gIHRoaXMudG90YWxfb3V0ID0gMDtcbiAgLyogbGFzdCBlcnJvciBtZXNzYWdlLCBOVUxMIGlmIG5vIGVycm9yICovXG4gIHRoaXMubXNnID0gJycvKlpfTlVMTCovO1xuICAvKiBub3QgdmlzaWJsZSBieSBhcHBsaWNhdGlvbnMgKi9cbiAgdGhpcy5zdGF0ZSA9IG51bGw7XG4gIC8qIGJlc3QgZ3Vlc3MgYWJvdXQgdGhlIGRhdGEgdHlwZTogYmluYXJ5IG9yIHRleHQgKi9cbiAgdGhpcy5kYXRhX3R5cGUgPSAyLypaX1VOS05PV04qLztcbiAgLyogYWRsZXIzMiB2YWx1ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgKi9cbiAgdGhpcy5hZGxlciA9IDA7XG59XG5cbnZhciB6c3RyZWFtID0gWlN0cmVhbTtcblxuY29uc3QgdG9TdHJpbmckMSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8qIFB1YmxpYyBjb25zdGFudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5jb25zdCB7XG4gIFpfTk9fRkxVU0g6IFpfTk9fRkxVU0gkMSwgWl9TWU5DX0ZMVVNILCBaX0ZVTExfRkxVU0gsIFpfRklOSVNIOiBaX0ZJTklTSCQyLFxuICBaX09LOiBaX09LJDIsIFpfU1RSRUFNX0VORDogWl9TVFJFQU1fRU5EJDIsXG4gIFpfREVGQVVMVF9DT01QUkVTU0lPTixcbiAgWl9ERUZBVUxUX1NUUkFURUdZLFxuICBaX0RFRkxBVEVEOiBaX0RFRkxBVEVEJDFcbn0gPSBjb25zdGFudHMkMjtcblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuY29uc3QgZGVmYXVsdE9wdGlvbnMkMSA9IHtcbiAgbGV2ZWw6IFpfREVGQVVMVF9DT01QUkVTU0lPTixcbiAgbWV0aG9kOiBaX0RFRkxBVEVEJDEsXG4gIGNodW5rU2l6ZTogMTYzODQsXG4gIHdpbmRvd0JpdHM6IDE1LFxuICBtZW1MZXZlbDogOCxcbiAgc3RyYXRlZ3k6IFpfREVGQVVMVF9TVFJBVEVHWSxcbiAgbGVnYWN5SGFzaDogdHJ1ZVxufTtcblxuLyoqXG4gKiBjbGFzcyBEZWZsYXRlXG4gKlxuICogR2VuZXJpYyBKUy1zdHlsZSB3cmFwcGVyIGZvciB6bGliIGNhbGxzLiBJZiB5b3UgZG9uJ3QgbmVlZFxuICogc3RyZWFtaW5nIGJlaGF2aW91ciAtIHVzZSBtb3JlIHNpbXBsZSBmdW5jdGlvbnM6IFtbZGVmbGF0ZV1dLFxuICogW1tkZWZsYXRlUmF3XV0gYW5kIFtbZ3ppcF1dLlxuICoqL1xuXG4vKiBpbnRlcm5hbFxuICogRGVmbGF0ZS5jaHVua3MgLT4gQXJyYXlcbiAqXG4gKiBDaHVua3Mgb2Ygb3V0cHV0IGRhdGEsIGlmIFtbRGVmbGF0ZSNvbkRhdGFdXSBub3Qgb3ZlcnJpZGRlbi5cbiAqKi9cblxuLyoqXG4gKiBEZWZsYXRlLnJlc3VsdCAtPiBVaW50OEFycmF5XG4gKlxuICogQ29tcHJlc3NlZCByZXN1bHQsIGdlbmVyYXRlZCBieSBkZWZhdWx0IFtbRGVmbGF0ZSNvbkRhdGFdXVxuICogYW5kIFtbRGVmbGF0ZSNvbkVuZF1dIGhhbmRsZXJzLiBGaWxsZWQgYWZ0ZXIgeW91IHB1c2ggbGFzdCBjaHVua1xuICogKGNhbGwgW1tEZWZsYXRlI3B1c2hdXSB3aXRoIGBaX0ZJTklTSGAgLyBgdHJ1ZWAgcGFyYW0pLlxuICoqL1xuXG4vKipcbiAqIERlZmxhdGUuZXJyIC0+IE51bWJlclxuICpcbiAqIEVycm9yIGNvZGUgYWZ0ZXIgZGVmbGF0ZSBmaW5pc2hlZC4gMCAoWl9PSykgb24gc3VjY2Vzcy5cbiAqIFlvdSB3aWxsIG5vdCBuZWVkIGl0IGluIHJlYWwgbGlmZSwgYmVjYXVzZSBkZWZsYXRlIGVycm9yc1xuICogYXJlIHBvc3NpYmxlIG9ubHkgb24gd3Jvbmcgb3B0aW9ucyBvciBiYWQgYG9uRGF0YWAgLyBgb25FbmRgXG4gKiBjdXN0b20gaGFuZGxlcnMuXG4gKiovXG5cbi8qKlxuICogRGVmbGF0ZS5tc2cgLT4gU3RyaW5nXG4gKlxuICogRXJyb3IgbWVzc2FnZSwgaWYgW1tEZWZsYXRlLmVycl1dICE9IDBcbiAqKi9cblxuXG4vKipcbiAqIG5ldyBEZWZsYXRlKG9wdGlvbnMpXG4gKiAtIG9wdGlvbnMgKE9iamVjdCk6IHpsaWIgZGVmbGF0ZSBvcHRpb25zLlxuICpcbiAqIENyZWF0ZXMgbmV3IGRlZmxhdG9yIGluc3RhbmNlIHdpdGggc3BlY2lmaWVkIHBhcmFtcy4gVGhyb3dzIGV4Y2VwdGlvblxuICogb24gYmFkIHBhcmFtcy4gU3VwcG9ydGVkIG9wdGlvbnM6XG4gKlxuICogLSBgbGV2ZWxgXG4gKiAtIGB3aW5kb3dCaXRzYFxuICogLSBgbWVtTGV2ZWxgXG4gKiAtIGBzdHJhdGVneWBcbiAqIC0gYGRpY3Rpb25hcnlgXG4gKlxuICogW2h0dHA6Ly96bGliLm5ldC9tYW51YWwuaHRtbCNBZHZhbmNlZF0oaHR0cDovL3psaWIubmV0L21hbnVhbC5odG1sI0FkdmFuY2VkKVxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlc2UuXG4gKlxuICogLSBgbGVnYWN5SGFzaGAgKEJvb2xlYW4pIC0gdXNlIHRoZSBjbGFzc2ljIHpsaWIgaGFzaCAoZGVmYXVsdCksIHdoaWNoIG1hdGNoZXNcbiAqICAgY2Fub25pY2FsIHpsaWIgb3V0cHV0IGJ5dGUtZm9yLWJ5dGUuIFNldCB0byBgZmFsc2VgIHRvIHVzZSB0aGUgZmFzdGVyXG4gKiAgIEFOWkFDKysgaGFzaCwgd2hpY2ggbWF0Y2hlcyByZWNlbnQgKGNocm9taXVtKSBub2RlLmpzIG91dHB1dCBpbnN0ZWFkLlxuICpcbiAqIEFkZGl0aW9uYWwgb3B0aW9ucywgZm9yIGludGVybmFsIG5lZWRzOlxuICpcbiAqIC0gYGNodW5rU2l6ZWAgLSBzaXplIG9mIGdlbmVyYXRlZCBkYXRhIGNodW5rcyAoMTZLIGJ5IGRlZmF1bHQpXG4gKiAtIGByYXdgIChCb29sZWFuKSAtIGRvIHJhdyBkZWZsYXRlXG4gKiAtIGBnemlwYCAoQm9vbGVhbikgLSBjcmVhdGUgZ3ppcCB3cmFwcGVyXG4gKiAtIGBoZWFkZXJgIChPYmplY3QpIC0gY3VzdG9tIGhlYWRlciBmb3IgZ3ppcFxuICogICAtIGB0ZXh0YCAoQm9vbGVhbikgLSB0cnVlIGlmIGNvbXByZXNzZWQgZGF0YSBiZWxpZXZlZCB0byBiZSB0ZXh0XG4gKiAgIC0gYHRpbWVgIChOdW1iZXIpIC0gbW9kaWZpY2F0aW9uIHRpbWUsIHVuaXggdGltZXN0YW1wXG4gKiAgIC0gYG9zYCAoTnVtYmVyKSAtIG9wZXJhdGlvbiBzeXN0ZW0gY29kZVxuICogICAtIGBleHRyYWAgKEFycmF5KSAtIGFycmF5IG9mIGJ5dGVzIHdpdGggZXh0cmEgZGF0YSAobWF4IDY1NTM2KVxuICogICAtIGBuYW1lYCAoU3RyaW5nKSAtIGZpbGUgbmFtZSAoYmluYXJ5IHN0cmluZylcbiAqICAgLSBgY29tbWVudGAgKFN0cmluZykgLSBjb21tZW50IChiaW5hcnkgc3RyaW5nKVxuICogICAtIGBoY3JjYCAoQm9vbGVhbikgLSB0cnVlIGlmIGhlYWRlciBjcmMgc2hvdWxkIGJlIGFkZGVkXG4gKlxuICogIyMjIyMgRXhhbXBsZTpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBjb25zdCBwYWtvID0gcmVxdWlyZSgncGFrbycpXG4gKiAgICwgY2h1bmsxID0gbmV3IFVpbnQ4QXJyYXkoWzEsMiwzLDQsNSw2LDcsOCw5XSlcbiAqICAgLCBjaHVuazIgPSBuZXcgVWludDhBcnJheShbMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTldKTtcbiAqXG4gKiBjb25zdCBkZWZsYXRlID0gbmV3IHBha28uRGVmbGF0ZSh7IGxldmVsOiAzfSk7XG4gKlxuICogZGVmbGF0ZS5wdXNoKGNodW5rMSwgZmFsc2UpO1xuICogZGVmbGF0ZS5wdXNoKGNodW5rMiwgdHJ1ZSk7ICAvLyB0cnVlIC0+IGxhc3QgY2h1bmtcbiAqXG4gKiBpZiAoZGVmbGF0ZS5lcnIpIHsgdGhyb3cgbmV3IEVycm9yKGRlZmxhdGUuZXJyKTsgfVxuICpcbiAqIGNvbnNvbGUubG9nKGRlZmxhdGUucmVzdWx0KTtcbiAqIGBgYFxuICoqL1xuZnVuY3Rpb24gRGVmbGF0ZSQxKG9wdGlvbnMpIHtcbiAgdGhpcy5vcHRpb25zID0gY29tbW9uLmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMkMSwgb3B0aW9ucyB8fCB7fSk7XG5cbiAgbGV0IG9wdCA9IHRoaXMub3B0aW9ucztcblxuICBpZiAob3B0LnJhdyAmJiAob3B0LndpbmRvd0JpdHMgPiAwKSkge1xuICAgIG9wdC53aW5kb3dCaXRzID0gLW9wdC53aW5kb3dCaXRzO1xuICB9XG5cbiAgZWxzZSBpZiAob3B0Lmd6aXAgJiYgKG9wdC53aW5kb3dCaXRzID4gMCkgJiYgKG9wdC53aW5kb3dCaXRzIDwgMTYpKSB7XG4gICAgb3B0LndpbmRvd0JpdHMgKz0gMTY7XG4gIH1cblxuICB0aGlzLmVyciAgICA9IDA7ICAgICAgLy8gZXJyb3IgY29kZSwgaWYgaGFwcGVucyAoMCA9IFpfT0spXG4gIHRoaXMubXNnICAgID0gJyc7ICAgICAvLyBlcnJvciBtZXNzYWdlXG4gIHRoaXMuZW5kZWQgID0gZmFsc2U7ICAvLyB1c2VkIHRvIGF2b2lkIG11bHRpcGxlIG9uRW5kKCkgY2FsbHNcbiAgdGhpcy5jaHVua3MgPSBbXTsgICAgIC8vIGNodW5rcyBvZiBjb21wcmVzc2VkIGRhdGFcblxuICB0aGlzLnN0cm0gPSBuZXcgenN0cmVhbSgpO1xuICB0aGlzLnN0cm0uYXZhaWxfb3V0ID0gMDtcblxuICBsZXQgc3RhdHVzID0gZGVmbGF0ZV8xJDIuZGVmbGF0ZUluaXQyKFxuICAgIHRoaXMuc3RybSxcbiAgICBvcHQubGV2ZWwsXG4gICAgb3B0Lm1ldGhvZCxcbiAgICBvcHQud2luZG93Qml0cyxcbiAgICBvcHQubWVtTGV2ZWwsXG4gICAgb3B0LnN0cmF0ZWd5LFxuICAgIG9wdC5sZWdhY3lIYXNoXG4gICk7XG5cbiAgaWYgKHN0YXR1cyAhPT0gWl9PSyQyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2VzW3N0YXR1c10pO1xuICB9XG5cbiAgaWYgKG9wdC5oZWFkZXIpIHtcbiAgICBkZWZsYXRlXzEkMi5kZWZsYXRlU2V0SGVhZGVyKHRoaXMuc3RybSwgb3B0LmhlYWRlcik7XG4gIH1cblxuICBpZiAob3B0LmRpY3Rpb25hcnkpIHtcbiAgICBsZXQgZGljdDtcbiAgICAvLyBDb252ZXJ0IGRhdGEgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBvcHQuZGljdGlvbmFyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIElmIHdlIG5lZWQgdG8gY29tcHJlc3MgdGV4dCwgY2hhbmdlIGVuY29kaW5nIHRvIHV0ZjguXG4gICAgICBkaWN0ID0gc3RyaW5ncy5zdHJpbmcyYnVmKG9wdC5kaWN0aW9uYXJ5KTtcbiAgICB9IGVsc2UgaWYgKHRvU3RyaW5nJDEuY2FsbChvcHQuZGljdGlvbmFyeSkgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXScpIHtcbiAgICAgIGRpY3QgPSBuZXcgVWludDhBcnJheShvcHQuZGljdGlvbmFyeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpY3QgPSBvcHQuZGljdGlvbmFyeTtcbiAgICB9XG5cbiAgICBzdGF0dXMgPSBkZWZsYXRlXzEkMi5kZWZsYXRlU2V0RGljdGlvbmFyeSh0aGlzLnN0cm0sIGRpY3QpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gWl9PSyQyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZXNbc3RhdHVzXSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGljdF9zZXQgPSB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRGVmbGF0ZSNwdXNoKGRhdGFbLCBmbHVzaF9tb2RlXSkgLT4gQm9vbGVhblxuICogLSBkYXRhIChVaW50OEFycmF5fEFycmF5QnVmZmVyfFN0cmluZyk6IGlucHV0IGRhdGEuIFN0cmluZ3Mgd2lsbCBiZVxuICogICBjb252ZXJ0ZWQgdG8gdXRmOCBieXRlIHNlcXVlbmNlLlxuICogLSBmbHVzaF9tb2RlIChOdW1iZXJ8Qm9vbGVhbik6IDAuLjYgZm9yIGNvcnJlc3BvbmRpbmcgWl9OT19GTFVTSC4uWl9UUkVFIG1vZGVzLlxuICogICBTZWUgY29uc3RhbnRzLiBTa2lwcGVkIG9yIGBmYWxzZWAgbWVhbnMgWl9OT19GTFVTSCwgYHRydWVgIG1lYW5zIFpfRklOSVNILlxuICpcbiAqIFNlbmRzIGlucHV0IGRhdGEgdG8gZGVmbGF0ZSBwaXBlLCBnZW5lcmF0aW5nIFtbRGVmbGF0ZSNvbkRhdGFdXSBjYWxscyB3aXRoXG4gKiBuZXcgY29tcHJlc3NlZCBjaHVua3MuIFJldHVybnMgYHRydWVgIG9uIHN1Y2Nlc3MuIFRoZSBsYXN0IGRhdGEgYmxvY2sgbXVzdFxuICogaGF2ZSBgZmx1c2hfbW9kZWAgWl9GSU5JU0ggKG9yIGB0cnVlYCkuIFRoYXQgd2lsbCBmbHVzaCBpbnRlcm5hbCBwZW5kaW5nXG4gKiBidWZmZXJzIGFuZCBjYWxsIFtbRGVmbGF0ZSNvbkVuZF1dLlxuICpcbiAqIE9uIGZhaWwgY2FsbCBbW0RlZmxhdGUjb25FbmRdXSB3aXRoIGVycm9yIGNvZGUgYW5kIHJldHVybiBmYWxzZS5cbiAqXG4gKiAjIyMjIyBFeGFtcGxlXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogcHVzaChjaHVuaywgZmFsc2UpOyAvLyBwdXNoIG9uZSBvZiBkYXRhIGNodW5rc1xuICogLi4uXG4gKiBwdXNoKGNodW5rLCB0cnVlKTsgIC8vIHB1c2ggbGFzdCBjaHVua1xuICogYGBgXG4gKiovXG5EZWZsYXRlJDEucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgZmx1c2hfbW9kZSkge1xuICBjb25zdCBzdHJtID0gdGhpcy5zdHJtO1xuICBjb25zdCBjaHVua1NpemUgPSB0aGlzLm9wdGlvbnMuY2h1bmtTaXplO1xuICBsZXQgc3RhdHVzLCBfZmx1c2hfbW9kZTtcblxuICBpZiAodGhpcy5lbmRlZCkgeyByZXR1cm4gZmFsc2U7IH1cblxuICBpZiAoZmx1c2hfbW9kZSA9PT0gfn5mbHVzaF9tb2RlKSBfZmx1c2hfbW9kZSA9IGZsdXNoX21vZGU7XG4gIGVsc2UgX2ZsdXNoX21vZGUgPSBmbHVzaF9tb2RlID09PSB0cnVlID8gWl9GSU5JU0gkMiA6IFpfTk9fRkxVU0gkMTtcblxuICAvLyBDb252ZXJ0IGRhdGEgaWYgbmVlZGVkXG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBJZiB3ZSBuZWVkIHRvIGNvbXByZXNzIHRleHQsIGNoYW5nZSBlbmNvZGluZyB0byB1dGY4LlxuICAgIHN0cm0uaW5wdXQgPSBzdHJpbmdzLnN0cmluZzJidWYoZGF0YSk7XG4gIH0gZWxzZSBpZiAodG9TdHJpbmckMS5jYWxsKGRhdGEpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nKSB7XG4gICAgc3RybS5pbnB1dCA9IG5ldyBVaW50OEFycmF5KGRhdGEpO1xuICB9IGVsc2Uge1xuICAgIHN0cm0uaW5wdXQgPSBkYXRhO1xuICB9XG5cbiAgc3RybS5uZXh0X2luID0gMDtcbiAgc3RybS5hdmFpbF9pbiA9IHN0cm0uaW5wdXQubGVuZ3RoO1xuXG4gIGZvciAoOzspIHtcbiAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIHN0cm0ub3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkoY2h1bmtTaXplKTtcbiAgICAgIHN0cm0ubmV4dF9vdXQgPSAwO1xuICAgICAgc3RybS5hdmFpbF9vdXQgPSBjaHVua1NpemU7XG4gICAgfVxuXG4gICAgLy8gTWFrZSBzdXJlIGF2YWlsX291dCA+IDYgdG8gYXZvaWQgcmVwZWF0aW5nIG1hcmtlcnNcbiAgICBpZiAoKF9mbHVzaF9tb2RlID09PSBaX1NZTkNfRkxVU0ggfHwgX2ZsdXNoX21vZGUgPT09IFpfRlVMTF9GTFVTSCkgJiYgc3RybS5hdmFpbF9vdXQgPD0gNikge1xuICAgICAgdGhpcy5vbkRhdGEoc3RybS5vdXRwdXQuc3ViYXJyYXkoMCwgc3RybS5uZXh0X291dCkpO1xuICAgICAgc3RybS5hdmFpbF9vdXQgPSAwO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgc3RhdHVzID0gZGVmbGF0ZV8xJDIuZGVmbGF0ZShzdHJtLCBfZmx1c2hfbW9kZSk7XG5cbiAgICAvLyBFbmRlZCA9PiBmbHVzaCBhbmQgZmluaXNoXG4gICAgaWYgKHN0YXR1cyA9PT0gWl9TVFJFQU1fRU5EJDIpIHtcbiAgICAgIGlmIChzdHJtLm5leHRfb3V0ID4gMCkge1xuICAgICAgICB0aGlzLm9uRGF0YShzdHJtLm91dHB1dC5zdWJhcnJheSgwLCBzdHJtLm5leHRfb3V0KSk7XG4gICAgICB9XG4gICAgICBzdGF0dXMgPSBkZWZsYXRlXzEkMi5kZWZsYXRlRW5kKHRoaXMuc3RybSk7XG4gICAgICB0aGlzLm9uRW5kKHN0YXR1cyk7XG4gICAgICB0aGlzLmVuZGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBzdGF0dXMgPT09IFpfT0skMjtcbiAgICB9XG5cbiAgICAvLyBGbHVzaCBpZiBvdXQgYnVmZmVyIGZ1bGxcbiAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIHRoaXMub25EYXRhKHN0cm0ub3V0cHV0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIEZsdXNoIGlmIHJlcXVlc3RlZCBhbmQgaGFzIGRhdGFcbiAgICBpZiAoX2ZsdXNoX21vZGUgPiAwICYmIHN0cm0ubmV4dF9vdXQgPiAwKSB7XG4gICAgICB0aGlzLm9uRGF0YShzdHJtLm91dHB1dC5zdWJhcnJheSgwLCBzdHJtLm5leHRfb3V0KSk7XG4gICAgICBzdHJtLmF2YWlsX291dCA9IDA7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RybS5hdmFpbF9pbiA9PT0gMCkgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cblxuLyoqXG4gKiBEZWZsYXRlI29uRGF0YShjaHVuaykgLT4gVm9pZFxuICogLSBjaHVuayAoVWludDhBcnJheSk6IG91dHB1dCBkYXRhLlxuICpcbiAqIEJ5IGRlZmF1bHQsIHN0b3JlcyBkYXRhIGJsb2NrcyBpbiBgY2h1bmtzW11gIHByb3BlcnR5IGFuZCBnbHVlXG4gKiB0aG9zZSBpbiBgb25FbmRgLiBPdmVycmlkZSB0aGlzIGhhbmRsZXIsIGlmIHlvdSBuZWVkIGFub3RoZXIgYmVoYXZpb3VyLlxuICoqL1xuRGVmbGF0ZSQxLnByb3RvdHlwZS5vbkRhdGEgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgdGhpcy5jaHVua3MucHVzaChjaHVuayk7XG59O1xuXG5cbi8qKlxuICogRGVmbGF0ZSNvbkVuZChzdGF0dXMpIC0+IFZvaWRcbiAqIC0gc3RhdHVzIChOdW1iZXIpOiBkZWZsYXRlIHN0YXR1cy4gMCAoWl9PSykgb24gc3VjY2VzcyxcbiAqICAgb3RoZXIgaWYgbm90LlxuICpcbiAqIENhbGxlZCBvbmNlIGFmdGVyIHlvdSB0ZWxsIGRlZmxhdGUgdGhhdCB0aGUgaW5wdXQgc3RyZWFtIGlzXG4gKiBjb21wbGV0ZSAoWl9GSU5JU0gpLiBCeSBkZWZhdWx0IC0gam9pbiBjb2xsZWN0ZWQgY2h1bmtzLFxuICogZnJlZSBtZW1vcnkgYW5kIGZpbGwgYHJlc3VsdHNgIC8gYGVycmAgcHJvcGVydGllcy5cbiAqKi9cbkRlZmxhdGUkMS5wcm90b3R5cGUub25FbmQgPSBmdW5jdGlvbiAoc3RhdHVzKSB7XG4gIC8vIE9uIHN1Y2Nlc3MgLSBqb2luXG4gIGlmIChzdGF0dXMgPT09IFpfT0skMikge1xuICAgIHRoaXMucmVzdWx0ID0gY29tbW9uLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpO1xuICB9XG4gIHRoaXMuY2h1bmtzID0gW107XG4gIHRoaXMuZXJyID0gc3RhdHVzO1xuICB0aGlzLm1zZyA9IHRoaXMuc3RybS5tc2c7XG59O1xuXG5cbi8qKlxuICogZGVmbGF0ZShkYXRhWywgb3B0aW9uc10pIC0+IFVpbnQ4QXJyYXlcbiAqIC0gZGF0YSAoVWludDhBcnJheXxBcnJheUJ1ZmZlcnxTdHJpbmcpOiBpbnB1dCBkYXRhIHRvIGNvbXByZXNzLlxuICogLSBvcHRpb25zIChPYmplY3QpOiB6bGliIGRlZmxhdGUgb3B0aW9ucy5cbiAqXG4gKiBDb21wcmVzcyBgZGF0YWAgd2l0aCBkZWZsYXRlIGFsZ29yaXRobSBhbmQgYG9wdGlvbnNgLlxuICpcbiAqIFN1cHBvcnRlZCBvcHRpb25zIGFyZTpcbiAqXG4gKiAtIGxldmVsXG4gKiAtIHdpbmRvd0JpdHNcbiAqIC0gbWVtTGV2ZWxcbiAqIC0gc3RyYXRlZ3lcbiAqIC0gZGljdGlvbmFyeVxuICpcbiAqIFtodHRwOi8vemxpYi5uZXQvbWFudWFsLmh0bWwjQWR2YW5jZWRdKGh0dHA6Ly96bGliLm5ldC9tYW51YWwuaHRtbCNBZHZhbmNlZClcbiAqIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZXNlLlxuICpcbiAqIFN1Z2FyIChvcHRpb25zKTpcbiAqXG4gKiAtIGByYXdgIChCb29sZWFuKSAtIHNheSB0aGF0IHdlIHdvcmsgd2l0aCByYXcgc3RyZWFtLCBpZiB5b3UgZG9uJ3Qgd2lzaCB0byBzcGVjaWZ5XG4gKiAgIG5lZ2F0aXZlIHdpbmRvd0JpdHMgaW1wbGljaXRseS5cbiAqXG4gKiAjIyMjIyBFeGFtcGxlOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGNvbnN0IHBha28gPSByZXF1aXJlKCdwYWtvJylcbiAqIGNvbnN0IGRhdGEgPSBuZXcgVWludDhBcnJheShbMSwyLDMsNCw1LDYsNyw4LDldKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhwYWtvLmRlZmxhdGUoZGF0YSkpO1xuICogYGBgXG4gKiovXG5mdW5jdGlvbiBkZWZsYXRlJDEoaW5wdXQsIG9wdGlvbnMpIHtcbiAgY29uc3QgZGVmbGF0b3IgPSBuZXcgRGVmbGF0ZSQxKG9wdGlvbnMpO1xuXG4gIGRlZmxhdG9yLnB1c2goaW5wdXQsIHRydWUpO1xuXG4gIC8vIFRoYXQgd2lsbCBuZXZlciBoYXBwZW5zLCBpZiB5b3UgZG9uJ3QgY2hlYXQgd2l0aCBvcHRpb25zIDopXG4gIGlmIChkZWZsYXRvci5lcnIpIHsgdGhyb3cgZGVmbGF0b3IubXNnIHx8IG1lc3NhZ2VzW2RlZmxhdG9yLmVycl07IH1cblxuICByZXR1cm4gZGVmbGF0b3IucmVzdWx0O1xufVxuXG5cbi8qKlxuICogZGVmbGF0ZVJhdyhkYXRhWywgb3B0aW9uc10pIC0+IFVpbnQ4QXJyYXlcbiAqIC0gZGF0YSAoVWludDhBcnJheXxBcnJheUJ1ZmZlcnxTdHJpbmcpOiBpbnB1dCBkYXRhIHRvIGNvbXByZXNzLlxuICogLSBvcHRpb25zIChPYmplY3QpOiB6bGliIGRlZmxhdGUgb3B0aW9ucy5cbiAqXG4gKiBUaGUgc2FtZSBhcyBbW2RlZmxhdGVdXSwgYnV0IGNyZWF0ZXMgcmF3IGRhdGEsIHdpdGhvdXQgd3JhcHBlclxuICogKGhlYWRlciBhbmQgYWRsZXIzMiBjcmMpLlxuICoqL1xuZnVuY3Rpb24gZGVmbGF0ZVJhdyQxKGlucHV0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBvcHRpb25zLnJhdyA9IHRydWU7XG4gIHJldHVybiBkZWZsYXRlJDEoaW5wdXQsIG9wdGlvbnMpO1xufVxuXG5cbi8qKlxuICogZ3ppcChkYXRhWywgb3B0aW9uc10pIC0+IFVpbnQ4QXJyYXlcbiAqIC0gZGF0YSAoVWludDhBcnJheXxBcnJheUJ1ZmZlcnxTdHJpbmcpOiBpbnB1dCBkYXRhIHRvIGNvbXByZXNzLlxuICogLSBvcHRpb25zIChPYmplY3QpOiB6bGliIGRlZmxhdGUgb3B0aW9ucy5cbiAqXG4gKiBUaGUgc2FtZSBhcyBbW2RlZmxhdGVdXSwgYnV0IGNyZWF0ZSBnemlwIHdyYXBwZXIgaW5zdGVhZCBvZlxuICogZGVmbGF0ZSBvbmUuXG4gKiovXG5mdW5jdGlvbiBnemlwJDEoaW5wdXQsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIG9wdGlvbnMuZ3ppcCA9IHRydWU7XG4gIHJldHVybiBkZWZsYXRlJDEoaW5wdXQsIG9wdGlvbnMpO1xufVxuXG5cbnZhciBEZWZsYXRlXzEkMSA9IERlZmxhdGUkMTtcbnZhciBkZWZsYXRlXzIgPSBkZWZsYXRlJDE7XG52YXIgZGVmbGF0ZVJhd18xJDEgPSBkZWZsYXRlUmF3JDE7XG52YXIgZ3ppcF8xJDEgPSBnemlwJDE7XG52YXIgY29uc3RhbnRzJDEgPSBjb25zdGFudHMkMjtcblxudmFyIGRlZmxhdGVfMSQxID0ge1xuXHREZWZsYXRlOiBEZWZsYXRlXzEkMSxcblx0ZGVmbGF0ZTogZGVmbGF0ZV8yLFxuXHRkZWZsYXRlUmF3OiBkZWZsYXRlUmF3XzEkMSxcblx0Z3ppcDogZ3ppcF8xJDEsXG5cdGNvbnN0YW50czogY29uc3RhbnRzJDFcbn07XG5cbi8vIChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlclxuLy8gKEMpIDIwMTQtMjAxNyBWaXRhbHkgUHV6cmluIGFuZCBBbmRyZXkgVHVwaXRzaW5cbi8vXG4vLyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZFxuLy8gd2FycmFudHkuIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzXG4vLyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLFxuLy8gaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdFxuLy8gZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuLy9cbi8vIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90XG4vLyAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlXG4vLyAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZVxuLy8gICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLlxuLy8gMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmVcbi8vICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLlxuLy8gMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi5cblxuLy8gU2VlIHN0YXRlIGRlZnMgZnJvbSBpbmZsYXRlLmpzXG5jb25zdCBCQUQkMSA9IDE2MjA5OyAgICAgICAvKiBnb3QgYSBkYXRhIGVycm9yIC0tIHJlbWFpbiBoZXJlIHVudGlsIHJlc2V0ICovXG5jb25zdCBUWVBFJDEgPSAxNjE5MTsgICAgICAvKiBpOiB3YWl0aW5nIGZvciB0eXBlIGJpdHMsIGluY2x1ZGluZyBsYXN0LWZsYWcgYml0ICovXG5cbi8qXG4gICBEZWNvZGUgbGl0ZXJhbCwgbGVuZ3RoLCBhbmQgZGlzdGFuY2UgY29kZXMgYW5kIHdyaXRlIG91dCB0aGUgcmVzdWx0aW5nXG4gICBsaXRlcmFsIGFuZCBtYXRjaCBieXRlcyB1bnRpbCBlaXRoZXIgbm90IGVub3VnaCBpbnB1dCBvciBvdXRwdXQgaXNcbiAgIGF2YWlsYWJsZSwgYW4gZW5kLW9mLWJsb2NrIGlzIGVuY291bnRlcmVkLCBvciBhIGRhdGEgZXJyb3IgaXMgZW5jb3VudGVyZWQuXG4gICBXaGVuIGxhcmdlIGVub3VnaCBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgYXJlIHN1cHBsaWVkIHRvIGluZmxhdGUoKSwgZm9yXG4gICBleGFtcGxlLCBhIDE2SyBpbnB1dCBidWZmZXIgYW5kIGEgNjRLIG91dHB1dCBidWZmZXIsIG1vcmUgdGhhbiA5NSUgb2YgdGhlXG4gICBpbmZsYXRlIGV4ZWN1dGlvbiB0aW1lIGlzIHNwZW50IGluIHRoaXMgcm91dGluZS5cblxuICAgRW50cnkgYXNzdW1wdGlvbnM6XG5cbiAgICAgICAgc3RhdGUubW9kZSA9PT0gTEVOXG4gICAgICAgIHN0cm0uYXZhaWxfaW4gPj0gNlxuICAgICAgICBzdHJtLmF2YWlsX291dCA+PSAyNThcbiAgICAgICAgc3RhcnQgPj0gc3RybS5hdmFpbF9vdXRcbiAgICAgICAgc3RhdGUuYml0cyA8IDhcblxuICAgT24gcmV0dXJuLCBzdGF0ZS5tb2RlIGlzIG9uZSBvZjpcblxuICAgICAgICBMRU4gLS0gcmFuIG91dCBvZiBlbm91Z2ggb3V0cHV0IHNwYWNlIG9yIGVub3VnaCBhdmFpbGFibGUgaW5wdXRcbiAgICAgICAgVFlQRSAtLSByZWFjaGVkIGVuZCBvZiBibG9jayBjb2RlLCBpbmZsYXRlKCkgdG8gaW50ZXJwcmV0IG5leHQgYmxvY2tcbiAgICAgICAgQkFEIC0tIGVycm9yIGluIGJsb2NrIGRhdGFcblxuICAgTm90ZXM6XG5cbiAgICAtIFRoZSBtYXhpbXVtIGlucHV0IGJpdHMgdXNlZCBieSBhIGxlbmd0aC9kaXN0YW5jZSBwYWlyIGlzIDE1IGJpdHMgZm9yIHRoZVxuICAgICAgbGVuZ3RoIGNvZGUsIDUgYml0cyBmb3IgdGhlIGxlbmd0aCBleHRyYSwgMTUgYml0cyBmb3IgdGhlIGRpc3RhbmNlIGNvZGUsXG4gICAgICBhbmQgMTMgYml0cyBmb3IgdGhlIGRpc3RhbmNlIGV4dHJhLiAgVGhpcyB0b3RhbHMgNDggYml0cywgb3Igc2l4IGJ5dGVzLlxuICAgICAgVGhlcmVmb3JlIGlmIHN0cm0uYXZhaWxfaW4gPj0gNiwgdGhlbiB0aGVyZSBpcyBlbm91Z2ggaW5wdXQgdG8gYXZvaWRcbiAgICAgIGNoZWNraW5nIGZvciBhdmFpbGFibGUgaW5wdXQgd2hpbGUgZGVjb2RpbmcuXG5cbiAgICAtIFRoZSBtYXhpbXVtIGJ5dGVzIHRoYXQgYSBzaW5nbGUgbGVuZ3RoL2Rpc3RhbmNlIHBhaXIgY2FuIG91dHB1dCBpcyAyNThcbiAgICAgIGJ5dGVzLCB3aGljaCBpcyB0aGUgbWF4aW11bSBsZW5ndGggdGhhdCBjYW4gYmUgY29kZWQuICBpbmZsYXRlX2Zhc3QoKVxuICAgICAgcmVxdWlyZXMgc3RybS5hdmFpbF9vdXQgPj0gMjU4IGZvciBlYWNoIGxvb3AgdG8gYXZvaWQgY2hlY2tpbmcgZm9yXG4gICAgICBvdXRwdXQgc3BhY2UuXG4gKi9cbnZhciBpbmZmYXN0ID0gZnVuY3Rpb24gaW5mbGF0ZV9mYXN0KHN0cm0sIHN0YXJ0KSB7XG4gIGxldCBfaW47ICAgICAgICAgICAgICAgICAgICAvKiBsb2NhbCBzdHJtLmlucHV0ICovXG4gIGxldCBsYXN0OyAgICAgICAgICAgICAgICAgICAvKiBoYXZlIGVub3VnaCBpbnB1dCB3aGlsZSBpbiA8IGxhc3QgKi9cbiAgbGV0IF9vdXQ7ICAgICAgICAgICAgICAgICAgIC8qIGxvY2FsIHN0cm0ub3V0cHV0ICovXG4gIGxldCBiZWc7ICAgICAgICAgICAgICAgICAgICAvKiBpbmZsYXRlKCkncyBpbml0aWFsIHN0cm0ub3V0cHV0ICovXG4gIGxldCBlbmQ7ICAgICAgICAgICAgICAgICAgICAvKiB3aGlsZSBvdXQgPCBlbmQsIGVub3VnaCBzcGFjZSBhdmFpbGFibGUgKi9cbi8vI2lmZGVmIElORkxBVEVfU1RSSUNUXG4gIGxldCBkbWF4OyAgICAgICAgICAgICAgICAgICAvKiBtYXhpbXVtIGRpc3RhbmNlIGZyb20gemxpYiBoZWFkZXIgKi9cbi8vI2VuZGlmXG4gIGxldCB3c2l6ZTsgICAgICAgICAgICAgICAgICAvKiB3aW5kb3cgc2l6ZSBvciB6ZXJvIGlmIG5vdCB1c2luZyB3aW5kb3cgKi9cbiAgbGV0IHdoYXZlOyAgICAgICAgICAgICAgICAgIC8qIHZhbGlkIGJ5dGVzIGluIHRoZSB3aW5kb3cgKi9cbiAgbGV0IHduZXh0OyAgICAgICAgICAgICAgICAgIC8qIHdpbmRvdyB3cml0ZSBpbmRleCAqL1xuICAvLyBVc2UgYHNfd2luZG93YCBpbnN0ZWFkIGB3aW5kb3dgLCBhdm9pZCBjb25mbGljdCB3aXRoIGluc3RydW1lbnRhdGlvbiB0b29sc1xuICBsZXQgc193aW5kb3c7ICAgICAgICAgICAgICAgLyogYWxsb2NhdGVkIHNsaWRpbmcgd2luZG93LCBpZiB3c2l6ZSAhPSAwICovXG4gIGxldCBob2xkOyAgICAgICAgICAgICAgICAgICAvKiBsb2NhbCBzdHJtLmhvbGQgKi9cbiAgbGV0IGJpdHM7ICAgICAgICAgICAgICAgICAgIC8qIGxvY2FsIHN0cm0uYml0cyAqL1xuICBsZXQgbGNvZGU7ICAgICAgICAgICAgICAgICAgLyogbG9jYWwgc3RybS5sZW5jb2RlICovXG4gIGxldCBkY29kZTsgICAgICAgICAgICAgICAgICAvKiBsb2NhbCBzdHJtLmRpc3Rjb2RlICovXG4gIGxldCBsbWFzazsgICAgICAgICAgICAgICAgICAvKiBtYXNrIGZvciBmaXJzdCBsZXZlbCBvZiBsZW5ndGggY29kZXMgKi9cbiAgbGV0IGRtYXNrOyAgICAgICAgICAgICAgICAgIC8qIG1hc2sgZm9yIGZpcnN0IGxldmVsIG9mIGRpc3RhbmNlIGNvZGVzICovXG4gIGxldCBoZXJlOyAgICAgICAgICAgICAgICAgICAvKiByZXRyaWV2ZWQgdGFibGUgZW50cnkgKi9cbiAgbGV0IG9wOyAgICAgICAgICAgICAgICAgICAgIC8qIGNvZGUgYml0cywgb3BlcmF0aW9uLCBleHRyYSBiaXRzLCBvciAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHdpbmRvdyBwb3NpdGlvbiwgd2luZG93IGJ5dGVzIHRvIGNvcHkgKi9cbiAgbGV0IGxlbjsgICAgICAgICAgICAgICAgICAgIC8qIG1hdGNoIGxlbmd0aCwgdW51c2VkIGJ5dGVzICovXG4gIGxldCBkaXN0OyAgICAgICAgICAgICAgICAgICAvKiBtYXRjaCBkaXN0YW5jZSAqL1xuICBsZXQgZnJvbTsgICAgICAgICAgICAgICAgICAgLyogd2hlcmUgdG8gY29weSBtYXRjaCBmcm9tICovXG4gIGxldCBmcm9tX3NvdXJjZTtcblxuXG4gIGxldCBpbnB1dCwgb3V0cHV0OyAvLyBKUyBzcGVjaWZpYywgYmVjYXVzZSB3ZSBoYXZlIG5vIHBvaW50ZXJzXG5cbiAgLyogY29weSBzdGF0ZSB0byBsb2NhbCB2YXJpYWJsZXMgKi9cbiAgY29uc3Qgc3RhdGUgPSBzdHJtLnN0YXRlO1xuICAvL2hlcmUgPSBzdGF0ZS5oZXJlO1xuICBfaW4gPSBzdHJtLm5leHRfaW47XG4gIGlucHV0ID0gc3RybS5pbnB1dDtcbiAgbGFzdCA9IF9pbiArIChzdHJtLmF2YWlsX2luIC0gNSk7XG4gIF9vdXQgPSBzdHJtLm5leHRfb3V0O1xuICBvdXRwdXQgPSBzdHJtLm91dHB1dDtcbiAgYmVnID0gX291dCAtIChzdGFydCAtIHN0cm0uYXZhaWxfb3V0KTtcbiAgZW5kID0gX291dCArIChzdHJtLmF2YWlsX291dCAtIDI1Nyk7XG4vLyNpZmRlZiBJTkZMQVRFX1NUUklDVFxuICBkbWF4ID0gc3RhdGUuZG1heDtcbi8vI2VuZGlmXG4gIHdzaXplID0gc3RhdGUud3NpemU7XG4gIHdoYXZlID0gc3RhdGUud2hhdmU7XG4gIHduZXh0ID0gc3RhdGUud25leHQ7XG4gIHNfd2luZG93ID0gc3RhdGUud2luZG93O1xuICBob2xkID0gc3RhdGUuaG9sZDtcbiAgYml0cyA9IHN0YXRlLmJpdHM7XG4gIGxjb2RlID0gc3RhdGUubGVuY29kZTtcbiAgZGNvZGUgPSBzdGF0ZS5kaXN0Y29kZTtcbiAgbG1hc2sgPSAoMSA8PCBzdGF0ZS5sZW5iaXRzKSAtIDE7XG4gIGRtYXNrID0gKDEgPDwgc3RhdGUuZGlzdGJpdHMpIC0gMTtcblxuXG4gIC8qIGRlY29kZSBsaXRlcmFscyBhbmQgbGVuZ3RoL2Rpc3RhbmNlcyB1bnRpbCBlbmQtb2YtYmxvY2sgb3Igbm90IGVub3VnaFxuICAgICBpbnB1dCBkYXRhIG9yIG91dHB1dCBzcGFjZSAqL1xuXG4gIHRvcDpcbiAgZG8ge1xuICAgIGlmIChiaXRzIDwgMTUpIHtcbiAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7XG4gICAgICBiaXRzICs9IDg7XG4gICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzO1xuICAgICAgYml0cyArPSA4O1xuICAgIH1cblxuICAgIGhlcmUgPSBsY29kZVtob2xkICYgbG1hc2tdO1xuXG4gICAgZG9sZW46XG4gICAgZm9yICg7OykgeyAvLyBHb3RvIGVtdWxhdGlvblxuICAgICAgb3AgPSBoZXJlID4+PiAyNC8qaGVyZS5iaXRzKi87XG4gICAgICBob2xkID4+Pj0gb3A7XG4gICAgICBiaXRzIC09IG9wO1xuICAgICAgb3AgPSAoaGVyZSA+Pj4gMTYpICYgMHhmZi8qaGVyZS5vcCovO1xuICAgICAgaWYgKG9wID09PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaXRlcmFsICovXG4gICAgICAgIC8vVHJhY2V2digoc3RkZXJyLCBoZXJlLnZhbCA+PSAweDIwICYmIGhlcmUudmFsIDwgMHg3ZiA/XG4gICAgICAgIC8vICAgICAgICBcImluZmxhdGU6ICAgICAgICAgbGl0ZXJhbCAnJWMnXFxuXCIgOlxuICAgICAgICAvLyAgICAgICAgXCJpbmZsYXRlOiAgICAgICAgIGxpdGVyYWwgMHglMDJ4XFxuXCIsIGhlcmUudmFsKSk7XG4gICAgICAgIG91dHB1dFtfb3V0KytdID0gaGVyZSAmIDB4ZmZmZi8qaGVyZS52YWwqLztcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKG9wICYgMTYpIHsgICAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggYmFzZSAqL1xuICAgICAgICBsZW4gPSBoZXJlICYgMHhmZmZmLypoZXJlLnZhbCovO1xuICAgICAgICBvcCAmPSAxNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZXh0cmEgYml0cyAqL1xuICAgICAgICBpZiAob3ApIHtcbiAgICAgICAgICBpZiAoYml0cyA8IG9wKSB7XG4gICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzO1xuICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW4gKz0gaG9sZCAmICgoMSA8PCBvcCkgLSAxKTtcbiAgICAgICAgICBob2xkID4+Pj0gb3A7XG4gICAgICAgICAgYml0cyAtPSBvcDtcbiAgICAgICAgfVxuICAgICAgICAvL1RyYWNldnYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICAgIGxlbmd0aCAldVxcblwiLCBsZW4pKTtcbiAgICAgICAgaWYgKGJpdHMgPCAxNSkge1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICB9XG4gICAgICAgIGhlcmUgPSBkY29kZVtob2xkICYgZG1hc2tdO1xuXG4gICAgICAgIGRvZGlzdDpcbiAgICAgICAgZm9yICg7OykgeyAvLyBnb3RvIGVtdWxhdGlvblxuICAgICAgICAgIG9wID0gaGVyZSA+Pj4gMjQvKmhlcmUuYml0cyovO1xuICAgICAgICAgIGhvbGQgPj4+PSBvcDtcbiAgICAgICAgICBiaXRzIC09IG9wO1xuICAgICAgICAgIG9wID0gKGhlcmUgPj4+IDE2KSAmIDB4ZmYvKmhlcmUub3AqLztcblxuICAgICAgICAgIGlmIChvcCAmIDE2KSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc3RhbmNlIGJhc2UgKi9cbiAgICAgICAgICAgIGRpc3QgPSBoZXJlICYgMHhmZmZmLypoZXJlLnZhbCovO1xuICAgICAgICAgICAgb3AgJj0gMTU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZXh0cmEgYml0cyAqL1xuICAgICAgICAgICAgaWYgKGJpdHMgPCBvcCkge1xuICAgICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzO1xuICAgICAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgICAgICAgIGlmIChiaXRzIDwgb3ApIHtcbiAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzO1xuICAgICAgICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlzdCArPSBob2xkICYgKCgxIDw8IG9wKSAtIDEpO1xuLy8jaWZkZWYgSU5GTEFURV9TVFJJQ1RcbiAgICAgICAgICAgIGlmIChkaXN0ID4gZG1heCkge1xuICAgICAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayc7XG4gICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQkMTtcbiAgICAgICAgICAgICAgYnJlYWsgdG9wO1xuICAgICAgICAgICAgfVxuLy8jZW5kaWZcbiAgICAgICAgICAgIGhvbGQgPj4+PSBvcDtcbiAgICAgICAgICAgIGJpdHMgLT0gb3A7XG4gICAgICAgICAgICAvL1RyYWNldnYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICAgIGRpc3RhbmNlICV1XFxuXCIsIGRpc3QpKTtcbiAgICAgICAgICAgIG9wID0gX291dCAtIGJlZzsgICAgICAgICAgICAgICAgLyogbWF4IGRpc3RhbmNlIGluIG91dHB1dCAqL1xuICAgICAgICAgICAgaWYgKGRpc3QgPiBvcCkgeyAgICAgICAgICAgICAgICAvKiBzZWUgaWYgY29weSBmcm9tIHdpbmRvdyAqL1xuICAgICAgICAgICAgICBvcCA9IGRpc3QgLSBvcDsgICAgICAgICAgICAgICAvKiBkaXN0YW5jZSBiYWNrIGluIHdpbmRvdyAqL1xuICAgICAgICAgICAgICBpZiAob3AgPiB3aGF2ZSkge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zYW5lKSB7XG4gICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayc7XG4gICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEJDE7XG4gICAgICAgICAgICAgICAgICBicmVhayB0b3A7XG4gICAgICAgICAgICAgICAgfVxuXG4vLyAoISkgVGhpcyBibG9jayBpcyBkaXNhYmxlZCBpbiB6bGliIGRlZmF1bHRzLFxuLy8gZG9uJ3QgZW5hYmxlIGl0IGZvciBiaW5hcnkgY29tcGF0aWJpbGl0eVxuLy8jaWZkZWYgSU5GTEFURV9BTExPV19JTlZBTElEX0RJU1RBTkNFX1RPT0ZBUl9BUlJSXG4vLyAgICAgICAgICAgICAgICBpZiAobGVuIDw9IG9wIC0gd2hhdmUpIHtcbi8vICAgICAgICAgICAgICAgICAgZG8ge1xuLy8gICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gMDtcbi8vICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1sZW4pO1xuLy8gICAgICAgICAgICAgICAgICBjb250aW51ZSB0b3A7XG4vLyAgICAgICAgICAgICAgICB9XG4vLyAgICAgICAgICAgICAgICBsZW4gLT0gb3AgLSB3aGF2ZTtcbi8vICAgICAgICAgICAgICAgIGRvIHtcbi8vICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSAwO1xuLy8gICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCA+IHdoYXZlKTtcbi8vICAgICAgICAgICAgICAgIGlmIChvcCA9PT0gMCkge1xuLy8gICAgICAgICAgICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7XG4vLyAgICAgICAgICAgICAgICAgIGRvIHtcbi8vICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdO1xuLy8gICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLWxlbik7XG4vLyAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHRvcDtcbi8vICAgICAgICAgICAgICAgIH1cbi8vI2VuZGlmXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZnJvbSA9IDA7IC8vIHdpbmRvdyBpbmRleFxuICAgICAgICAgICAgICBmcm9tX3NvdXJjZSA9IHNfd2luZG93O1xuICAgICAgICAgICAgICBpZiAod25leHQgPT09IDApIHsgICAgICAgICAgIC8qIHZlcnkgY29tbW9uIGNhc2UgKi9cbiAgICAgICAgICAgICAgICBmcm9tICs9IHdzaXplIC0gb3A7XG4gICAgICAgICAgICAgICAgaWYgKG9wIDwgbGVuKSB7ICAgICAgICAgLyogc29tZSBmcm9tIHdpbmRvdyAqL1xuICAgICAgICAgICAgICAgICAgbGVuIC09IG9wO1xuICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IHNfd2luZG93W2Zyb20rK107XG4gICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wKTtcbiAgICAgICAgICAgICAgICAgIGZyb20gPSBfb3V0IC0gZGlzdDsgIC8qIHJlc3QgZnJvbSBvdXRwdXQgKi9cbiAgICAgICAgICAgICAgICAgIGZyb21fc291cmNlID0gb3V0cHV0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIGlmICh3bmV4dCA8IG9wKSB7ICAgICAgLyogd3JhcCBhcm91bmQgd2luZG93ICovXG4gICAgICAgICAgICAgICAgZnJvbSArPSB3c2l6ZSArIHduZXh0IC0gb3A7XG4gICAgICAgICAgICAgICAgb3AgLT0gd25leHQ7XG4gICAgICAgICAgICAgICAgaWYgKG9wIDwgbGVuKSB7ICAgICAgICAgLyogc29tZSBmcm9tIGVuZCBvZiB3aW5kb3cgKi9cbiAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDtcbiAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBzX3dpbmRvd1tmcm9tKytdO1xuICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7XG4gICAgICAgICAgICAgICAgICBmcm9tID0gMDtcbiAgICAgICAgICAgICAgICAgIGlmICh3bmV4dCA8IGxlbikgeyAgLyogc29tZSBmcm9tIHN0YXJ0IG9mIHdpbmRvdyAqL1xuICAgICAgICAgICAgICAgICAgICBvcCA9IHduZXh0O1xuICAgICAgICAgICAgICAgICAgICBsZW4gLT0gb3A7XG4gICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IHNfd2luZG93W2Zyb20rK107XG4gICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3ApO1xuICAgICAgICAgICAgICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7ICAgICAgLyogcmVzdCBmcm9tIG91dHB1dCAqL1xuICAgICAgICAgICAgICAgICAgICBmcm9tX3NvdXJjZSA9IG91dHB1dDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRpZ3VvdXMgaW4gd2luZG93ICovXG4gICAgICAgICAgICAgICAgZnJvbSArPSB3bmV4dCAtIG9wO1xuICAgICAgICAgICAgICAgIGlmIChvcCA8IGxlbikgeyAgICAgICAgIC8qIHNvbWUgZnJvbSB3aW5kb3cgKi9cbiAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDtcbiAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBzX3dpbmRvd1tmcm9tKytdO1xuICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7XG4gICAgICAgICAgICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7ICAvKiByZXN0IGZyb20gb3V0cHV0ICovXG4gICAgICAgICAgICAgICAgICBmcm9tX3NvdXJjZSA9IG91dHB1dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgd2hpbGUgKGxlbiA+IDIpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107XG4gICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBmcm9tX3NvdXJjZVtmcm9tKytdO1xuICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICBsZW4gLT0gMztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAobGVuKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBmcm9tX3NvdXJjZVtmcm9tKytdO1xuICAgICAgICAgICAgICAgIGlmIChsZW4gPiAxKSB7XG4gICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgZnJvbSA9IF9vdXQgLSBkaXN0OyAgICAgICAgICAvKiBjb3B5IGRpcmVjdCBmcm9tIG91dHB1dCAqL1xuICAgICAgICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbWluaW11bSBsZW5ndGggaXMgdGhyZWUgKi9cbiAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdO1xuICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107XG4gICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBvdXRwdXRbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICBsZW4gLT0gMztcbiAgICAgICAgICAgICAgfSB3aGlsZSAobGVuID4gMik7XG4gICAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdO1xuICAgICAgICAgICAgICAgIGlmIChsZW4gPiAxKSB7XG4gICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmICgob3AgJiA2NCkgPT09IDApIHsgICAgICAgICAgLyogMm5kIGxldmVsIGRpc3RhbmNlIGNvZGUgKi9cbiAgICAgICAgICAgIGhlcmUgPSBkY29kZVsoaGVyZSAmIDB4ZmZmZikvKmhlcmUudmFsKi8gKyAoaG9sZCAmICgoMSA8PCBvcCkgLSAxKSldO1xuICAgICAgICAgICAgY29udGludWUgZG9kaXN0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgZGlzdGFuY2UgY29kZSc7XG4gICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEJDE7XG4gICAgICAgICAgICBicmVhayB0b3A7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7IC8vIG5lZWQgdG8gZW11bGF0ZSBnb3RvIHZpYSBcImNvbnRpbnVlXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoKG9wICYgNjQpID09PSAwKSB7ICAgICAgICAgICAgICAvKiAybmQgbGV2ZWwgbGVuZ3RoIGNvZGUgKi9cbiAgICAgICAgaGVyZSA9IGxjb2RlWyhoZXJlICYgMHhmZmZmKS8qaGVyZS52YWwqLyArIChob2xkICYgKCgxIDw8IG9wKSAtIDEpKV07XG4gICAgICAgIGNvbnRpbnVlIGRvbGVuO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAob3AgJiAzMikgeyAgICAgICAgICAgICAgICAgICAgIC8qIGVuZC1vZi1ibG9jayAqL1xuICAgICAgICAvL1RyYWNldnYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICAgIGVuZCBvZiBibG9ja1xcblwiKSk7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFJDE7XG4gICAgICAgIGJyZWFrIHRvcDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUnO1xuICAgICAgICBzdGF0ZS5tb2RlID0gQkFEJDE7XG4gICAgICAgIGJyZWFrIHRvcDtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7IC8vIG5lZWQgdG8gZW11bGF0ZSBnb3RvIHZpYSBcImNvbnRpbnVlXCJcbiAgICB9XG4gIH0gd2hpbGUgKF9pbiA8IGxhc3QgJiYgX291dCA8IGVuZCk7XG5cbiAgLyogcmV0dXJuIHVudXNlZCBieXRlcyAob24gZW50cnksIGJpdHMgPCA4LCBzbyBpbiB3b24ndCBnbyB0b28gZmFyIGJhY2spICovXG4gIGxlbiA9IGJpdHMgPj4gMztcbiAgX2luIC09IGxlbjtcbiAgYml0cyAtPSBsZW4gPDwgMztcbiAgaG9sZCAmPSAoMSA8PCBiaXRzKSAtIDE7XG5cbiAgLyogdXBkYXRlIHN0YXRlIGFuZCByZXR1cm4gKi9cbiAgc3RybS5uZXh0X2luID0gX2luO1xuICBzdHJtLm5leHRfb3V0ID0gX291dDtcbiAgc3RybS5hdmFpbF9pbiA9IChfaW4gPCBsYXN0ID8gNSArIChsYXN0IC0gX2luKSA6IDUgLSAoX2luIC0gbGFzdCkpO1xuICBzdHJtLmF2YWlsX291dCA9IChfb3V0IDwgZW5kID8gMjU3ICsgKGVuZCAtIF9vdXQpIDogMjU3IC0gKF9vdXQgLSBlbmQpKTtcbiAgc3RhdGUuaG9sZCA9IGhvbGQ7XG4gIHN0YXRlLmJpdHMgPSBiaXRzO1xuICByZXR1cm47XG59O1xuXG4vLyAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXJcbi8vIChDKSAyMDE0LTIwMTcgVml0YWx5IFB1enJpbiBhbmQgQW5kcmV5IFR1cGl0c2luXG4vL1xuLy8gVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWRcbi8vIHdhcnJhbnR5LiBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlc1xuLy8gYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSxcbi8vIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXRcbi8vIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcbi8vXG4vLyAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdFxuLy8gICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZVxuLy8gICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmVcbi8vICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC5cbi8vIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlXG4vLyAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS5cbi8vIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uXG5cbmNvbnN0IE1BWEJJVFMgPSAxNTtcbmNvbnN0IEVOT1VHSF9MRU5TJDEgPSA4NTI7XG5jb25zdCBFTk9VR0hfRElTVFMkMSA9IDU5Mjtcbi8vY29uc3QgRU5PVUdIID0gKEVOT1VHSF9MRU5TK0VOT1VHSF9ESVNUUyk7XG5cbmNvbnN0IENPREVTJDEgPSAwO1xuY29uc3QgTEVOUyQxID0gMTtcbmNvbnN0IERJU1RTJDEgPSAyO1xuXG5jb25zdCBsYmFzZSA9IG5ldyBVaW50MTZBcnJheShbIC8qIExlbmd0aCBjb2RlcyAyNTcuLjI4NSBiYXNlICovXG4gIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTMsIDE1LCAxNywgMTksIDIzLCAyNywgMzEsXG4gIDM1LCA0MywgNTEsIDU5LCA2NywgODMsIDk5LCAxMTUsIDEzMSwgMTYzLCAxOTUsIDIyNywgMjU4LCAwLCAwXG5dKTtcblxuY29uc3QgbGV4dCA9IG5ldyBVaW50OEFycmF5KFsgLyogTGVuZ3RoIGNvZGVzIDI1Ny4uMjg1IGV4dHJhICovXG4gIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTcsIDE3LCAxNywgMTcsIDE4LCAxOCwgMTgsIDE4LFxuICAxOSwgMTksIDE5LCAxOSwgMjAsIDIwLCAyMCwgMjAsIDIxLCAyMSwgMjEsIDIxLCAxNiwgMTk5LCA3NVxuXSk7XG5cbmNvbnN0IGRiYXNlID0gbmV3IFVpbnQxNkFycmF5KFsgLyogRGlzdGFuY2UgY29kZXMgMC4uMjkgYmFzZSAqL1xuICAxLCAyLCAzLCA0LCA1LCA3LCA5LCAxMywgMTcsIDI1LCAzMywgNDksIDY1LCA5NywgMTI5LCAxOTMsXG4gIDI1NywgMzg1LCA1MTMsIDc2OSwgMTAyNSwgMTUzNywgMjA0OSwgMzA3MywgNDA5NywgNjE0NSxcbiAgODE5MywgMTIyODksIDE2Mzg1LCAyNDU3NywgMCwgMFxuXSk7XG5cbmNvbnN0IGRleHQgPSBuZXcgVWludDhBcnJheShbIC8qIERpc3RhbmNlIGNvZGVzIDAuLjI5IGV4dHJhICovXG4gIDE2LCAxNiwgMTYsIDE2LCAxNywgMTcsIDE4LCAxOCwgMTksIDE5LCAyMCwgMjAsIDIxLCAyMSwgMjIsIDIyLFxuICAyMywgMjMsIDI0LCAyNCwgMjUsIDI1LCAyNiwgMjYsIDI3LCAyNyxcbiAgMjgsIDI4LCAyOSwgMjksIDY0LCA2NFxuXSk7XG5cbmNvbnN0IGluZmxhdGVfdGFibGUgPSAodHlwZSwgbGVucywgbGVuc19pbmRleCwgY29kZXMsIHRhYmxlLCB0YWJsZV9pbmRleCwgd29yaywgb3B0cykgPT5cbntcbiAgY29uc3QgYml0cyA9IG9wdHMuYml0cztcbiAgICAgIC8vaGVyZSA9IG9wdHMuaGVyZTsgLyogdGFibGUgZW50cnkgZm9yIGR1cGxpY2F0aW9uICovXG5cbiAgbGV0IGxlbiA9IDA7ICAgICAgICAgICAgICAgLyogYSBjb2RlJ3MgbGVuZ3RoIGluIGJpdHMgKi9cbiAgbGV0IHN5bSA9IDA7ICAgICAgICAgICAgICAgLyogaW5kZXggb2YgY29kZSBzeW1ib2xzICovXG4gIGxldCBtaW4gPSAwLCBtYXggPSAwOyAgICAgICAgICAvKiBtaW5pbXVtIGFuZCBtYXhpbXVtIGNvZGUgbGVuZ3RocyAqL1xuICBsZXQgcm9vdCA9IDA7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgaW5kZXggYml0cyBmb3Igcm9vdCB0YWJsZSAqL1xuICBsZXQgY3VyciA9IDA7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgaW5kZXggYml0cyBmb3IgY3VycmVudCB0YWJsZSAqL1xuICBsZXQgZHJvcCA9IDA7ICAgICAgICAgICAgICAvKiBjb2RlIGJpdHMgdG8gZHJvcCBmb3Igc3ViLXRhYmxlICovXG4gIGxldCBsZWZ0ID0gMDsgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHByZWZpeCBjb2RlcyBhdmFpbGFibGUgKi9cbiAgbGV0IHVzZWQgPSAwOyAgICAgICAgICAgICAgLyogY29kZSBlbnRyaWVzIGluIHRhYmxlIHVzZWQgKi9cbiAgbGV0IGh1ZmYgPSAwOyAgICAgICAgICAgICAgLyogSHVmZm1hbiBjb2RlICovXG4gIGxldCBpbmNyOyAgICAgICAgICAgICAgLyogZm9yIGluY3JlbWVudGluZyBjb2RlLCBpbmRleCAqL1xuICBsZXQgZmlsbDsgICAgICAgICAgICAgIC8qIGluZGV4IGZvciByZXBsaWNhdGluZyBlbnRyaWVzICovXG4gIGxldCBsb3c7ICAgICAgICAgICAgICAgLyogbG93IGJpdHMgZm9yIGN1cnJlbnQgcm9vdCBlbnRyeSAqL1xuICBsZXQgbWFzazsgICAgICAgICAgICAgIC8qIG1hc2sgZm9yIGxvdyByb290IGJpdHMgKi9cbiAgbGV0IG5leHQ7ICAgICAgICAgICAgIC8qIG5leHQgYXZhaWxhYmxlIHNwYWNlIGluIHRhYmxlICovXG4gIGxldCBiYXNlID0gbnVsbDsgICAgIC8qIGJhc2UgdmFsdWUgdGFibGUgdG8gdXNlICovXG4vLyAgbGV0IHNob2V4dHJhOyAgICAvKiBleHRyYSBiaXRzIHRhYmxlIHRvIHVzZSAqL1xuICBsZXQgbWF0Y2g7ICAgICAgICAgICAgICAgICAgLyogdXNlIGJhc2UgYW5kIGV4dHJhIGZvciBzeW1ib2wgPj0gbWF0Y2ggKi9cbiAgY29uc3QgY291bnQgPSBuZXcgVWludDE2QXJyYXkoTUFYQklUUyArIDEpOyAvL1tNQVhCSVRTKzFdOyAgICAvKiBudW1iZXIgb2YgY29kZXMgb2YgZWFjaCBsZW5ndGggKi9cbiAgY29uc3Qgb2ZmcyA9IG5ldyBVaW50MTZBcnJheShNQVhCSVRTICsgMSk7IC8vW01BWEJJVFMrMV07ICAgICAvKiBvZmZzZXRzIGluIHRhYmxlIGZvciBlYWNoIGxlbmd0aCAqL1xuICBsZXQgZXh0cmEgPSBudWxsO1xuXG4gIGxldCBoZXJlX2JpdHMsIGhlcmVfb3AsIGhlcmVfdmFsO1xuXG4gIC8qXG4gICBQcm9jZXNzIGEgc2V0IG9mIGNvZGUgbGVuZ3RocyB0byBjcmVhdGUgYSBjYW5vbmljYWwgSHVmZm1hbiBjb2RlLiAgVGhlXG4gICBjb2RlIGxlbmd0aHMgYXJlIGxlbnNbMC4uY29kZXMtMV0uICBFYWNoIGxlbmd0aCBjb3JyZXNwb25kcyB0byB0aGVcbiAgIHN5bWJvbHMgMC4uY29kZXMtMS4gIFRoZSBIdWZmbWFuIGNvZGUgaXMgZ2VuZXJhdGVkIGJ5IGZpcnN0IHNvcnRpbmcgdGhlXG4gICBzeW1ib2xzIGJ5IGxlbmd0aCBmcm9tIHNob3J0IHRvIGxvbmcsIGFuZCByZXRhaW5pbmcgdGhlIHN5bWJvbCBvcmRlclxuICAgZm9yIGNvZGVzIHdpdGggZXF1YWwgbGVuZ3Rocy4gIFRoZW4gdGhlIGNvZGUgc3RhcnRzIHdpdGggYWxsIHplcm8gYml0c1xuICAgZm9yIHRoZSBmaXJzdCBjb2RlIG9mIHRoZSBzaG9ydGVzdCBsZW5ndGgsIGFuZCB0aGUgY29kZXMgYXJlIGludGVnZXJcbiAgIGluY3JlbWVudHMgZm9yIHRoZSBzYW1lIGxlbmd0aCwgYW5kIHplcm9zIGFyZSBhcHBlbmRlZCBhcyB0aGUgbGVuZ3RoXG4gICBpbmNyZWFzZXMuICBGb3IgdGhlIGRlZmxhdGUgZm9ybWF0LCB0aGVzZSBiaXRzIGFyZSBzdG9yZWQgYmFja3dhcmRzXG4gICBmcm9tIHRoZWlyIG1vcmUgbmF0dXJhbCBpbnRlZ2VyIGluY3JlbWVudCBvcmRlcmluZywgYW5kIHNvIHdoZW4gdGhlXG4gICBkZWNvZGluZyB0YWJsZXMgYXJlIGJ1aWx0IGluIHRoZSBsYXJnZSBsb29wIGJlbG93LCB0aGUgaW50ZWdlciBjb2Rlc1xuICAgYXJlIGluY3JlbWVudGVkIGJhY2t3YXJkcy5cblxuICAgVGhpcyByb3V0aW5lIGFzc3VtZXMsIGJ1dCBkb2VzIG5vdCBjaGVjaywgdGhhdCBhbGwgb2YgdGhlIGVudHJpZXMgaW5cbiAgIGxlbnNbXSBhcmUgaW4gdGhlIHJhbmdlIDAuLk1BWEJJVFMuICBUaGUgY2FsbGVyIG11c3QgYXNzdXJlIHRoaXMuXG4gICAxLi5NQVhCSVRTIGlzIGludGVycHJldGVkIGFzIHRoYXQgY29kZSBsZW5ndGguICB6ZXJvIG1lYW5zIHRoYXQgdGhhdFxuICAgc3ltYm9sIGRvZXMgbm90IG9jY3VyIGluIHRoaXMgY29kZS5cblxuICAgVGhlIGNvZGVzIGFyZSBzb3J0ZWQgYnkgY29tcHV0aW5nIGEgY291bnQgb2YgY29kZXMgZm9yIGVhY2ggbGVuZ3RoLFxuICAgY3JlYXRpbmcgZnJvbSB0aGF0IGEgdGFibGUgb2Ygc3RhcnRpbmcgaW5kaWNlcyBmb3IgZWFjaCBsZW5ndGggaW4gdGhlXG4gICBzb3J0ZWQgdGFibGUsIGFuZCB0aGVuIGVudGVyaW5nIHRoZSBzeW1ib2xzIGluIG9yZGVyIGluIHRoZSBzb3J0ZWRcbiAgIHRhYmxlLiAgVGhlIHNvcnRlZCB0YWJsZSBpcyB3b3JrW10sIHdpdGggdGhhdCBzcGFjZSBiZWluZyBwcm92aWRlZCBieVxuICAgdGhlIGNhbGxlci5cblxuICAgVGhlIGxlbmd0aCBjb3VudHMgYXJlIHVzZWQgZm9yIG90aGVyIHB1cnBvc2VzIGFzIHdlbGwsIGkuZS4gZmluZGluZ1xuICAgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gbGVuZ3RoIGNvZGVzLCBkZXRlcm1pbmluZyBpZiB0aGVyZSBhcmUgYW55XG4gICBjb2RlcyBhdCBhbGwsIGNoZWNraW5nIGZvciBhIHZhbGlkIHNldCBvZiBsZW5ndGhzLCBhbmQgbG9va2luZyBhaGVhZFxuICAgYXQgbGVuZ3RoIGNvdW50cyB0byBkZXRlcm1pbmUgc3ViLXRhYmxlIHNpemVzIHdoZW4gYnVpbGRpbmcgdGhlXG4gICBkZWNvZGluZyB0YWJsZXMuXG4gICAqL1xuXG4gIC8qIGFjY3VtdWxhdGUgbGVuZ3RocyBmb3IgY29kZXMgKGFzc3VtZXMgbGVuc1tdIGFsbCBpbiAwLi5NQVhCSVRTKSAqL1xuICBmb3IgKGxlbiA9IDA7IGxlbiA8PSBNQVhCSVRTOyBsZW4rKykge1xuICAgIGNvdW50W2xlbl0gPSAwO1xuICB9XG4gIGZvciAoc3ltID0gMDsgc3ltIDwgY29kZXM7IHN5bSsrKSB7XG4gICAgY291bnRbbGVuc1tsZW5zX2luZGV4ICsgc3ltXV0rKztcbiAgfVxuXG4gIC8qIGJvdW5kIGNvZGUgbGVuZ3RocywgZm9yY2Ugcm9vdCB0byBiZSB3aXRoaW4gY29kZSBsZW5ndGhzICovXG4gIHJvb3QgPSBiaXRzO1xuICBmb3IgKG1heCA9IE1BWEJJVFM7IG1heCA+PSAxOyBtYXgtLSkge1xuICAgIGlmIChjb3VudFttYXhdICE9PSAwKSB7IGJyZWFrOyB9XG4gIH1cbiAgaWYgKHJvb3QgPiBtYXgpIHtcbiAgICByb290ID0gbWF4O1xuICB9XG4gIGlmIChtYXggPT09IDApIHsgICAgICAgICAgICAgICAgICAgICAvKiBubyBzeW1ib2xzIHRvIGNvZGUgYXQgYWxsICovXG4gICAgLy90YWJsZS5vcFtvcHRzLnRhYmxlX2luZGV4XSA9IDY0OyAgLy9oZXJlLm9wID0gKHZhciBjaGFyKTY0OyAgICAvKiBpbnZhbGlkIGNvZGUgbWFya2VyICovXG4gICAgLy90YWJsZS5iaXRzW29wdHMudGFibGVfaW5kZXhdID0gMTsgICAvL2hlcmUuYml0cyA9ICh2YXIgY2hhcikxO1xuICAgIC8vdGFibGUudmFsW29wdHMudGFibGVfaW5kZXgrK10gPSAwOyAgIC8vaGVyZS52YWwgPSAodmFyIHNob3J0KTA7XG4gICAgdGFibGVbdGFibGVfaW5kZXgrK10gPSAoMSA8PCAyNCkgfCAoNjQgPDwgMTYpIHwgMDtcblxuXG4gICAgLy90YWJsZS5vcFtvcHRzLnRhYmxlX2luZGV4XSA9IDY0O1xuICAgIC8vdGFibGUuYml0c1tvcHRzLnRhYmxlX2luZGV4XSA9IDE7XG4gICAgLy90YWJsZS52YWxbb3B0cy50YWJsZV9pbmRleCsrXSA9IDA7XG4gICAgdGFibGVbdGFibGVfaW5kZXgrK10gPSAoMSA8PCAyNCkgfCAoNjQgPDwgMTYpIHwgMDtcblxuICAgIG9wdHMuYml0cyA9IDE7XG4gICAgcmV0dXJuIDA7ICAgICAvKiBubyBzeW1ib2xzLCBidXQgd2FpdCBmb3IgZGVjb2RpbmcgdG8gcmVwb3J0IGVycm9yICovXG4gIH1cbiAgZm9yIChtaW4gPSAxOyBtaW4gPCBtYXg7IG1pbisrKSB7XG4gICAgaWYgKGNvdW50W21pbl0gIT09IDApIHsgYnJlYWs7IH1cbiAgfVxuICBpZiAocm9vdCA8IG1pbikge1xuICAgIHJvb3QgPSBtaW47XG4gIH1cblxuICAvKiBjaGVjayBmb3IgYW4gb3Zlci1zdWJzY3JpYmVkIG9yIGluY29tcGxldGUgc2V0IG9mIGxlbmd0aHMgKi9cbiAgbGVmdCA9IDE7XG4gIGZvciAobGVuID0gMTsgbGVuIDw9IE1BWEJJVFM7IGxlbisrKSB7XG4gICAgbGVmdCA8PD0gMTtcbiAgICBsZWZ0IC09IGNvdW50W2xlbl07XG4gICAgaWYgKGxlZnQgPCAwKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfSAgICAgICAgLyogb3Zlci1zdWJzY3JpYmVkICovXG4gIH1cbiAgaWYgKGxlZnQgPiAwICYmICh0eXBlID09PSBDT0RFUyQxIHx8IG1heCAhPT0gMSkpIHtcbiAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAgICAgICAgIC8qIGluY29tcGxldGUgc2V0ICovXG4gIH1cblxuICAvKiBnZW5lcmF0ZSBvZmZzZXRzIGludG8gc3ltYm9sIHRhYmxlIGZvciBlYWNoIGxlbmd0aCBmb3Igc29ydGluZyAqL1xuICBvZmZzWzFdID0gMDtcbiAgZm9yIChsZW4gPSAxOyBsZW4gPCBNQVhCSVRTOyBsZW4rKykge1xuICAgIG9mZnNbbGVuICsgMV0gPSBvZmZzW2xlbl0gKyBjb3VudFtsZW5dO1xuICB9XG5cbiAgLyogc29ydCBzeW1ib2xzIGJ5IGxlbmd0aCwgYnkgc3ltYm9sIG9yZGVyIHdpdGhpbiBlYWNoIGxlbmd0aCAqL1xuICBmb3IgKHN5bSA9IDA7IHN5bSA8IGNvZGVzOyBzeW0rKykge1xuICAgIGlmIChsZW5zW2xlbnNfaW5kZXggKyBzeW1dICE9PSAwKSB7XG4gICAgICB3b3JrW29mZnNbbGVuc1tsZW5zX2luZGV4ICsgc3ltXV0rK10gPSBzeW07XG4gICAgfVxuICB9XG5cbiAgLypcbiAgIENyZWF0ZSBhbmQgZmlsbCBpbiBkZWNvZGluZyB0YWJsZXMuICBJbiB0aGlzIGxvb3AsIHRoZSB0YWJsZSBiZWluZ1xuICAgZmlsbGVkIGlzIGF0IG5leHQgYW5kIGhhcyBjdXJyIGluZGV4IGJpdHMuICBUaGUgY29kZSBiZWluZyB1c2VkIGlzIGh1ZmZcbiAgIHdpdGggbGVuZ3RoIGxlbi4gIFRoYXQgY29kZSBpcyBjb252ZXJ0ZWQgdG8gYW4gaW5kZXggYnkgZHJvcHBpbmcgZHJvcFxuICAgYml0cyBvZmYgb2YgdGhlIGJvdHRvbS4gIEZvciBjb2RlcyB3aGVyZSBsZW4gaXMgbGVzcyB0aGFuIGRyb3AgKyBjdXJyLFxuICAgdGhvc2UgdG9wIGRyb3AgKyBjdXJyIC0gbGVuIGJpdHMgYXJlIGluY3JlbWVudGVkIHRocm91Z2ggYWxsIHZhbHVlcyB0b1xuICAgZmlsbCB0aGUgdGFibGUgd2l0aCByZXBsaWNhdGVkIGVudHJpZXMuXG5cbiAgIHJvb3QgaXMgdGhlIG51bWJlciBvZiBpbmRleCBiaXRzIGZvciB0aGUgcm9vdCB0YWJsZS4gIFdoZW4gbGVuIGV4Y2VlZHNcbiAgIHJvb3QsIHN1Yi10YWJsZXMgYXJlIGNyZWF0ZWQgcG9pbnRlZCB0byBieSB0aGUgcm9vdCBlbnRyeSB3aXRoIGFuIGluZGV4XG4gICBvZiB0aGUgbG93IHJvb3QgYml0cyBvZiBodWZmLiAgVGhpcyBpcyBzYXZlZCBpbiBsb3cgdG8gY2hlY2sgZm9yIHdoZW4gYVxuICAgbmV3IHN1Yi10YWJsZSBzaG91bGQgYmUgc3RhcnRlZC4gIGRyb3AgaXMgemVybyB3aGVuIHRoZSByb290IHRhYmxlIGlzXG4gICBiZWluZyBmaWxsZWQsIGFuZCBkcm9wIGlzIHJvb3Qgd2hlbiBzdWItdGFibGVzIGFyZSBiZWluZyBmaWxsZWQuXG5cbiAgIFdoZW4gYSBuZXcgc3ViLXRhYmxlIGlzIG5lZWRlZCwgaXQgaXMgbmVjZXNzYXJ5IHRvIGxvb2sgYWhlYWQgaW4gdGhlXG4gICBjb2RlIGxlbmd0aHMgdG8gZGV0ZXJtaW5lIHdoYXQgc2l6ZSBzdWItdGFibGUgaXMgbmVlZGVkLiAgVGhlIGxlbmd0aFxuICAgY291bnRzIGFyZSB1c2VkIGZvciB0aGlzLCBhbmQgc28gY291bnRbXSBpcyBkZWNyZW1lbnRlZCBhcyBjb2RlcyBhcmVcbiAgIGVudGVyZWQgaW4gdGhlIHRhYmxlcy5cblxuICAgdXNlZCBrZWVwcyB0cmFjayBvZiBob3cgbWFueSB0YWJsZSBlbnRyaWVzIGhhdmUgYmVlbiBhbGxvY2F0ZWQgZnJvbSB0aGVcbiAgIHByb3ZpZGVkICp0YWJsZSBzcGFjZS4gIEl0IGlzIGNoZWNrZWQgZm9yIExFTlMgYW5kIERJU1QgdGFibGVzIGFnYWluc3RcbiAgIHRoZSBjb25zdGFudHMgRU5PVUdIX0xFTlMgYW5kIEVOT1VHSF9ESVNUUyB0byBndWFyZCBhZ2FpbnN0IGNoYW5nZXMgaW5cbiAgIHRoZSBpbml0aWFsIHJvb3QgdGFibGUgc2l6ZSBjb25zdGFudHMuICBTZWUgdGhlIGNvbW1lbnRzIGluIGluZnRyZWVzLmhcbiAgIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuXG4gICBzeW0gaW5jcmVtZW50cyB0aHJvdWdoIGFsbCBzeW1ib2xzLCBhbmQgdGhlIGxvb3AgdGVybWluYXRlcyB3aGVuXG4gICBhbGwgY29kZXMgb2YgbGVuZ3RoIG1heCwgaS5lLiBhbGwgY29kZXMsIGhhdmUgYmVlbiBwcm9jZXNzZWQuICBUaGlzXG4gICByb3V0aW5lIHBlcm1pdHMgaW5jb21wbGV0ZSBjb2Rlcywgc28gYW5vdGhlciBsb29wIGFmdGVyIHRoaXMgb25lIGZpbGxzXG4gICBpbiB0aGUgcmVzdCBvZiB0aGUgZGVjb2RpbmcgdGFibGVzIHdpdGggaW52YWxpZCBjb2RlIG1hcmtlcnMuXG4gICAqL1xuXG4gIC8qIHNldCB1cCBmb3IgY29kZSB0eXBlICovXG4gIC8vIHBvb3IgbWFuIG9wdGltaXphdGlvbiAtIHVzZSBpZi1lbHNlIGluc3RlYWQgb2Ygc3dpdGNoLFxuICAvLyB0byBhdm9pZCBkZW9wdHMgaW4gb2xkIHY4XG4gIGlmICh0eXBlID09PSBDT0RFUyQxKSB7XG4gICAgYmFzZSA9IGV4dHJhID0gd29yazsgICAgLyogZHVtbXkgdmFsdWUtLW5vdCB1c2VkICovXG4gICAgbWF0Y2ggPSAyMDtcblxuICB9IGVsc2UgaWYgKHR5cGUgPT09IExFTlMkMSkge1xuICAgIGJhc2UgPSBsYmFzZTtcbiAgICBleHRyYSA9IGxleHQ7XG4gICAgbWF0Y2ggPSAyNTc7XG5cbiAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIERJU1RTICovXG4gICAgYmFzZSA9IGRiYXNlO1xuICAgIGV4dHJhID0gZGV4dDtcbiAgICBtYXRjaCA9IDA7XG4gIH1cblxuICAvKiBpbml0aWFsaXplIG9wdHMgZm9yIGxvb3AgKi9cbiAgaHVmZiA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0aW5nIGNvZGUgKi9cbiAgc3ltID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0aW5nIGNvZGUgc3ltYm9sICovXG4gIGxlbiA9IG1pbjsgICAgICAgICAgICAgICAgICAvKiBzdGFydGluZyBjb2RlIGxlbmd0aCAqL1xuICBuZXh0ID0gdGFibGVfaW5kZXg7ICAgICAgICAgICAgICAvKiBjdXJyZW50IHRhYmxlIHRvIGZpbGwgaW4gKi9cbiAgY3VyciA9IHJvb3Q7ICAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgdGFibGUgaW5kZXggYml0cyAqL1xuICBkcm9wID0gMDsgICAgICAgICAgICAgICAgICAgLyogY3VycmVudCBiaXRzIHRvIGRyb3AgZnJvbSBjb2RlIGZvciBpbmRleCAqL1xuICBsb3cgPSAtMTsgICAgICAgICAgICAgICAgICAgLyogdHJpZ2dlciBuZXcgc3ViLXRhYmxlIHdoZW4gbGVuID4gcm9vdCAqL1xuICB1c2VkID0gMSA8PCByb290OyAgICAgICAgICAvKiB1c2Ugcm9vdCB0YWJsZSBlbnRyaWVzICovXG4gIG1hc2sgPSB1c2VkIC0gMTsgICAgICAgICAgICAvKiBtYXNrIGZvciBjb21wYXJpbmcgbG93ICovXG5cbiAgLyogY2hlY2sgYXZhaWxhYmxlIHRhYmxlIHNwYWNlICovXG4gIGlmICgodHlwZSA9PT0gTEVOUyQxICYmIHVzZWQgPiBFTk9VR0hfTEVOUyQxKSB8fFxuICAgICh0eXBlID09PSBESVNUUyQxICYmIHVzZWQgPiBFTk9VR0hfRElTVFMkMSkpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIC8qIHByb2Nlc3MgYWxsIGNvZGVzIGFuZCBtYWtlIHRhYmxlIGVudHJpZXMgKi9cbiAgZm9yICg7Oykge1xuICAgIC8qIGNyZWF0ZSB0YWJsZSBlbnRyeSAqL1xuICAgIGhlcmVfYml0cyA9IGxlbiAtIGRyb3A7XG4gICAgaWYgKHdvcmtbc3ltXSArIDEgPCBtYXRjaCkge1xuICAgICAgaGVyZV9vcCA9IDA7XG4gICAgICBoZXJlX3ZhbCA9IHdvcmtbc3ltXTtcbiAgICB9XG4gICAgZWxzZSBpZiAod29ya1tzeW1dID49IG1hdGNoKSB7XG4gICAgICBoZXJlX29wID0gZXh0cmFbd29ya1tzeW1dIC0gbWF0Y2hdO1xuICAgICAgaGVyZV92YWwgPSBiYXNlW3dvcmtbc3ltXSAtIG1hdGNoXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBoZXJlX29wID0gMzIgKyA2NDsgICAgICAgICAvKiBlbmQgb2YgYmxvY2sgKi9cbiAgICAgIGhlcmVfdmFsID0gMDtcbiAgICB9XG5cbiAgICAvKiByZXBsaWNhdGUgZm9yIHRob3NlIGluZGljZXMgd2l0aCBsb3cgbGVuIGJpdHMgZXF1YWwgdG8gaHVmZiAqL1xuICAgIGluY3IgPSAxIDw8IChsZW4gLSBkcm9wKTtcbiAgICBmaWxsID0gMSA8PCBjdXJyO1xuICAgIG1pbiA9IGZpbGw7ICAgICAgICAgICAgICAgICAvKiBzYXZlIG9mZnNldCB0byBuZXh0IHRhYmxlICovXG4gICAgZG8ge1xuICAgICAgZmlsbCAtPSBpbmNyO1xuICAgICAgdGFibGVbbmV4dCArIChodWZmID4+IGRyb3ApICsgZmlsbF0gPSAoaGVyZV9iaXRzIDw8IDI0KSB8IChoZXJlX29wIDw8IDE2KSB8IGhlcmVfdmFsIHwwO1xuICAgIH0gd2hpbGUgKGZpbGwgIT09IDApO1xuXG4gICAgLyogYmFja3dhcmRzIGluY3JlbWVudCB0aGUgbGVuLWJpdCBjb2RlIGh1ZmYgKi9cbiAgICBpbmNyID0gMSA8PCAobGVuIC0gMSk7XG4gICAgd2hpbGUgKGh1ZmYgJiBpbmNyKSB7XG4gICAgICBpbmNyID4+PSAxO1xuICAgIH1cbiAgICBpZiAoaW5jciAhPT0gMCkge1xuICAgICAgaHVmZiAmPSBpbmNyIC0gMTtcbiAgICAgIGh1ZmYgKz0gaW5jcjtcbiAgICB9IGVsc2Uge1xuICAgICAgaHVmZiA9IDA7XG4gICAgfVxuXG4gICAgLyogZ28gdG8gbmV4dCBzeW1ib2wsIHVwZGF0ZSBjb3VudCwgbGVuICovXG4gICAgc3ltKys7XG4gICAgaWYgKC0tY291bnRbbGVuXSA9PT0gMCkge1xuICAgICAgaWYgKGxlbiA9PT0gbWF4KSB7IGJyZWFrOyB9XG4gICAgICBsZW4gPSBsZW5zW2xlbnNfaW5kZXggKyB3b3JrW3N5bV1dO1xuICAgIH1cblxuICAgIC8qIGNyZWF0ZSBuZXcgc3ViLXRhYmxlIGlmIG5lZWRlZCAqL1xuICAgIGlmIChsZW4gPiByb290ICYmIChodWZmICYgbWFzaykgIT09IGxvdykge1xuICAgICAgLyogaWYgZmlyc3QgdGltZSwgdHJhbnNpdGlvbiB0byBzdWItdGFibGVzICovXG4gICAgICBpZiAoZHJvcCA9PT0gMCkge1xuICAgICAgICBkcm9wID0gcm9vdDtcbiAgICAgIH1cblxuICAgICAgLyogaW5jcmVtZW50IHBhc3QgbGFzdCB0YWJsZSAqL1xuICAgICAgbmV4dCArPSBtaW47ICAgICAgICAgICAgLyogaGVyZSBtaW4gaXMgMSA8PCBjdXJyICovXG5cbiAgICAgIC8qIGRldGVybWluZSBsZW5ndGggb2YgbmV4dCB0YWJsZSAqL1xuICAgICAgY3VyciA9IGxlbiAtIGRyb3A7XG4gICAgICBsZWZ0ID0gMSA8PCBjdXJyO1xuICAgICAgd2hpbGUgKGN1cnIgKyBkcm9wIDwgbWF4KSB7XG4gICAgICAgIGxlZnQgLT0gY291bnRbY3VyciArIGRyb3BdO1xuICAgICAgICBpZiAobGVmdCA8PSAwKSB7IGJyZWFrOyB9XG4gICAgICAgIGN1cnIrKztcbiAgICAgICAgbGVmdCA8PD0gMTtcbiAgICAgIH1cblxuICAgICAgLyogY2hlY2sgZm9yIGVub3VnaCBzcGFjZSAqL1xuICAgICAgdXNlZCArPSAxIDw8IGN1cnI7XG4gICAgICBpZiAoKHR5cGUgPT09IExFTlMkMSAmJiB1c2VkID4gRU5PVUdIX0xFTlMkMSkgfHxcbiAgICAgICAgKHR5cGUgPT09IERJU1RTJDEgJiYgdXNlZCA+IEVOT1VHSF9ESVNUUyQxKSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cblxuICAgICAgLyogcG9pbnQgZW50cnkgaW4gcm9vdCB0YWJsZSB0byBzdWItdGFibGUgKi9cbiAgICAgIGxvdyA9IGh1ZmYgJiBtYXNrO1xuICAgICAgLyp0YWJsZS5vcFtsb3ddID0gY3VycjtcbiAgICAgIHRhYmxlLmJpdHNbbG93XSA9IHJvb3Q7XG4gICAgICB0YWJsZS52YWxbbG93XSA9IG5leHQgLSBvcHRzLnRhYmxlX2luZGV4OyovXG4gICAgICB0YWJsZVtsb3ddID0gKHJvb3QgPDwgMjQpIHwgKGN1cnIgPDwgMTYpIHwgKG5leHQgLSB0YWJsZV9pbmRleCkgfDA7XG4gICAgfVxuICB9XG5cbiAgLyogZmlsbCBpbiByZW1haW5pbmcgdGFibGUgZW50cnkgaWYgY29kZSBpcyBpbmNvbXBsZXRlIChndWFyYW50ZWVkIHRvIGhhdmVcbiAgIGF0IG1vc3Qgb25lIHJlbWFpbmluZyBlbnRyeSwgc2luY2UgaWYgdGhlIGNvZGUgaXMgaW5jb21wbGV0ZSwgdGhlXG4gICBtYXhpbXVtIGNvZGUgbGVuZ3RoIHRoYXQgd2FzIGFsbG93ZWQgdG8gZ2V0IHRoaXMgZmFyIGlzIG9uZSBiaXQpICovXG4gIGlmIChodWZmICE9PSAwKSB7XG4gICAgLy90YWJsZS5vcFtuZXh0ICsgaHVmZl0gPSA2NDsgICAgICAgICAgICAvKiBpbnZhbGlkIGNvZGUgbWFya2VyICovXG4gICAgLy90YWJsZS5iaXRzW25leHQgKyBodWZmXSA9IGxlbiAtIGRyb3A7XG4gICAgLy90YWJsZS52YWxbbmV4dCArIGh1ZmZdID0gMDtcbiAgICB0YWJsZVtuZXh0ICsgaHVmZl0gPSAoKGxlbiAtIGRyb3ApIDw8IDI0KSB8ICg2NCA8PCAxNikgfDA7XG4gIH1cblxuICAvKiBzZXQgcmV0dXJuIHBhcmFtZXRlcnMgKi9cbiAgLy9vcHRzLnRhYmxlX2luZGV4ICs9IHVzZWQ7XG4gIG9wdHMuYml0cyA9IHJvb3Q7XG4gIHJldHVybiAwO1xufTtcblxuXG52YXIgaW5mdHJlZXMgPSBpbmZsYXRlX3RhYmxlO1xuXG4vLyAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXJcbi8vIChDKSAyMDE0LTIwMTcgVml0YWx5IFB1enJpbiBhbmQgQW5kcmV5IFR1cGl0c2luXG4vL1xuLy8gVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWRcbi8vIHdhcnJhbnR5LiBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlc1xuLy8gYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSxcbi8vIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXRcbi8vIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcbi8vXG4vLyAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdFxuLy8gICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZVxuLy8gICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmVcbi8vICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC5cbi8vIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlXG4vLyAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS5cbi8vIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uXG5cblxuXG5cblxuXG5jb25zdCBDT0RFUyA9IDA7XG5jb25zdCBMRU5TID0gMTtcbmNvbnN0IERJU1RTID0gMjtcblxuLyogUHVibGljIGNvbnN0YW50cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG5cbmNvbnN0IHtcbiAgWl9GSU5JU0g6IFpfRklOSVNIJDEsIFpfQkxPQ0ssIFpfVFJFRVMsXG4gIFpfT0s6IFpfT0skMSwgWl9TVFJFQU1fRU5EOiBaX1NUUkVBTV9FTkQkMSwgWl9ORUVEX0RJQ1Q6IFpfTkVFRF9ESUNUJDEsIFpfU1RSRUFNX0VSUk9SOiBaX1NUUkVBTV9FUlJPUiQxLCBaX0RBVEFfRVJST1I6IFpfREFUQV9FUlJPUiQxLCBaX01FTV9FUlJPUjogWl9NRU1fRVJST1IkMSwgWl9CVUZfRVJST1I6IFpfQlVGX0VSUk9SJDEsXG4gIFpfREVGTEFURURcbn0gPSBjb25zdGFudHMkMjtcblxuXG4vKiBTVEFURVMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuXG5jb25zdCAgICBIRUFEID0gMTYxODA7ICAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIG1hZ2ljIGhlYWRlciAqL1xuY29uc3QgICAgRkxBR1MgPSAxNjE4MTsgICAgICAvKiBpOiB3YWl0aW5nIGZvciBtZXRob2QgYW5kIGZsYWdzIChnemlwKSAqL1xuY29uc3QgICAgVElNRSA9IDE2MTgyOyAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBtb2RpZmljYXRpb24gdGltZSAoZ3ppcCkgKi9cbmNvbnN0ICAgIE9TID0gMTYxODM7ICAgICAgICAgLyogaTogd2FpdGluZyBmb3IgZXh0cmEgZmxhZ3MgYW5kIG9wZXJhdGluZyBzeXN0ZW0gKGd6aXApICovXG5jb25zdCAgICBFWExFTiA9IDE2MTg0OyAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGV4dHJhIGxlbmd0aCAoZ3ppcCkgKi9cbmNvbnN0ICAgIEVYVFJBID0gMTYxODU7ICAgICAgLyogaTogd2FpdGluZyBmb3IgZXh0cmEgYnl0ZXMgKGd6aXApICovXG5jb25zdCAgICBOQU1FID0gMTYxODY7ICAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGVuZCBvZiBmaWxlIG5hbWUgKGd6aXApICovXG5jb25zdCAgICBDT01NRU5UID0gMTYxODc7ICAgIC8qIGk6IHdhaXRpbmcgZm9yIGVuZCBvZiBjb21tZW50IChnemlwKSAqL1xuY29uc3QgICAgSENSQyA9IDE2MTg4OyAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBoZWFkZXIgY3JjIChnemlwKSAqL1xuY29uc3QgICAgRElDVElEID0gMTYxODk7ICAgIC8qIGk6IHdhaXRpbmcgZm9yIGRpY3Rpb25hcnkgY2hlY2sgdmFsdWUgKi9cbmNvbnN0ICAgIERJQ1QgPSAxNjE5MDsgICAgICAvKiB3YWl0aW5nIGZvciBpbmZsYXRlU2V0RGljdGlvbmFyeSgpIGNhbGwgKi9cbmNvbnN0ICAgICAgICBUWVBFID0gMTYxOTE7ICAgICAgLyogaTogd2FpdGluZyBmb3IgdHlwZSBiaXRzLCBpbmNsdWRpbmcgbGFzdC1mbGFnIGJpdCAqL1xuY29uc3QgICAgICAgIFRZUEVETyA9IDE2MTkyOyAgICAvKiBpOiBzYW1lLCBidXQgc2tpcCBjaGVjayB0byBleGl0IGluZmxhdGUgb24gbmV3IGJsb2NrICovXG5jb25zdCAgICAgICAgU1RPUkVEID0gMTYxOTM7ICAgIC8qIGk6IHdhaXRpbmcgZm9yIHN0b3JlZCBzaXplIChsZW5ndGggYW5kIGNvbXBsZW1lbnQpICovXG5jb25zdCAgICAgICAgQ09QWV8gPSAxNjE5NDsgICAgIC8qIGkvbzogc2FtZSBhcyBDT1BZIGJlbG93LCBidXQgb25seSBmaXJzdCB0aW1lIGluICovXG5jb25zdCAgICAgICAgQ09QWSA9IDE2MTk1OyAgICAgIC8qIGkvbzogd2FpdGluZyBmb3IgaW5wdXQgb3Igb3V0cHV0IHRvIGNvcHkgc3RvcmVkIGJsb2NrICovXG5jb25zdCAgICAgICAgVEFCTEUgPSAxNjE5NjsgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGR5bmFtaWMgYmxvY2sgdGFibGUgbGVuZ3RocyAqL1xuY29uc3QgICAgICAgIExFTkxFTlMgPSAxNjE5NzsgICAvKiBpOiB3YWl0aW5nIGZvciBjb2RlIGxlbmd0aCBjb2RlIGxlbmd0aHMgKi9cbmNvbnN0ICAgICAgICBDT0RFTEVOUyA9IDE2MTk4OyAgLyogaTogd2FpdGluZyBmb3IgbGVuZ3RoL2xpdCBhbmQgZGlzdGFuY2UgY29kZSBsZW5ndGhzICovXG5jb25zdCAgICAgICAgICAgIExFTl8gPSAxNjE5OTsgICAgICAvKiBpOiBzYW1lIGFzIExFTiBiZWxvdywgYnV0IG9ubHkgZmlyc3QgdGltZSBpbiAqL1xuY29uc3QgICAgICAgICAgICBMRU4gPSAxNjIwMDsgICAgICAgLyogaTogd2FpdGluZyBmb3IgbGVuZ3RoL2xpdC9lb2IgY29kZSAqL1xuY29uc3QgICAgICAgICAgICBMRU5FWFQgPSAxNjIwMTsgICAgLyogaTogd2FpdGluZyBmb3IgbGVuZ3RoIGV4dHJhIGJpdHMgKi9cbmNvbnN0ICAgICAgICAgICAgRElTVCA9IDE2MjAyOyAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGRpc3RhbmNlIGNvZGUgKi9cbmNvbnN0ICAgICAgICAgICAgRElTVEVYVCA9IDE2MjAzOyAgIC8qIGk6IHdhaXRpbmcgZm9yIGRpc3RhbmNlIGV4dHJhIGJpdHMgKi9cbmNvbnN0ICAgICAgICAgICAgTUFUQ0ggPSAxNjIwNDsgICAgIC8qIG86IHdhaXRpbmcgZm9yIG91dHB1dCBzcGFjZSB0byBjb3B5IHN0cmluZyAqL1xuY29uc3QgICAgICAgICAgICBMSVQgPSAxNjIwNTsgICAgICAgLyogbzogd2FpdGluZyBmb3Igb3V0cHV0IHNwYWNlIHRvIHdyaXRlIGxpdGVyYWwgKi9cbmNvbnN0ICAgIENIRUNLID0gMTYyMDY7ICAgICAvKiBpOiB3YWl0aW5nIGZvciAzMi1iaXQgY2hlY2sgdmFsdWUgKi9cbmNvbnN0ICAgIExFTkdUSCA9IDE2MjA3OyAgICAvKiBpOiB3YWl0aW5nIGZvciAzMi1iaXQgbGVuZ3RoIChnemlwKSAqL1xuY29uc3QgICAgRE9ORSA9IDE2MjA4OyAgICAgIC8qIGZpbmlzaGVkIGNoZWNrLCBkb25lIC0tIHJlbWFpbiBoZXJlIHVudGlsIHJlc2V0ICovXG5jb25zdCAgICBCQUQgPSAxNjIwOTsgICAgICAgLyogZ290IGEgZGF0YSBlcnJvciAtLSByZW1haW4gaGVyZSB1bnRpbCByZXNldCAqL1xuY29uc3QgICAgTUVNID0gMTYyMTA7ICAgICAgIC8qIGdvdCBhbiBpbmZsYXRlKCkgbWVtb3J5IGVycm9yIC0tIHJlbWFpbiBoZXJlIHVudGlsIHJlc2V0ICovXG5jb25zdCAgICBTWU5DID0gMTYyMTE7ICAgICAgLyogbG9va2luZyBmb3Igc3luY2hyb25pemF0aW9uIGJ5dGVzIHRvIHJlc3RhcnQgaW5mbGF0ZSgpICovXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG5cblxuXG5jb25zdCBFTk9VR0hfTEVOUyA9IDg1MjtcbmNvbnN0IEVOT1VHSF9ESVNUUyA9IDU5Mjtcbi8vY29uc3QgRU5PVUdIID0gIChFTk9VR0hfTEVOUytFTk9VR0hfRElTVFMpO1xuXG5jb25zdCBNQVhfV0JJVFMgPSAxNTtcbi8qIDMySyBMWjc3IHdpbmRvdyAqL1xuY29uc3QgREVGX1dCSVRTID0gTUFYX1dCSVRTO1xuXG5cbmNvbnN0IHpzd2FwMzIgPSAocSkgPT4ge1xuXG4gIHJldHVybiAgKCgocSA+Pj4gMjQpICYgMHhmZikgK1xuICAgICAgICAgICgocSA+Pj4gOCkgJiAweGZmMDApICtcbiAgICAgICAgICAoKHEgJiAweGZmMDApIDw8IDgpICtcbiAgICAgICAgICAoKHEgJiAweGZmKSA8PCAyNCkpO1xufTtcblxuXG5mdW5jdGlvbiBJbmZsYXRlU3RhdGUoKSB7XG4gIHRoaXMuc3RybSA9IG51bGw7ICAgICAgICAgICAvKiBwb2ludGVyIGJhY2sgdG8gdGhpcyB6bGliIHN0cmVhbSAqL1xuICB0aGlzLm1vZGUgPSAwOyAgICAgICAgICAgICAgLyogY3VycmVudCBpbmZsYXRlIG1vZGUgKi9cbiAgdGhpcy5sYXN0ID0gZmFsc2U7ICAgICAgICAgIC8qIHRydWUgaWYgcHJvY2Vzc2luZyBsYXN0IGJsb2NrICovXG4gIHRoaXMud3JhcCA9IDA7ICAgICAgICAgICAgICAvKiBiaXQgMCB0cnVlIGZvciB6bGliLCBiaXQgMSB0cnVlIGZvciBnemlwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0IDIgdHJ1ZSB0byB2YWxpZGF0ZSBjaGVjayB2YWx1ZSAqL1xuICB0aGlzLmhhdmVkaWN0ID0gZmFsc2U7ICAgICAgLyogdHJ1ZSBpZiBkaWN0aW9uYXJ5IHByb3ZpZGVkICovXG4gIHRoaXMuZmxhZ3MgPSAwOyAgICAgICAgICAgICAvKiBnemlwIGhlYWRlciBtZXRob2QgYW5kIGZsYWdzICgwIGlmIHpsaWIpLCBvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgaWYgcmF3IG9yIG5vIGhlYWRlciB5ZXQgKi9cbiAgdGhpcy5kbWF4ID0gMDsgICAgICAgICAgICAgIC8qIHpsaWIgaGVhZGVyIG1heCBkaXN0YW5jZSAoSU5GTEFURV9TVFJJQ1QpICovXG4gIHRoaXMuY2hlY2sgPSAwOyAgICAgICAgICAgICAvKiBwcm90ZWN0ZWQgY29weSBvZiBjaGVjayB2YWx1ZSAqL1xuICB0aGlzLnRvdGFsID0gMDsgICAgICAgICAgICAgLyogcHJvdGVjdGVkIGNvcHkgb2Ygb3V0cHV0IGNvdW50ICovXG4gIC8vIFRPRE86IG1heSBiZSB7fVxuICB0aGlzLmhlYWQgPSBudWxsOyAgICAgICAgICAgLyogd2hlcmUgdG8gc2F2ZSBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiAqL1xuXG4gIC8qIHNsaWRpbmcgd2luZG93ICovXG4gIHRoaXMud2JpdHMgPSAwOyAgICAgICAgICAgICAvKiBsb2cgYmFzZSAyIG9mIHJlcXVlc3RlZCB3aW5kb3cgc2l6ZSAqL1xuICB0aGlzLndzaXplID0gMDsgICAgICAgICAgICAgLyogd2luZG93IHNpemUgb3IgemVybyBpZiBub3QgdXNpbmcgd2luZG93ICovXG4gIHRoaXMud2hhdmUgPSAwOyAgICAgICAgICAgICAvKiB2YWxpZCBieXRlcyBpbiB0aGUgd2luZG93ICovXG4gIHRoaXMud25leHQgPSAwOyAgICAgICAgICAgICAvKiB3aW5kb3cgd3JpdGUgaW5kZXggKi9cbiAgdGhpcy53aW5kb3cgPSBudWxsOyAgICAgICAgIC8qIGFsbG9jYXRlZCBzbGlkaW5nIHdpbmRvdywgaWYgbmVlZGVkICovXG5cbiAgLyogYml0IGFjY3VtdWxhdG9yICovXG4gIHRoaXMuaG9sZCA9IDA7ICAgICAgICAgICAgICAvKiBpbnB1dCBiaXQgYWNjdW11bGF0b3IgKi9cbiAgdGhpcy5iaXRzID0gMDsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBiaXRzIGluIFwiaW5cIiAqL1xuXG4gIC8qIGZvciBzdHJpbmcgYW5kIHN0b3JlZCBibG9jayBjb3B5aW5nICovXG4gIHRoaXMubGVuZ3RoID0gMDsgICAgICAgICAgICAvKiBsaXRlcmFsIG9yIGxlbmd0aCBvZiBkYXRhIHRvIGNvcHkgKi9cbiAgdGhpcy5vZmZzZXQgPSAwOyAgICAgICAgICAgIC8qIGRpc3RhbmNlIGJhY2sgdG8gY29weSBzdHJpbmcgZnJvbSAqL1xuXG4gIC8qIGZvciB0YWJsZSBhbmQgY29kZSBkZWNvZGluZyAqL1xuICB0aGlzLmV4dHJhID0gMDsgICAgICAgICAgICAgLyogZXh0cmEgYml0cyBuZWVkZWQgKi9cblxuICAvKiBmaXhlZCBhbmQgZHluYW1pYyBjb2RlIHRhYmxlcyAqL1xuICB0aGlzLmxlbmNvZGUgPSBudWxsOyAgICAgICAgICAvKiBzdGFydGluZyB0YWJsZSBmb3IgbGVuZ3RoL2xpdGVyYWwgY29kZXMgKi9cbiAgdGhpcy5kaXN0Y29kZSA9IG51bGw7ICAgICAgICAgLyogc3RhcnRpbmcgdGFibGUgZm9yIGRpc3RhbmNlIGNvZGVzICovXG4gIHRoaXMubGVuYml0cyA9IDA7ICAgICAgICAgICAvKiBpbmRleCBiaXRzIGZvciBsZW5jb2RlICovXG4gIHRoaXMuZGlzdGJpdHMgPSAwOyAgICAgICAgICAvKiBpbmRleCBiaXRzIGZvciBkaXN0Y29kZSAqL1xuXG4gIC8qIGR5bmFtaWMgdGFibGUgYnVpbGRpbmcgKi9cbiAgdGhpcy5uY29kZSA9IDA7ICAgICAgICAgICAgIC8qIG51bWJlciBvZiBjb2RlIGxlbmd0aCBjb2RlIGxlbmd0aHMgKi9cbiAgdGhpcy5ubGVuID0gMDsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBsZW5ndGggY29kZSBsZW5ndGhzICovXG4gIHRoaXMubmRpc3QgPSAwOyAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZGlzdGFuY2UgY29kZSBsZW5ndGhzICovXG4gIHRoaXMuaGF2ZSA9IDA7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY29kZSBsZW5ndGhzIGluIGxlbnNbXSAqL1xuICB0aGlzLm5leHQgPSBudWxsOyAgICAgICAgICAgICAgLyogbmV4dCBhdmFpbGFibGUgc3BhY2UgaW4gY29kZXNbXSAqL1xuXG4gIHRoaXMubGVucyA9IG5ldyBVaW50MTZBcnJheSgzMjApOyAvKiB0ZW1wb3Jhcnkgc3RvcmFnZSBmb3IgY29kZSBsZW5ndGhzICovXG4gIHRoaXMud29yayA9IG5ldyBVaW50MTZBcnJheSgyODgpOyAvKiB3b3JrIGFyZWEgZm9yIGNvZGUgdGFibGUgYnVpbGRpbmcgKi9cblxuICAvKlxuICAgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHBvaW50ZXJzIGluIGpzLCB3ZSB1c2UgbGVuY29kZSBhbmQgZGlzdGNvZGUgZGlyZWN0bHlcbiAgIGFzIGJ1ZmZlcnMgc28gd2UgZG9uJ3QgbmVlZCBjb2Rlc1xuICAqL1xuICAvL3RoaXMuY29kZXMgPSBuZXcgSW50MzJBcnJheShFTk9VR0gpOyAgICAgICAvKiBzcGFjZSBmb3IgY29kZSB0YWJsZXMgKi9cbiAgdGhpcy5sZW5keW4gPSBudWxsOyAgICAgICAgICAgICAgLyogZHluYW1pYyB0YWJsZSBmb3IgbGVuZ3RoL2xpdGVyYWwgY29kZXMgKEpTIHNwZWNpZmljKSAqL1xuICB0aGlzLmRpc3RkeW4gPSBudWxsOyAgICAgICAgICAgICAvKiBkeW5hbWljIHRhYmxlIGZvciBkaXN0YW5jZSBjb2RlcyAoSlMgc3BlY2lmaWMpICovXG4gIHRoaXMuc2FuZSA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIGlmIGZhbHNlLCBhbGxvdyBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgKi9cbiAgdGhpcy5iYWNrID0gMDsgICAgICAgICAgICAgICAgICAgLyogYml0cyBiYWNrIG9mIGxhc3QgdW5wcm9jZXNzZWQgbGVuZ3RoL2xpdCAqL1xuICB0aGlzLndhcyA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBpbml0aWFsIGxlbmd0aCBvZiBtYXRjaCAqL1xufVxuXG5cbmNvbnN0IGluZmxhdGVTdGF0ZUNoZWNrID0gKHN0cm0pID0+IHtcblxuICBpZiAoIXN0cm0pIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICBjb25zdCBzdGF0ZSA9IHN0cm0uc3RhdGU7XG4gIGlmICghc3RhdGUgfHwgc3RhdGUuc3RybSAhPT0gc3RybSB8fFxuICAgIHN0YXRlLm1vZGUgPCBIRUFEIHx8IHN0YXRlLm1vZGUgPiBTWU5DKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59O1xuXG5cbmNvbnN0IGluZmxhdGVSZXNldEtlZXAgPSAoc3RybSkgPT4ge1xuXG4gIGlmIChpbmZsYXRlU3RhdGVDaGVjayhzdHJtKSkgeyByZXR1cm4gWl9TVFJFQU1fRVJST1IkMTsgfVxuICBjb25zdCBzdGF0ZSA9IHN0cm0uc3RhdGU7XG4gIHN0cm0udG90YWxfaW4gPSBzdHJtLnRvdGFsX291dCA9IHN0YXRlLnRvdGFsID0gMDtcbiAgc3RybS5tc2cgPSAnJzsgLypaX05VTEwqL1xuICBpZiAoc3RhdGUud3JhcCkgeyAgICAgICAvKiB0byBzdXBwb3J0IGlsbC1jb25jZWl2ZWQgSmF2YSB0ZXN0IHN1aXRlICovXG4gICAgc3RybS5hZGxlciA9IHN0YXRlLndyYXAgJiAxO1xuICB9XG4gIHN0YXRlLm1vZGUgPSBIRUFEO1xuICBzdGF0ZS5sYXN0ID0gMDtcbiAgc3RhdGUuaGF2ZWRpY3QgPSAwO1xuICBzdGF0ZS5mbGFncyA9IC0xO1xuICBzdGF0ZS5kbWF4ID0gMzI3Njg7XG4gIHN0YXRlLmhlYWQgPSBudWxsLypaX05VTEwqLztcbiAgc3RhdGUuaG9sZCA9IDA7XG4gIHN0YXRlLmJpdHMgPSAwO1xuICAvL3N0YXRlLmxlbmNvZGUgPSBzdGF0ZS5kaXN0Y29kZSA9IHN0YXRlLm5leHQgPSBzdGF0ZS5jb2RlcztcbiAgc3RhdGUubGVuY29kZSA9IHN0YXRlLmxlbmR5biA9IG5ldyBJbnQzMkFycmF5KEVOT1VHSF9MRU5TKTtcbiAgc3RhdGUuZGlzdGNvZGUgPSBzdGF0ZS5kaXN0ZHluID0gbmV3IEludDMyQXJyYXkoRU5PVUdIX0RJU1RTKTtcblxuICBzdGF0ZS5zYW5lID0gMTtcbiAgc3RhdGUuYmFjayA9IC0xO1xuICAvL1RyYWNldigoc3RkZXJyLCBcImluZmxhdGU6IHJlc2V0XFxuXCIpKTtcbiAgcmV0dXJuIFpfT0skMTtcbn07XG5cblxuY29uc3QgaW5mbGF0ZVJlc2V0ID0gKHN0cm0pID0+IHtcblxuICBpZiAoaW5mbGF0ZVN0YXRlQ2hlY2soc3RybSkpIHsgcmV0dXJuIFpfU1RSRUFNX0VSUk9SJDE7IH1cbiAgY29uc3Qgc3RhdGUgPSBzdHJtLnN0YXRlO1xuICBzdGF0ZS53c2l6ZSA9IDA7XG4gIHN0YXRlLndoYXZlID0gMDtcbiAgc3RhdGUud25leHQgPSAwO1xuICByZXR1cm4gaW5mbGF0ZVJlc2V0S2VlcChzdHJtKTtcblxufTtcblxuXG5jb25zdCBpbmZsYXRlUmVzZXQyID0gKHN0cm0sIHdpbmRvd0JpdHMpID0+IHtcbiAgbGV0IHdyYXA7XG5cbiAgLyogZ2V0IHRoZSBzdGF0ZSAqL1xuICBpZiAoaW5mbGF0ZVN0YXRlQ2hlY2soc3RybSkpIHsgcmV0dXJuIFpfU1RSRUFNX0VSUk9SJDE7IH1cbiAgY29uc3Qgc3RhdGUgPSBzdHJtLnN0YXRlO1xuXG4gIC8qIGV4dHJhY3Qgd3JhcCByZXF1ZXN0IGZyb20gd2luZG93Qml0cyBwYXJhbWV0ZXIgKi9cbiAgaWYgKHdpbmRvd0JpdHMgPCAwKSB7XG4gICAgd3JhcCA9IDA7XG4gICAgd2luZG93Qml0cyA9IC13aW5kb3dCaXRzO1xuICB9XG4gIGVsc2Uge1xuICAgIHdyYXAgPSAod2luZG93Qml0cyA+PiA0KSArIDU7XG4gICAgaWYgKHdpbmRvd0JpdHMgPCA0OCkge1xuICAgICAgd2luZG93Qml0cyAmPSAxNTtcbiAgICB9XG4gIH1cblxuICAvKiBzZXQgbnVtYmVyIG9mIHdpbmRvdyBiaXRzLCBmcmVlIHdpbmRvdyBpZiBkaWZmZXJlbnQgKi9cbiAgaWYgKHdpbmRvd0JpdHMgJiYgKHdpbmRvd0JpdHMgPCA4IHx8IHdpbmRvd0JpdHMgPiAxNSkpIHtcbiAgICByZXR1cm4gWl9TVFJFQU1fRVJST1IkMTtcbiAgfVxuICBpZiAoc3RhdGUud2luZG93ICE9PSBudWxsICYmIHN0YXRlLndiaXRzICE9PSB3aW5kb3dCaXRzKSB7XG4gICAgc3RhdGUud2luZG93ID0gbnVsbDtcbiAgfVxuXG4gIC8qIHVwZGF0ZSBzdGF0ZSBhbmQgcmVzZXQgdGhlIHJlc3Qgb2YgaXQgKi9cbiAgc3RhdGUud3JhcCA9IHdyYXA7XG4gIHN0YXRlLndiaXRzID0gd2luZG93Qml0cztcbiAgcmV0dXJuIGluZmxhdGVSZXNldChzdHJtKTtcbn07XG5cblxuY29uc3QgaW5mbGF0ZUluaXQyID0gKHN0cm0sIHdpbmRvd0JpdHMpID0+IHtcblxuICBpZiAoIXN0cm0pIHsgcmV0dXJuIFpfU1RSRUFNX0VSUk9SJDE7IH1cbiAgLy9zdHJtLm1zZyA9IFpfTlVMTDsgICAgICAgICAgICAgICAgIC8qIGluIGNhc2Ugd2UgcmV0dXJuIGFuIGVycm9yICovXG5cbiAgY29uc3Qgc3RhdGUgPSBuZXcgSW5mbGF0ZVN0YXRlKCk7XG5cbiAgLy9pZiAoc3RhdGUgPT09IFpfTlVMTCkgcmV0dXJuIFpfTUVNX0VSUk9SO1xuICAvL1RyYWNldigoc3RkZXJyLCBcImluZmxhdGU6IGFsbG9jYXRlZFxcblwiKSk7XG4gIHN0cm0uc3RhdGUgPSBzdGF0ZTtcbiAgc3RhdGUuc3RybSA9IHN0cm07XG4gIHN0YXRlLndpbmRvdyA9IG51bGwvKlpfTlVMTCovO1xuICBzdGF0ZS5tb2RlID0gSEVBRDsgICAgIC8qIHRvIHBhc3Mgc3RhdGUgdGVzdCBpbiBpbmZsYXRlUmVzZXQyKCkgKi9cbiAgY29uc3QgcmV0ID0gaW5mbGF0ZVJlc2V0MihzdHJtLCB3aW5kb3dCaXRzKTtcbiAgaWYgKHJldCAhPT0gWl9PSyQxKSB7XG4gICAgc3RybS5zdGF0ZSA9IG51bGwvKlpfTlVMTCovO1xuICB9XG4gIHJldHVybiByZXQ7XG59O1xuXG5cbmNvbnN0IGluZmxhdGVJbml0ID0gKHN0cm0pID0+IHtcblxuICByZXR1cm4gaW5mbGF0ZUluaXQyKHN0cm0sIERFRl9XQklUUyk7XG59O1xuXG5cbi8qXG4gUmV0dXJuIHN0YXRlIHdpdGggbGVuZ3RoIGFuZCBkaXN0YW5jZSBkZWNvZGluZyB0YWJsZXMgYW5kIGluZGV4IHNpemVzIHNldCB0b1xuIGZpeGVkIGNvZGUgZGVjb2RpbmcuICBOb3JtYWxseSB0aGlzIHJldHVybnMgZml4ZWQgdGFibGVzIGZyb20gaW5mZml4ZWQuaC5cbiBJZiBCVUlMREZJWEVEIGlzIGRlZmluZWQsIHRoZW4gaW5zdGVhZCB0aGlzIHJvdXRpbmUgYnVpbGRzIHRoZSB0YWJsZXMgdGhlXG4gZmlyc3QgdGltZSBpdCdzIGNhbGxlZCwgYW5kIHJldHVybnMgdGhvc2UgdGFibGVzIHRoZSBmaXJzdCB0aW1lIGFuZFxuIHRoZXJlYWZ0ZXIuICBUaGlzIHJlZHVjZXMgdGhlIHNpemUgb2YgdGhlIGNvZGUgYnkgYWJvdXQgMksgYnl0ZXMsIGluXG4gZXhjaGFuZ2UgZm9yIGEgbGl0dGxlIGV4ZWN1dGlvbiB0aW1lLiAgSG93ZXZlciwgQlVJTERGSVhFRCBzaG91bGQgbm90IGJlXG4gdXNlZCBmb3IgdGhyZWFkZWQgYXBwbGljYXRpb25zLCBzaW5jZSB0aGUgcmV3cml0aW5nIG9mIHRoZSB0YWJsZXMgYW5kIHZpcmdpblxuIG1heSBub3QgYmUgdGhyZWFkLXNhZmUuXG4gKi9cbmxldCB2aXJnaW4gPSB0cnVlO1xuXG5sZXQgbGVuZml4LCBkaXN0Zml4OyAvLyBXZSBoYXZlIG5vIHBvaW50ZXJzIGluIEpTLCBzbyBrZWVwIHRhYmxlcyBzZXBhcmF0ZVxuXG5cbmNvbnN0IGZpeGVkdGFibGVzID0gKHN0YXRlKSA9PiB7XG5cbiAgLyogYnVpbGQgZml4ZWQgaHVmZm1hbiB0YWJsZXMgaWYgZmlyc3QgY2FsbCAobWF5IG5vdCBiZSB0aHJlYWQgc2FmZSkgKi9cbiAgaWYgKHZpcmdpbikge1xuICAgIGxlbmZpeCA9IG5ldyBJbnQzMkFycmF5KDUxMik7XG4gICAgZGlzdGZpeCA9IG5ldyBJbnQzMkFycmF5KDMyKTtcblxuICAgIC8qIGxpdGVyYWwvbGVuZ3RoIHRhYmxlICovXG4gICAgbGV0IHN5bSA9IDA7XG4gICAgd2hpbGUgKHN5bSA8IDE0NCkgeyBzdGF0ZS5sZW5zW3N5bSsrXSA9IDg7IH1cbiAgICB3aGlsZSAoc3ltIDwgMjU2KSB7IHN0YXRlLmxlbnNbc3ltKytdID0gOTsgfVxuICAgIHdoaWxlIChzeW0gPCAyODApIHsgc3RhdGUubGVuc1tzeW0rK10gPSA3OyB9XG4gICAgd2hpbGUgKHN5bSA8IDI4OCkgeyBzdGF0ZS5sZW5zW3N5bSsrXSA9IDg7IH1cblxuICAgIGluZnRyZWVzKExFTlMsICBzdGF0ZS5sZW5zLCAwLCAyODgsIGxlbmZpeCwgICAwLCBzdGF0ZS53b3JrLCB7IGJpdHM6IDkgfSk7XG5cbiAgICAvKiBkaXN0YW5jZSB0YWJsZSAqL1xuICAgIHN5bSA9IDA7XG4gICAgd2hpbGUgKHN5bSA8IDMyKSB7IHN0YXRlLmxlbnNbc3ltKytdID0gNTsgfVxuXG4gICAgaW5mdHJlZXMoRElTVFMsIHN0YXRlLmxlbnMsIDAsIDMyLCAgIGRpc3RmaXgsIDAsIHN0YXRlLndvcmssIHsgYml0czogNSB9KTtcblxuICAgIC8qIGRvIHRoaXMganVzdCBvbmNlICovXG4gICAgdmlyZ2luID0gZmFsc2U7XG4gIH1cblxuICBzdGF0ZS5sZW5jb2RlID0gbGVuZml4O1xuICBzdGF0ZS5sZW5iaXRzID0gOTtcbiAgc3RhdGUuZGlzdGNvZGUgPSBkaXN0Zml4O1xuICBzdGF0ZS5kaXN0Yml0cyA9IDU7XG59O1xuXG5cbi8qXG4gVXBkYXRlIHRoZSB3aW5kb3cgd2l0aCB0aGUgbGFzdCB3c2l6ZSAobm9ybWFsbHkgMzJLKSBieXRlcyB3cml0dGVuIGJlZm9yZVxuIHJldHVybmluZy4gIElmIHdpbmRvdyBkb2VzIG5vdCBleGlzdCB5ZXQsIGNyZWF0ZSBpdC4gIFRoaXMgaXMgb25seSBjYWxsZWRcbiB3aGVuIGEgd2luZG93IGlzIGFscmVhZHkgaW4gdXNlLCBvciB3aGVuIG91dHB1dCBoYXMgYmVlbiB3cml0dGVuIGR1cmluZyB0aGlzXG4gaW5mbGF0ZSBjYWxsLCBidXQgdGhlIGVuZCBvZiB0aGUgZGVmbGF0ZSBzdHJlYW0gaGFzIG5vdCBiZWVuIHJlYWNoZWQgeWV0LlxuIEl0IGlzIGFsc28gY2FsbGVkIHRvIGNyZWF0ZSBhIHdpbmRvdyBmb3IgZGljdGlvbmFyeSBkYXRhIHdoZW4gYSBkaWN0aW9uYXJ5XG4gaXMgbG9hZGVkLlxuXG4gUHJvdmlkaW5nIG91dHB1dCBidWZmZXJzIGxhcmdlciB0aGFuIDMySyB0byBpbmZsYXRlKCkgc2hvdWxkIHByb3ZpZGUgYSBzcGVlZFxuIGFkdmFudGFnZSwgc2luY2Ugb25seSB0aGUgbGFzdCAzMksgb2Ygb3V0cHV0IGlzIGNvcGllZCB0byB0aGUgc2xpZGluZyB3aW5kb3dcbiB1cG9uIHJldHVybiBmcm9tIGluZmxhdGUoKSwgYW5kIHNpbmNlIGFsbCBkaXN0YW5jZXMgYWZ0ZXIgdGhlIGZpcnN0IDMySyBvZlxuIG91dHB1dCB3aWxsIGZhbGwgaW4gdGhlIG91dHB1dCBkYXRhLCBtYWtpbmcgbWF0Y2ggY29waWVzIHNpbXBsZXIgYW5kIGZhc3Rlci5cbiBUaGUgYWR2YW50YWdlIG1heSBiZSBkZXBlbmRlbnQgb24gdGhlIHNpemUgb2YgdGhlIHByb2Nlc3NvcidzIGRhdGEgY2FjaGVzLlxuICovXG5jb25zdCB1cGRhdGV3aW5kb3cgPSAoc3RybSwgc3JjLCBlbmQsIGNvcHkpID0+IHtcblxuICBsZXQgZGlzdDtcbiAgY29uc3Qgc3RhdGUgPSBzdHJtLnN0YXRlO1xuXG4gIC8qIGlmIGl0IGhhc24ndCBiZWVuIGRvbmUgYWxyZWFkeSwgYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSB3aW5kb3cgKi9cbiAgaWYgKHN0YXRlLndpbmRvdyA9PT0gbnVsbCkge1xuICAgIHN0YXRlLndpbmRvdyA9IG5ldyBVaW50OEFycmF5KDEgPDwgc3RhdGUud2JpdHMpO1xuICB9XG5cbiAgLyogaWYgd2luZG93IG5vdCBpbiB1c2UgeWV0LCBpbml0aWFsaXplICovXG4gIGlmIChzdGF0ZS53c2l6ZSA9PT0gMCkge1xuICAgIHN0YXRlLndzaXplID0gMSA8PCBzdGF0ZS53Yml0cztcbiAgICBzdGF0ZS53bmV4dCA9IDA7XG4gICAgc3RhdGUud2hhdmUgPSAwO1xuICB9XG5cbiAgLyogY29weSBzdGF0ZS0+d3NpemUgb3IgbGVzcyBvdXRwdXQgYnl0ZXMgaW50byB0aGUgY2lyY3VsYXIgd2luZG93ICovXG4gIGlmIChjb3B5ID49IHN0YXRlLndzaXplKSB7XG4gICAgc3RhdGUud2luZG93LnNldChzcmMuc3ViYXJyYXkoZW5kIC0gc3RhdGUud3NpemUsIGVuZCksIDApO1xuICAgIHN0YXRlLnduZXh0ID0gMDtcbiAgICBzdGF0ZS53aGF2ZSA9IHN0YXRlLndzaXplO1xuICB9XG4gIGVsc2Uge1xuICAgIGRpc3QgPSBzdGF0ZS53c2l6ZSAtIHN0YXRlLnduZXh0O1xuICAgIGlmIChkaXN0ID4gY29weSkge1xuICAgICAgZGlzdCA9IGNvcHk7XG4gICAgfVxuICAgIC8vem1lbWNweShzdGF0ZS0+d2luZG93ICsgc3RhdGUtPnduZXh0LCBlbmQgLSBjb3B5LCBkaXN0KTtcbiAgICBzdGF0ZS53aW5kb3cuc2V0KHNyYy5zdWJhcnJheShlbmQgLSBjb3B5LCBlbmQgLSBjb3B5ICsgZGlzdCksIHN0YXRlLnduZXh0KTtcbiAgICBjb3B5IC09IGRpc3Q7XG4gICAgaWYgKGNvcHkpIHtcbiAgICAgIC8vem1lbWNweShzdGF0ZS0+d2luZG93LCBlbmQgLSBjb3B5LCBjb3B5KTtcbiAgICAgIHN0YXRlLndpbmRvdy5zZXQoc3JjLnN1YmFycmF5KGVuZCAtIGNvcHksIGVuZCksIDApO1xuICAgICAgc3RhdGUud25leHQgPSBjb3B5O1xuICAgICAgc3RhdGUud2hhdmUgPSBzdGF0ZS53c2l6ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBzdGF0ZS53bmV4dCArPSBkaXN0O1xuICAgICAgaWYgKHN0YXRlLnduZXh0ID09PSBzdGF0ZS53c2l6ZSkgeyBzdGF0ZS53bmV4dCA9IDA7IH1cbiAgICAgIGlmIChzdGF0ZS53aGF2ZSA8IHN0YXRlLndzaXplKSB7IHN0YXRlLndoYXZlICs9IGRpc3Q7IH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIDA7XG59O1xuXG5cbmNvbnN0IGluZmxhdGUkMiA9IChzdHJtLCBmbHVzaCkgPT4ge1xuXG4gIGxldCBzdGF0ZTtcbiAgbGV0IGlucHV0LCBvdXRwdXQ7ICAgICAgICAgIC8vIGlucHV0L291dHB1dCBidWZmZXJzXG4gIGxldCBuZXh0OyAgICAgICAgICAgICAgICAgICAvKiBuZXh0IGlucHV0IElOREVYICovXG4gIGxldCBwdXQ7ICAgICAgICAgICAgICAgICAgICAvKiBuZXh0IG91dHB1dCBJTkRFWCAqL1xuICBsZXQgaGF2ZSwgbGVmdDsgICAgICAgICAgICAgLyogYXZhaWxhYmxlIGlucHV0IGFuZCBvdXRwdXQgKi9cbiAgbGV0IGhvbGQ7ICAgICAgICAgICAgICAgICAgIC8qIGJpdCBidWZmZXIgKi9cbiAgbGV0IGJpdHM7ICAgICAgICAgICAgICAgICAgIC8qIGJpdHMgaW4gYml0IGJ1ZmZlciAqL1xuICBsZXQgX2luLCBfb3V0OyAgICAgICAgICAgICAgLyogc2F2ZSBzdGFydGluZyBhdmFpbGFibGUgaW5wdXQgYW5kIG91dHB1dCAqL1xuICBsZXQgY29weTsgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHN0b3JlZCBvciBtYXRjaCBieXRlcyB0byBjb3B5ICovXG4gIGxldCBmcm9tOyAgICAgICAgICAgICAgICAgICAvKiB3aGVyZSB0byBjb3B5IG1hdGNoIGJ5dGVzIGZyb20gKi9cbiAgbGV0IGZyb21fc291cmNlO1xuICBsZXQgaGVyZSA9IDA7ICAgICAgICAgICAgICAgLyogY3VycmVudCBkZWNvZGluZyB0YWJsZSBlbnRyeSAqL1xuICBsZXQgaGVyZV9iaXRzLCBoZXJlX29wLCBoZXJlX3ZhbDsgLy8gcGFrZWQgXCJoZXJlXCIgZGVub3JtYWxpemVkIChKUyBzcGVjaWZpYylcbiAgLy9sZXQgbGFzdDsgICAgICAgICAgICAgICAgICAgLyogcGFyZW50IHRhYmxlIGVudHJ5ICovXG4gIGxldCBsYXN0X2JpdHMsIGxhc3Rfb3AsIGxhc3RfdmFsOyAvLyBwYWtlZCBcImxhc3RcIiBkZW5vcm1hbGl6ZWQgKEpTIHNwZWNpZmljKVxuICBsZXQgbGVuOyAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIHRvIGNvcHkgZm9yIHJlcGVhdHMsIGJpdHMgdG8gZHJvcCAqL1xuICBsZXQgcmV0OyAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIGNvZGUgKi9cbiAgY29uc3QgaGJ1ZiA9IG5ldyBVaW50OEFycmF5KDQpOyAgICAvKiBidWZmZXIgZm9yIGd6aXAgaGVhZGVyIGNyYyBjYWxjdWxhdGlvbiAqL1xuICBsZXQgb3B0cztcblxuICBsZXQgbjsgLy8gdGVtcG9yYXJ5IHZhcmlhYmxlIGZvciBORUVEX0JJVFNcblxuICBjb25zdCBvcmRlciA9IC8qIHBlcm11dGF0aW9uIG9mIGNvZGUgbGVuZ3RocyAqL1xuICAgIG5ldyBVaW50OEFycmF5KFsgMTYsIDE3LCAxOCwgMCwgOCwgNywgOSwgNiwgMTAsIDUsIDExLCA0LCAxMiwgMywgMTMsIDIsIDE0LCAxLCAxNSBdKTtcblxuXG4gIGlmIChpbmZsYXRlU3RhdGVDaGVjayhzdHJtKSB8fCAhc3RybS5vdXRwdXQgfHxcbiAgICAgICghc3RybS5pbnB1dCAmJiBzdHJtLmF2YWlsX2luICE9PSAwKSkge1xuICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUiQxO1xuICB9XG5cbiAgc3RhdGUgPSBzdHJtLnN0YXRlO1xuICBpZiAoc3RhdGUubW9kZSA9PT0gVFlQRSkgeyBzdGF0ZS5tb2RlID0gVFlQRURPOyB9ICAgIC8qIHNraXAgY2hlY2sgKi9cblxuXG4gIC8vLS0tIExPQUQoKSAtLS1cbiAgcHV0ID0gc3RybS5uZXh0X291dDtcbiAgb3V0cHV0ID0gc3RybS5vdXRwdXQ7XG4gIGxlZnQgPSBzdHJtLmF2YWlsX291dDtcbiAgbmV4dCA9IHN0cm0ubmV4dF9pbjtcbiAgaW5wdXQgPSBzdHJtLmlucHV0O1xuICBoYXZlID0gc3RybS5hdmFpbF9pbjtcbiAgaG9sZCA9IHN0YXRlLmhvbGQ7XG4gIGJpdHMgPSBzdGF0ZS5iaXRzO1xuICAvLy0tLVxuXG4gIF9pbiA9IGhhdmU7XG4gIF9vdXQgPSBsZWZ0O1xuICByZXQgPSBaX09LJDE7XG5cbiAgaW5mX2xlYXZlOiAvLyBnb3RvIGVtdWxhdGlvblxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChzdGF0ZS5tb2RlKSB7XG4gICAgICBjYXNlIEhFQUQ6XG4gICAgICAgIGlmIChzdGF0ZS53cmFwID09PSAwKSB7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IFRZUEVETztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLz09PSBORUVEQklUUygxNik7XG4gICAgICAgIHdoaWxlIChiaXRzIDwgMTYpIHtcbiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICB9XG4gICAgICAgIC8vPT09Ly9cbiAgICAgICAgaWYgKChzdGF0ZS53cmFwICYgMikgJiYgaG9sZCA9PT0gMHg4YjFmKSB7ICAvKiBnemlwIGhlYWRlciAqL1xuICAgICAgICAgIGlmIChzdGF0ZS53Yml0cyA9PT0gMCkge1xuICAgICAgICAgICAgc3RhdGUud2JpdHMgPSAxNTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RhdGUuY2hlY2sgPSAwLypjcmMzMigwTCwgWl9OVUxMLCAwKSovO1xuICAgICAgICAgIC8vPT09IENSQzIoc3RhdGUuY2hlY2ssIGhvbGQpO1xuICAgICAgICAgIGhidWZbMF0gPSBob2xkICYgMHhmZjtcbiAgICAgICAgICBoYnVmWzFdID0gKGhvbGQgPj4+IDgpICYgMHhmZjtcbiAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyXzEoc3RhdGUuY2hlY2ssIGhidWYsIDIsIDApO1xuICAgICAgICAgIC8vPT09Ly9cblxuICAgICAgICAgIC8vPT09IElOSVRCSVRTKCk7XG4gICAgICAgICAgaG9sZCA9IDA7XG4gICAgICAgICAgYml0cyA9IDA7XG4gICAgICAgICAgLy89PT0vL1xuICAgICAgICAgIHN0YXRlLm1vZGUgPSBGTEFHUztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUuaGVhZCkge1xuICAgICAgICAgIHN0YXRlLmhlYWQuZG9uZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKHN0YXRlLndyYXAgJiAxKSB8fCAgIC8qIGNoZWNrIGlmIHpsaWIgaGVhZGVyIGFsbG93ZWQgKi9cbiAgICAgICAgICAoKChob2xkICYgMHhmZikvKkJJVFMoOCkqLyA8PCA4KSArIChob2xkID4+IDgpKSAlIDMxKSB7XG4gICAgICAgICAgc3RybS5tc2cgPSAnaW5jb3JyZWN0IGhlYWRlciBjaGVjayc7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGhvbGQgJiAweDBmKS8qQklUUyg0KSovICE9PSBaX0RFRkxBVEVEKSB7XG4gICAgICAgICAgc3RybS5tc2cgPSAndW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QnO1xuICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8tLS0gRFJPUEJJVFMoNCkgLS0tLy9cbiAgICAgICAgaG9sZCA+Pj49IDQ7XG4gICAgICAgIGJpdHMgLT0gNDtcbiAgICAgICAgLy8tLS0vL1xuICAgICAgICBsZW4gPSAoaG9sZCAmIDB4MGYpLypCSVRTKDQpKi8gKyA4O1xuICAgICAgICBpZiAoc3RhdGUud2JpdHMgPT09IDApIHtcbiAgICAgICAgICBzdGF0ZS53Yml0cyA9IGxlbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVuID4gMTUgfHwgbGVuID4gc3RhdGUud2JpdHMpIHtcbiAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIHdpbmRvdyBzaXplJztcbiAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gISEhIHBha28gcGF0Y2guIEZvcmNlIHVzZSBgb3B0aW9ucy53aW5kb3dCaXRzYCBpZiBwYXNzZWQuXG4gICAgICAgIC8vIFJlcXVpcmVkIHRvIGFsd2F5cyB1c2UgbWF4IHdpbmRvdyBzaXplIGJ5IGRlZmF1bHQuXG4gICAgICAgIHN0YXRlLmRtYXggPSAxIDw8IHN0YXRlLndiaXRzO1xuICAgICAgICAvL3N0YXRlLmRtYXggPSAxIDw8IGxlbjtcblxuICAgICAgICBzdGF0ZS5mbGFncyA9IDA7ICAgICAgICAgICAgICAgLyogaW5kaWNhdGUgemxpYiBoZWFkZXIgKi9cbiAgICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgIHpsaWIgaGVhZGVyIG9rXFxuXCIpKTtcbiAgICAgICAgc3RybS5hZGxlciA9IHN0YXRlLmNoZWNrID0gMS8qYWRsZXIzMigwTCwgWl9OVUxMLCAwKSovO1xuICAgICAgICBzdGF0ZS5tb2RlID0gaG9sZCAmIDB4MjAwID8gRElDVElEIDogVFlQRTtcbiAgICAgICAgLy89PT0gSU5JVEJJVFMoKTtcbiAgICAgICAgaG9sZCA9IDA7XG4gICAgICAgIGJpdHMgPSAwO1xuICAgICAgICAvLz09PS8vXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBGTEFHUzpcbiAgICAgICAgLy89PT0gTkVFREJJVFMoMTYpOyAqL1xuICAgICAgICB3aGlsZSAoYml0cyA8IDE2KSB7XG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgfVxuICAgICAgICAvLz09PS8vXG4gICAgICAgIHN0YXRlLmZsYWdzID0gaG9sZDtcbiAgICAgICAgaWYgKChzdGF0ZS5mbGFncyAmIDB4ZmYpICE9PSBaX0RFRkxBVEVEKSB7XG4gICAgICAgICAgc3RybS5tc2cgPSAndW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QnO1xuICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHhlMDAwKSB7XG4gICAgICAgICAgc3RybS5tc2cgPSAndW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0JztcbiAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZS5oZWFkKSB7XG4gICAgICAgICAgc3RhdGUuaGVhZC50ZXh0ID0gKChob2xkID4+IDgpICYgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChzdGF0ZS5mbGFncyAmIDB4MDIwMCkgJiYgKHN0YXRlLndyYXAgJiA0KSkge1xuICAgICAgICAgIC8vPT09IENSQzIoc3RhdGUuY2hlY2ssIGhvbGQpO1xuICAgICAgICAgIGhidWZbMF0gPSBob2xkICYgMHhmZjtcbiAgICAgICAgICBoYnVmWzFdID0gKGhvbGQgPj4+IDgpICYgMHhmZjtcbiAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyXzEoc3RhdGUuY2hlY2ssIGhidWYsIDIsIDApO1xuICAgICAgICAgIC8vPT09Ly9cbiAgICAgICAgfVxuICAgICAgICAvLz09PSBJTklUQklUUygpO1xuICAgICAgICBob2xkID0gMDtcbiAgICAgICAgYml0cyA9IDA7XG4gICAgICAgIC8vPT09Ly9cbiAgICAgICAgc3RhdGUubW9kZSA9IFRJTUU7XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgVElNRTpcbiAgICAgICAgLy89PT0gTkVFREJJVFMoMzIpOyAqL1xuICAgICAgICB3aGlsZSAoYml0cyA8IDMyKSB7XG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgfVxuICAgICAgICAvLz09PS8vXG4gICAgICAgIGlmIChzdGF0ZS5oZWFkKSB7XG4gICAgICAgICAgc3RhdGUuaGVhZC50aW1lID0gaG9sZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHN0YXRlLmZsYWdzICYgMHgwMjAwKSAmJiAoc3RhdGUud3JhcCAmIDQpKSB7XG4gICAgICAgICAgLy89PT0gQ1JDNChzdGF0ZS5jaGVjaywgaG9sZClcbiAgICAgICAgICBoYnVmWzBdID0gaG9sZCAmIDB4ZmY7XG4gICAgICAgICAgaGJ1ZlsxXSA9IChob2xkID4+PiA4KSAmIDB4ZmY7XG4gICAgICAgICAgaGJ1ZlsyXSA9IChob2xkID4+PiAxNikgJiAweGZmO1xuICAgICAgICAgIGhidWZbM10gPSAoaG9sZCA+Pj4gMjQpICYgMHhmZjtcbiAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyXzEoc3RhdGUuY2hlY2ssIGhidWYsIDQsIDApO1xuICAgICAgICAgIC8vPT09XG4gICAgICAgIH1cbiAgICAgICAgLy89PT0gSU5JVEJJVFMoKTtcbiAgICAgICAgaG9sZCA9IDA7XG4gICAgICAgIGJpdHMgPSAwO1xuICAgICAgICAvLz09PS8vXG4gICAgICAgIHN0YXRlLm1vZGUgPSBPUztcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBPUzpcbiAgICAgICAgLy89PT0gTkVFREJJVFMoMTYpOyAqL1xuICAgICAgICB3aGlsZSAoYml0cyA8IDE2KSB7XG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgfVxuICAgICAgICAvLz09PS8vXG4gICAgICAgIGlmIChzdGF0ZS5oZWFkKSB7XG4gICAgICAgICAgc3RhdGUuaGVhZC54ZmxhZ3MgPSAoaG9sZCAmIDB4ZmYpO1xuICAgICAgICAgIHN0YXRlLmhlYWQub3MgPSAoaG9sZCA+PiA4KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHN0YXRlLmZsYWdzICYgMHgwMjAwKSAmJiAoc3RhdGUud3JhcCAmIDQpKSB7XG4gICAgICAgICAgLy89PT0gQ1JDMihzdGF0ZS5jaGVjaywgaG9sZCk7XG4gICAgICAgICAgaGJ1ZlswXSA9IGhvbGQgJiAweGZmO1xuICAgICAgICAgIGhidWZbMV0gPSAoaG9sZCA+Pj4gOCkgJiAweGZmO1xuICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzJfMShzdGF0ZS5jaGVjaywgaGJ1ZiwgMiwgMCk7XG4gICAgICAgICAgLy89PT0vL1xuICAgICAgICB9XG4gICAgICAgIC8vPT09IElOSVRCSVRTKCk7XG4gICAgICAgIGhvbGQgPSAwO1xuICAgICAgICBiaXRzID0gMDtcbiAgICAgICAgLy89PT0vL1xuICAgICAgICBzdGF0ZS5tb2RlID0gRVhMRU47XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgRVhMRU46XG4gICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4MDQwMCkge1xuICAgICAgICAgIC8vPT09IE5FRURCSVRTKDE2KTsgKi9cbiAgICAgICAgICB3aGlsZSAoYml0cyA8IDE2KSB7XG4gICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLz09PS8vXG4gICAgICAgICAgc3RhdGUubGVuZ3RoID0gaG9sZDtcbiAgICAgICAgICBpZiAoc3RhdGUuaGVhZCkge1xuICAgICAgICAgICAgc3RhdGUuaGVhZC5leHRyYV9sZW4gPSBob2xkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoKHN0YXRlLmZsYWdzICYgMHgwMjAwKSAmJiAoc3RhdGUud3JhcCAmIDQpKSB7XG4gICAgICAgICAgICAvLz09PSBDUkMyKHN0YXRlLmNoZWNrLCBob2xkKTtcbiAgICAgICAgICAgIGhidWZbMF0gPSBob2xkICYgMHhmZjtcbiAgICAgICAgICAgIGhidWZbMV0gPSAoaG9sZCA+Pj4gOCkgJiAweGZmO1xuICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMl8xKHN0YXRlLmNoZWNrLCBoYnVmLCAyLCAwKTtcbiAgICAgICAgICAgIC8vPT09Ly9cbiAgICAgICAgICB9XG4gICAgICAgICAgLy89PT0gSU5JVEJJVFMoKTtcbiAgICAgICAgICBob2xkID0gMDtcbiAgICAgICAgICBiaXRzID0gMDtcbiAgICAgICAgICAvLz09PS8vXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RhdGUuaGVhZCkge1xuICAgICAgICAgIHN0YXRlLmhlYWQuZXh0cmEgPSBudWxsLypaX05VTEwqLztcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5tb2RlID0gRVhUUkE7XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgRVhUUkE6XG4gICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4MDQwMCkge1xuICAgICAgICAgIGNvcHkgPSBzdGF0ZS5sZW5ndGg7XG4gICAgICAgICAgaWYgKGNvcHkgPiBoYXZlKSB7IGNvcHkgPSBoYXZlOyB9XG4gICAgICAgICAgaWYgKGNvcHkpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS5oZWFkKSB7XG4gICAgICAgICAgICAgIGxlbiA9IHN0YXRlLmhlYWQuZXh0cmFfbGVuIC0gc3RhdGUubGVuZ3RoO1xuICAgICAgICAgICAgICBpZiAoIXN0YXRlLmhlYWQuZXh0cmEpIHtcbiAgICAgICAgICAgICAgICAvLyBVc2UgdW50eXBlZCBhcnJheSBmb3IgbW9yZSBjb252ZW5pZW50IHByb2Nlc3NpbmcgbGF0ZXJcbiAgICAgICAgICAgICAgICBzdGF0ZS5oZWFkLmV4dHJhID0gbmV3IFVpbnQ4QXJyYXkoc3RhdGUuaGVhZC5leHRyYV9sZW4pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHN0YXRlLmhlYWQuZXh0cmEuc2V0KFxuICAgICAgICAgICAgICAgIGlucHV0LnN1YmFycmF5KFxuICAgICAgICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgICAgICAgIC8vIGV4dHJhIGZpZWxkIGlzIGxpbWl0ZWQgdG8gNjU1MzYgYnl0ZXNcbiAgICAgICAgICAgICAgICAgIC8vIC0gbm8gbmVlZCBmb3IgYWRkaXRpb25hbCBzaXplIGNoZWNrXG4gICAgICAgICAgICAgICAgICBuZXh0ICsgY29weVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgLypsZW4gKyBjb3B5ID4gc3RhdGUuaGVhZC5leHRyYV9tYXggLSBsZW4gPyBzdGF0ZS5oZWFkLmV4dHJhX21heCA6IGNvcHksKi9cbiAgICAgICAgICAgICAgICBsZW5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgLy96bWVtY3B5KHN0YXRlLmhlYWQuZXh0cmEgKyBsZW4sIG5leHQsXG4gICAgICAgICAgICAgIC8vICAgICAgICBsZW4gKyBjb3B5ID4gc3RhdGUuaGVhZC5leHRyYV9tYXggP1xuICAgICAgICAgICAgICAvLyAgICAgICAgc3RhdGUuaGVhZC5leHRyYV9tYXggLSBsZW4gOiBjb3B5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoc3RhdGUuZmxhZ3MgJiAweDAyMDApICYmIChzdGF0ZS53cmFwICYgNCkpIHtcbiAgICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMl8xKHN0YXRlLmNoZWNrLCBpbnB1dCwgY29weSwgbmV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoYXZlIC09IGNvcHk7XG4gICAgICAgICAgICBuZXh0ICs9IGNvcHk7XG4gICAgICAgICAgICBzdGF0ZS5sZW5ndGggLT0gY29weTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YXRlLmxlbmd0aCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5sZW5ndGggPSAwO1xuICAgICAgICBzdGF0ZS5tb2RlID0gTkFNRTtcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBOQU1FOlxuICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDA4MDApIHtcbiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICBjb3B5ID0gMDtcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAvLyBUT0RPOiAyIG9yIDEgYnl0ZXM/XG4gICAgICAgICAgICBsZW4gPSBpbnB1dFtuZXh0ICsgY29weSsrXTtcbiAgICAgICAgICAgIC8qIHVzZSBjb25zdGFudCBsaW1pdCBiZWNhdXNlIGluIGpzIHdlIHNob3VsZCBub3QgcHJlYWxsb2NhdGUgbWVtb3J5ICovXG4gICAgICAgICAgICBpZiAoc3RhdGUuaGVhZCAmJiBsZW4gJiZcbiAgICAgICAgICAgICAgICAoc3RhdGUubGVuZ3RoIDwgNjU1MzYgLypzdGF0ZS5oZWFkLm5hbWVfbWF4Ki8pKSB7XG4gICAgICAgICAgICAgIHN0YXRlLmhlYWQubmFtZSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGxlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSB3aGlsZSAobGVuICYmIGNvcHkgPCBoYXZlKTtcblxuICAgICAgICAgIGlmICgoc3RhdGUuZmxhZ3MgJiAweDAyMDApICYmIChzdGF0ZS53cmFwICYgNCkpIHtcbiAgICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzJfMShzdGF0ZS5jaGVjaywgaW5wdXQsIGNvcHksIG5leHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBoYXZlIC09IGNvcHk7XG4gICAgICAgICAgbmV4dCArPSBjb3B5O1xuICAgICAgICAgIGlmIChsZW4pIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RhdGUuaGVhZCkge1xuICAgICAgICAgIHN0YXRlLmhlYWQubmFtZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUubGVuZ3RoID0gMDtcbiAgICAgICAgc3RhdGUubW9kZSA9IENPTU1FTlQ7XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgQ09NTUVOVDpcbiAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgxMDAwKSB7XG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgY29weSA9IDA7XG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgbGVuID0gaW5wdXRbbmV4dCArIGNvcHkrK107XG4gICAgICAgICAgICAvKiB1c2UgY29uc3RhbnQgbGltaXQgYmVjYXVzZSBpbiBqcyB3ZSBzaG91bGQgbm90IHByZWFsbG9jYXRlIG1lbW9yeSAqL1xuICAgICAgICAgICAgaWYgKHN0YXRlLmhlYWQgJiYgbGVuICYmXG4gICAgICAgICAgICAgICAgKHN0YXRlLmxlbmd0aCA8IDY1NTM2IC8qc3RhdGUuaGVhZC5jb21tX21heCovKSkge1xuICAgICAgICAgICAgICBzdGF0ZS5oZWFkLmNvbW1lbnQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gd2hpbGUgKGxlbiAmJiBjb3B5IDwgaGF2ZSk7XG4gICAgICAgICAgaWYgKChzdGF0ZS5mbGFncyAmIDB4MDIwMCkgJiYgKHN0YXRlLndyYXAgJiA0KSkge1xuICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMl8xKHN0YXRlLmNoZWNrLCBpbnB1dCwgY29weSwgbmV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGhhdmUgLT0gY29weTtcbiAgICAgICAgICBuZXh0ICs9IGNvcHk7XG4gICAgICAgICAgaWYgKGxlbikgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdGF0ZS5oZWFkKSB7XG4gICAgICAgICAgc3RhdGUuaGVhZC5jb21tZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5tb2RlID0gSENSQztcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBIQ1JDOlxuICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDAyMDApIHtcbiAgICAgICAgICAvLz09PSBORUVEQklUUygxNik7ICovXG4gICAgICAgICAgd2hpbGUgKGJpdHMgPCAxNikge1xuICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy89PT0vL1xuICAgICAgICAgIGlmICgoc3RhdGUud3JhcCAmIDQpICYmIGhvbGQgIT09IChzdGF0ZS5jaGVjayAmIDB4ZmZmZikpIHtcbiAgICAgICAgICAgIHN0cm0ubXNnID0gJ2hlYWRlciBjcmMgbWlzbWF0Y2gnO1xuICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLz09PSBJTklUQklUUygpO1xuICAgICAgICAgIGhvbGQgPSAwO1xuICAgICAgICAgIGJpdHMgPSAwO1xuICAgICAgICAgIC8vPT09Ly9cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUuaGVhZCkge1xuICAgICAgICAgIHN0YXRlLmhlYWQuaGNyYyA9ICgoc3RhdGUuZmxhZ3MgPj4gOSkgJiAxKTtcbiAgICAgICAgICBzdGF0ZS5oZWFkLmRvbmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IDA7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRElDVElEOlxuICAgICAgICAvLz09PSBORUVEQklUUygzMik7ICovXG4gICAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHtcbiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICB9XG4gICAgICAgIC8vPT09Ly9cbiAgICAgICAgc3RybS5hZGxlciA9IHN0YXRlLmNoZWNrID0genN3YXAzMihob2xkKTtcbiAgICAgICAgLy89PT0gSU5JVEJJVFMoKTtcbiAgICAgICAgaG9sZCA9IDA7XG4gICAgICAgIGJpdHMgPSAwO1xuICAgICAgICAvLz09PS8vXG4gICAgICAgIHN0YXRlLm1vZGUgPSBESUNUO1xuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlIERJQ1Q6XG4gICAgICAgIGlmIChzdGF0ZS5oYXZlZGljdCA9PT0gMCkge1xuICAgICAgICAgIC8vLS0tIFJFU1RPUkUoKSAtLS1cbiAgICAgICAgICBzdHJtLm5leHRfb3V0ID0gcHV0O1xuICAgICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gbGVmdDtcbiAgICAgICAgICBzdHJtLm5leHRfaW4gPSBuZXh0O1xuICAgICAgICAgIHN0cm0uYXZhaWxfaW4gPSBoYXZlO1xuICAgICAgICAgIHN0YXRlLmhvbGQgPSBob2xkO1xuICAgICAgICAgIHN0YXRlLmJpdHMgPSBiaXRzO1xuICAgICAgICAgIC8vLS0tXG4gICAgICAgICAgcmV0dXJuIFpfTkVFRF9ESUNUJDE7XG4gICAgICAgIH1cbiAgICAgICAgc3RybS5hZGxlciA9IHN0YXRlLmNoZWNrID0gMS8qYWRsZXIzMigwTCwgWl9OVUxMLCAwKSovO1xuICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRTtcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBUWVBFOlxuICAgICAgICBpZiAoZmx1c2ggPT09IFpfQkxPQ0sgfHwgZmx1c2ggPT09IFpfVFJFRVMpIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgVFlQRURPOlxuICAgICAgICBpZiAoc3RhdGUubGFzdCkge1xuICAgICAgICAgIC8vLS0tIEJZVEVCSVRTKCkgLS0tLy9cbiAgICAgICAgICBob2xkID4+Pj0gYml0cyAmIDc7XG4gICAgICAgICAgYml0cyAtPSBiaXRzICYgNztcbiAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgc3RhdGUubW9kZSA9IENIRUNLO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vPT09IE5FRURCSVRTKDMpOyAqL1xuICAgICAgICB3aGlsZSAoYml0cyA8IDMpIHtcbiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICB9XG4gICAgICAgIC8vPT09Ly9cbiAgICAgICAgc3RhdGUubGFzdCA9IChob2xkICYgMHgwMSkvKkJJVFMoMSkqLztcbiAgICAgICAgLy8tLS0gRFJPUEJJVFMoMSkgLS0tLy9cbiAgICAgICAgaG9sZCA+Pj49IDE7XG4gICAgICAgIGJpdHMgLT0gMTtcbiAgICAgICAgLy8tLS0vL1xuXG4gICAgICAgIHN3aXRjaCAoKGhvbGQgJiAweDAzKS8qQklUUygyKSovKSB7XG4gICAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RvcmVkIGJsb2NrICovXG4gICAgICAgICAgICAvL1RyYWNldigoc3RkZXJyLCBcImluZmxhdGU6ICAgICBzdG9yZWQgYmxvY2slc1xcblwiLFxuICAgICAgICAgICAgLy8gICAgICAgIHN0YXRlLmxhc3QgPyBcIiAobGFzdClcIiA6IFwiXCIpKTtcbiAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBTVE9SRUQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmaXhlZCBibG9jayAqL1xuICAgICAgICAgICAgZml4ZWR0YWJsZXMoc3RhdGUpO1xuICAgICAgICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgZml4ZWQgY29kZXMgYmxvY2slc1xcblwiLFxuICAgICAgICAgICAgLy8gICAgICAgIHN0YXRlLmxhc3QgPyBcIiAobGFzdClcIiA6IFwiXCIpKTtcbiAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBMRU5fOyAgICAgICAgICAgICAvKiBkZWNvZGUgY29kZXMgKi9cbiAgICAgICAgICAgIGlmIChmbHVzaCA9PT0gWl9UUkVFUykge1xuICAgICAgICAgICAgICAvLy0tLSBEUk9QQklUUygyKSAtLS0vL1xuICAgICAgICAgICAgICBob2xkID4+Pj0gMjtcbiAgICAgICAgICAgICAgYml0cyAtPSAyO1xuICAgICAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGR5bmFtaWMgYmxvY2sgKi9cbiAgICAgICAgICAgIC8vVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgIGR5bmFtaWMgY29kZXMgYmxvY2slc1xcblwiLFxuICAgICAgICAgICAgLy8gICAgICAgIHN0YXRlLmxhc3QgPyBcIiAobGFzdClcIiA6IFwiXCIpKTtcbiAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBUQUJMRTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgYmxvY2sgdHlwZSc7XG4gICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICB9XG4gICAgICAgIC8vLS0tIERST1BCSVRTKDIpIC0tLS8vXG4gICAgICAgIGhvbGQgPj4+PSAyO1xuICAgICAgICBiaXRzIC09IDI7XG4gICAgICAgIC8vLS0tLy9cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNUT1JFRDpcbiAgICAgICAgLy8tLS0gQllURUJJVFMoKSAtLS0vLyAvKiBnbyB0byBieXRlIGJvdW5kYXJ5ICovXG4gICAgICAgIGhvbGQgPj4+PSBiaXRzICYgNztcbiAgICAgICAgYml0cyAtPSBiaXRzICYgNztcbiAgICAgICAgLy8tLS0vL1xuICAgICAgICAvLz09PSBORUVEQklUUygzMik7ICovXG4gICAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHtcbiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICB9XG4gICAgICAgIC8vPT09Ly9cbiAgICAgICAgaWYgKChob2xkICYgMHhmZmZmKSAhPT0gKChob2xkID4+PiAxNikgXiAweGZmZmYpKSB7XG4gICAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3Rocyc7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5sZW5ndGggPSBob2xkICYgMHhmZmZmO1xuICAgICAgICAvL1RyYWNldigoc3RkZXJyLCBcImluZmxhdGU6ICAgICAgIHN0b3JlZCBsZW5ndGggJXVcXG5cIixcbiAgICAgICAgLy8gICAgICAgIHN0YXRlLmxlbmd0aCkpO1xuICAgICAgICAvLz09PSBJTklUQklUUygpO1xuICAgICAgICBob2xkID0gMDtcbiAgICAgICAgYml0cyA9IDA7XG4gICAgICAgIC8vPT09Ly9cbiAgICAgICAgc3RhdGUubW9kZSA9IENPUFlfO1xuICAgICAgICBpZiAoZmx1c2ggPT09IFpfVFJFRVMpIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgQ09QWV86XG4gICAgICAgIHN0YXRlLm1vZGUgPSBDT1BZO1xuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlIENPUFk6XG4gICAgICAgIGNvcHkgPSBzdGF0ZS5sZW5ndGg7XG4gICAgICAgIGlmIChjb3B5KSB7XG4gICAgICAgICAgaWYgKGNvcHkgPiBoYXZlKSB7IGNvcHkgPSBoYXZlOyB9XG4gICAgICAgICAgaWYgKGNvcHkgPiBsZWZ0KSB7IGNvcHkgPSBsZWZ0OyB9XG4gICAgICAgICAgaWYgKGNvcHkgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgLy8tLS0gem1lbWNweShwdXQsIG5leHQsIGNvcHkpOyAtLS1cbiAgICAgICAgICBvdXRwdXQuc2V0KGlucHV0LnN1YmFycmF5KG5leHQsIG5leHQgKyBjb3B5KSwgcHV0KTtcbiAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgaGF2ZSAtPSBjb3B5O1xuICAgICAgICAgIG5leHQgKz0gY29weTtcbiAgICAgICAgICBsZWZ0IC09IGNvcHk7XG4gICAgICAgICAgcHV0ICs9IGNvcHk7XG4gICAgICAgICAgc3RhdGUubGVuZ3RoIC09IGNvcHk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICBzdG9yZWQgZW5kXFxuXCIpKTtcbiAgICAgICAgc3RhdGUubW9kZSA9IFRZUEU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUQUJMRTpcbiAgICAgICAgLy89PT0gTkVFREJJVFMoMTQpOyAqL1xuICAgICAgICB3aGlsZSAoYml0cyA8IDE0KSB7XG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgfVxuICAgICAgICAvLz09PS8vXG4gICAgICAgIHN0YXRlLm5sZW4gPSAoaG9sZCAmIDB4MWYpLypCSVRTKDUpKi8gKyAyNTc7XG4gICAgICAgIC8vLS0tIERST1BCSVRTKDUpIC0tLS8vXG4gICAgICAgIGhvbGQgPj4+PSA1O1xuICAgICAgICBiaXRzIC09IDU7XG4gICAgICAgIC8vLS0tLy9cbiAgICAgICAgc3RhdGUubmRpc3QgPSAoaG9sZCAmIDB4MWYpLypCSVRTKDUpKi8gKyAxO1xuICAgICAgICAvLy0tLSBEUk9QQklUUyg1KSAtLS0vL1xuICAgICAgICBob2xkID4+Pj0gNTtcbiAgICAgICAgYml0cyAtPSA1O1xuICAgICAgICAvLy0tLS8vXG4gICAgICAgIHN0YXRlLm5jb2RlID0gKGhvbGQgJiAweDBmKS8qQklUUyg0KSovICsgNDtcbiAgICAgICAgLy8tLS0gRFJPUEJJVFMoNCkgLS0tLy9cbiAgICAgICAgaG9sZCA+Pj49IDQ7XG4gICAgICAgIGJpdHMgLT0gNDtcbiAgICAgICAgLy8tLS0vL1xuLy8jaWZuZGVmIFBLWklQX0JVR19XT1JLQVJPVU5EXG4gICAgICAgIGlmIChzdGF0ZS5ubGVuID4gMjg2IHx8IHN0YXRlLm5kaXN0ID4gMzApIHtcbiAgICAgICAgICBzdHJtLm1zZyA9ICd0b28gbWFueSBsZW5ndGggb3IgZGlzdGFuY2Ugc3ltYm9scyc7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuLy8jZW5kaWZcbiAgICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICB0YWJsZSBzaXplcyBva1xcblwiKSk7XG4gICAgICAgIHN0YXRlLmhhdmUgPSAwO1xuICAgICAgICBzdGF0ZS5tb2RlID0gTEVOTEVOUztcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBMRU5MRU5TOlxuICAgICAgICB3aGlsZSAoc3RhdGUuaGF2ZSA8IHN0YXRlLm5jb2RlKSB7XG4gICAgICAgICAgLy89PT0gTkVFREJJVFMoMyk7XG4gICAgICAgICAgd2hpbGUgKGJpdHMgPCAzKSB7XG4gICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLz09PS8vXG4gICAgICAgICAgc3RhdGUubGVuc1tvcmRlcltzdGF0ZS5oYXZlKytdXSA9IChob2xkICYgMHgwNyk7Ly9CSVRTKDMpO1xuICAgICAgICAgIC8vLS0tIERST1BCSVRTKDMpIC0tLS8vXG4gICAgICAgICAgaG9sZCA+Pj49IDM7XG4gICAgICAgICAgYml0cyAtPSAzO1xuICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoc3RhdGUuaGF2ZSA8IDE5KSB7XG4gICAgICAgICAgc3RhdGUubGVuc1tvcmRlcltzdGF0ZS5oYXZlKytdXSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2UgaGF2ZSBzZXBhcmF0ZSB0YWJsZXMgJiBubyBwb2ludGVycy4gMiBjb21tZW50ZWQgbGluZXMgYmVsb3cgbm90IG5lZWRlZC5cbiAgICAgICAgLy9zdGF0ZS5uZXh0ID0gc3RhdGUuY29kZXM7XG4gICAgICAgIC8vc3RhdGUubGVuY29kZSA9IHN0YXRlLm5leHQ7XG4gICAgICAgIC8vIFN3aXRjaCB0byB1c2UgZHluYW1pYyB0YWJsZVxuICAgICAgICBzdGF0ZS5sZW5jb2RlID0gc3RhdGUubGVuZHluO1xuICAgICAgICBzdGF0ZS5sZW5iaXRzID0gNztcblxuICAgICAgICBvcHRzID0geyBiaXRzOiBzdGF0ZS5sZW5iaXRzIH07XG4gICAgICAgIHJldCA9IGluZnRyZWVzKENPREVTLCBzdGF0ZS5sZW5zLCAwLCAxOSwgc3RhdGUubGVuY29kZSwgMCwgc3RhdGUud29yaywgb3B0cyk7XG4gICAgICAgIHN0YXRlLmxlbmJpdHMgPSBvcHRzLmJpdHM7XG5cbiAgICAgICAgaWYgKHJldCkge1xuICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgY29kZSBsZW5ndGhzIHNldCc7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvL1RyYWNldigoc3RkZXJyLCBcImluZmxhdGU6ICAgICAgIGNvZGUgbGVuZ3RocyBva1xcblwiKSk7XG4gICAgICAgIHN0YXRlLmhhdmUgPSAwO1xuICAgICAgICBzdGF0ZS5tb2RlID0gQ09ERUxFTlM7XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgQ09ERUxFTlM6XG4gICAgICAgIHdoaWxlIChzdGF0ZS5oYXZlIDwgc3RhdGUubmxlbiArIHN0YXRlLm5kaXN0KSB7XG4gICAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgICAgaGVyZSA9IHN0YXRlLmxlbmNvZGVbaG9sZCAmICgoMSA8PCBzdGF0ZS5sZW5iaXRzKSAtIDEpXTsvKkJJVFMoc3RhdGUubGVuYml0cykqL1xuICAgICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7XG4gICAgICAgICAgICBoZXJlX29wID0gKGhlcmUgPj4+IDE2KSAmIDB4ZmY7XG4gICAgICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiAweGZmZmY7XG5cbiAgICAgICAgICAgIGlmICgoaGVyZV9iaXRzKSA8PSBiaXRzKSB7IGJyZWFrOyB9XG4gICAgICAgICAgICAvLy0tLSBQVUxMQllURSgpIC0tLS8vXG4gICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGVyZV92YWwgPCAxNikge1xuICAgICAgICAgICAgLy8tLS0gRFJPUEJJVFMoaGVyZS5iaXRzKSAtLS0vL1xuICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0cztcbiAgICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzO1xuICAgICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgICAgc3RhdGUubGVuc1tzdGF0ZS5oYXZlKytdID0gaGVyZV92YWw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGhlcmVfdmFsID09PSAxNikge1xuICAgICAgICAgICAgICAvLz09PSBORUVEQklUUyhoZXJlLmJpdHMgKyAyKTtcbiAgICAgICAgICAgICAgbiA9IGhlcmVfYml0cyArIDI7XG4gICAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgbikge1xuICAgICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy89PT0vL1xuICAgICAgICAgICAgICAvLy0tLSBEUk9QQklUUyhoZXJlLmJpdHMpIC0tLS8vXG4gICAgICAgICAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7XG4gICAgICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzO1xuICAgICAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgICAgIGlmIChzdGF0ZS5oYXZlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCc7XG4gICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsZW4gPSBzdGF0ZS5sZW5zW3N0YXRlLmhhdmUgLSAxXTtcbiAgICAgICAgICAgICAgY29weSA9IDMgKyAoaG9sZCAmIDB4MDMpOy8vQklUUygyKTtcbiAgICAgICAgICAgICAgLy8tLS0gRFJPUEJJVFMoMikgLS0tLy9cbiAgICAgICAgICAgICAgaG9sZCA+Pj49IDI7XG4gICAgICAgICAgICAgIGJpdHMgLT0gMjtcbiAgICAgICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaGVyZV92YWwgPT09IDE3KSB7XG4gICAgICAgICAgICAgIC8vPT09IE5FRURCSVRTKGhlcmUuYml0cyArIDMpO1xuICAgICAgICAgICAgICBuID0gaGVyZV9iaXRzICsgMztcbiAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLz09PS8vXG4gICAgICAgICAgICAgIC8vLS0tIERST1BCSVRTKGhlcmUuYml0cykgLS0tLy9cbiAgICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0cztcbiAgICAgICAgICAgICAgYml0cyAtPSBoZXJlX2JpdHM7XG4gICAgICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgICAgICAgbGVuID0gMDtcbiAgICAgICAgICAgICAgY29weSA9IDMgKyAoaG9sZCAmIDB4MDcpOy8vQklUUygzKTtcbiAgICAgICAgICAgICAgLy8tLS0gRFJPUEJJVFMoMykgLS0tLy9cbiAgICAgICAgICAgICAgaG9sZCA+Pj49IDM7XG4gICAgICAgICAgICAgIGJpdHMgLT0gMztcbiAgICAgICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIC8vPT09IE5FRURCSVRTKGhlcmUuYml0cyArIDcpO1xuICAgICAgICAgICAgICBuID0gaGVyZV9iaXRzICsgNztcbiAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLz09PS8vXG4gICAgICAgICAgICAgIC8vLS0tIERST1BCSVRTKGhlcmUuYml0cykgLS0tLy9cbiAgICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0cztcbiAgICAgICAgICAgICAgYml0cyAtPSBoZXJlX2JpdHM7XG4gICAgICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgICAgICAgbGVuID0gMDtcbiAgICAgICAgICAgICAgY29weSA9IDExICsgKGhvbGQgJiAweDdmKTsvL0JJVFMoNyk7XG4gICAgICAgICAgICAgIC8vLS0tIERST1BCSVRTKDcpIC0tLS8vXG4gICAgICAgICAgICAgIGhvbGQgPj4+PSA3O1xuICAgICAgICAgICAgICBiaXRzIC09IDc7XG4gICAgICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdGF0ZS5oYXZlICsgY29weSA+IHN0YXRlLm5sZW4gKyBzdGF0ZS5uZGlzdCkge1xuICAgICAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0JztcbiAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoY29weS0tKSB7XG4gICAgICAgICAgICAgIHN0YXRlLmxlbnNbc3RhdGUuaGF2ZSsrXSA9IGxlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKiBoYW5kbGUgZXJyb3IgYnJlYWtzIGluIHdoaWxlICovXG4gICAgICAgIGlmIChzdGF0ZS5tb2RlID09PSBCQUQpIHsgYnJlYWs7IH1cblxuICAgICAgICAvKiBjaGVjayBmb3IgZW5kLW9mLWJsb2NrIGNvZGUgKGJldHRlciBoYXZlIG9uZSkgKi9cbiAgICAgICAgaWYgKHN0YXRlLmxlbnNbMjU2XSA9PT0gMCkge1xuICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayc7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIGJ1aWxkIGNvZGUgdGFibGVzIC0tIG5vdGU6IGRvIG5vdCBjaGFuZ2UgdGhlIGxlbmJpdHMgb3IgZGlzdGJpdHNcbiAgICAgICAgICAgdmFsdWVzIGhlcmUgKDkgYW5kIDYpIHdpdGhvdXQgcmVhZGluZyB0aGUgY29tbWVudHMgaW4gaW5mdHJlZXMuaFxuICAgICAgICAgICBjb25jZXJuaW5nIHRoZSBFTk9VR0ggY29uc3RhbnRzLCB3aGljaCBkZXBlbmQgb24gdGhvc2UgdmFsdWVzICovXG4gICAgICAgIHN0YXRlLmxlbmJpdHMgPSA5O1xuXG4gICAgICAgIG9wdHMgPSB7IGJpdHM6IHN0YXRlLmxlbmJpdHMgfTtcbiAgICAgICAgcmV0ID0gaW5mdHJlZXMoTEVOUywgc3RhdGUubGVucywgMCwgc3RhdGUubmxlbiwgc3RhdGUubGVuY29kZSwgMCwgc3RhdGUud29yaywgb3B0cyk7XG4gICAgICAgIC8vIFdlIGhhdmUgc2VwYXJhdGUgdGFibGVzICYgbm8gcG9pbnRlcnMuIDIgY29tbWVudGVkIGxpbmVzIGJlbG93IG5vdCBuZWVkZWQuXG4gICAgICAgIC8vIHN0YXRlLm5leHRfaW5kZXggPSBvcHRzLnRhYmxlX2luZGV4O1xuICAgICAgICBzdGF0ZS5sZW5iaXRzID0gb3B0cy5iaXRzO1xuICAgICAgICAvLyBzdGF0ZS5sZW5jb2RlID0gc3RhdGUubmV4dDtcblxuICAgICAgICBpZiAocmV0KSB7XG4gICAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMgc2V0JztcbiAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUuZGlzdGJpdHMgPSA2O1xuICAgICAgICAvL3N0YXRlLmRpc3Rjb2RlLmNvcHkoc3RhdGUuY29kZXMpO1xuICAgICAgICAvLyBTd2l0Y2ggdG8gdXNlIGR5bmFtaWMgdGFibGVcbiAgICAgICAgc3RhdGUuZGlzdGNvZGUgPSBzdGF0ZS5kaXN0ZHluO1xuICAgICAgICBvcHRzID0geyBiaXRzOiBzdGF0ZS5kaXN0Yml0cyB9O1xuICAgICAgICByZXQgPSBpbmZ0cmVlcyhESVNUUywgc3RhdGUubGVucywgc3RhdGUubmxlbiwgc3RhdGUubmRpc3QsIHN0YXRlLmRpc3Rjb2RlLCAwLCBzdGF0ZS53b3JrLCBvcHRzKTtcbiAgICAgICAgLy8gV2UgaGF2ZSBzZXBhcmF0ZSB0YWJsZXMgJiBubyBwb2ludGVycy4gMiBjb21tZW50ZWQgbGluZXMgYmVsb3cgbm90IG5lZWRlZC5cbiAgICAgICAgLy8gc3RhdGUubmV4dF9pbmRleCA9IG9wdHMudGFibGVfaW5kZXg7XG4gICAgICAgIHN0YXRlLmRpc3RiaXRzID0gb3B0cy5iaXRzO1xuICAgICAgICAvLyBzdGF0ZS5kaXN0Y29kZSA9IHN0YXRlLm5leHQ7XG5cbiAgICAgICAgaWYgKHJldCkge1xuICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgZGlzdGFuY2VzIHNldCc7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvL1RyYWNldigoc3RkZXJyLCAnaW5mbGF0ZTogICAgICAgY29kZXMgb2tcXG4nKSk7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBMRU5fO1xuICAgICAgICBpZiAoZmx1c2ggPT09IFpfVFJFRVMpIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgTEVOXzpcbiAgICAgICAgc3RhdGUubW9kZSA9IExFTjtcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBMRU46XG4gICAgICAgIGlmIChoYXZlID49IDYgJiYgbGVmdCA+PSAyNTgpIHtcbiAgICAgICAgICAvLy0tLSBSRVNUT1JFKCkgLS0tXG4gICAgICAgICAgc3RybS5uZXh0X291dCA9IHB1dDtcbiAgICAgICAgICBzdHJtLmF2YWlsX291dCA9IGxlZnQ7XG4gICAgICAgICAgc3RybS5uZXh0X2luID0gbmV4dDtcbiAgICAgICAgICBzdHJtLmF2YWlsX2luID0gaGF2ZTtcbiAgICAgICAgICBzdGF0ZS5ob2xkID0gaG9sZDtcbiAgICAgICAgICBzdGF0ZS5iaXRzID0gYml0cztcbiAgICAgICAgICAvLy0tLVxuICAgICAgICAgIGluZmZhc3Qoc3RybSwgX291dCk7XG4gICAgICAgICAgLy8tLS0gTE9BRCgpIC0tLVxuICAgICAgICAgIHB1dCA9IHN0cm0ubmV4dF9vdXQ7XG4gICAgICAgICAgb3V0cHV0ID0gc3RybS5vdXRwdXQ7XG4gICAgICAgICAgbGVmdCA9IHN0cm0uYXZhaWxfb3V0O1xuICAgICAgICAgIG5leHQgPSBzdHJtLm5leHRfaW47XG4gICAgICAgICAgaW5wdXQgPSBzdHJtLmlucHV0O1xuICAgICAgICAgIGhhdmUgPSBzdHJtLmF2YWlsX2luO1xuICAgICAgICAgIGhvbGQgPSBzdGF0ZS5ob2xkO1xuICAgICAgICAgIGJpdHMgPSBzdGF0ZS5iaXRzO1xuICAgICAgICAgIC8vLS0tXG5cbiAgICAgICAgICBpZiAoc3RhdGUubW9kZSA9PT0gVFlQRSkge1xuICAgICAgICAgICAgc3RhdGUuYmFjayA9IC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5iYWNrID0gMDtcbiAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgIGhlcmUgPSBzdGF0ZS5sZW5jb2RlW2hvbGQgJiAoKDEgPDwgc3RhdGUubGVuYml0cykgLSAxKV07ICAvKkJJVFMoc3RhdGUubGVuYml0cykqL1xuICAgICAgICAgIGhlcmVfYml0cyA9IGhlcmUgPj4+IDI0O1xuICAgICAgICAgIGhlcmVfb3AgPSAoaGVyZSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiAweGZmZmY7XG5cbiAgICAgICAgICBpZiAoaGVyZV9iaXRzIDw9IGJpdHMpIHsgYnJlYWs7IH1cbiAgICAgICAgICAvLy0tLSBQVUxMQllURSgpIC0tLS8vXG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICAvLy0tLS8vXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhlcmVfb3AgJiYgKGhlcmVfb3AgJiAweGYwKSA9PT0gMCkge1xuICAgICAgICAgIGxhc3RfYml0cyA9IGhlcmVfYml0cztcbiAgICAgICAgICBsYXN0X29wID0gaGVyZV9vcDtcbiAgICAgICAgICBsYXN0X3ZhbCA9IGhlcmVfdmFsO1xuICAgICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgIGhlcmUgPSBzdGF0ZS5sZW5jb2RlW2xhc3RfdmFsICtcbiAgICAgICAgICAgICAgICAgICAgKChob2xkICYgKCgxIDw8IChsYXN0X2JpdHMgKyBsYXN0X29wKSkgLSAxKSkvKkJJVFMobGFzdC5iaXRzICsgbGFzdC5vcCkqLyA+PiBsYXN0X2JpdHMpXTtcbiAgICAgICAgICAgIGhlcmVfYml0cyA9IGhlcmUgPj4+IDI0O1xuICAgICAgICAgICAgaGVyZV9vcCA9IChoZXJlID4+PiAxNikgJiAweGZmO1xuICAgICAgICAgICAgaGVyZV92YWwgPSBoZXJlICYgMHhmZmZmO1xuXG4gICAgICAgICAgICBpZiAoKGxhc3RfYml0cyArIGhlcmVfYml0cykgPD0gYml0cykgeyBicmVhazsgfVxuICAgICAgICAgICAgLy8tLS0gUFVMTEJZVEUoKSAtLS0vL1xuICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8tLS0gRFJPUEJJVFMobGFzdC5iaXRzKSAtLS0vL1xuICAgICAgICAgIGhvbGQgPj4+PSBsYXN0X2JpdHM7XG4gICAgICAgICAgYml0cyAtPSBsYXN0X2JpdHM7XG4gICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgIHN0YXRlLmJhY2sgKz0gbGFzdF9iaXRzO1xuICAgICAgICB9XG4gICAgICAgIC8vLS0tIERST1BCSVRTKGhlcmUuYml0cykgLS0tLy9cbiAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0cztcbiAgICAgICAgYml0cyAtPSBoZXJlX2JpdHM7XG4gICAgICAgIC8vLS0tLy9cbiAgICAgICAgc3RhdGUuYmFjayArPSBoZXJlX2JpdHM7XG4gICAgICAgIHN0YXRlLmxlbmd0aCA9IGhlcmVfdmFsO1xuICAgICAgICBpZiAoaGVyZV9vcCA9PT0gMCkge1xuICAgICAgICAgIC8vVHJhY2V2digoc3RkZXJyLCBoZXJlLnZhbCA+PSAweDIwICYmIGhlcmUudmFsIDwgMHg3ZiA/XG4gICAgICAgICAgLy8gICAgICAgIFwiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsICclYydcXG5cIiA6XG4gICAgICAgICAgLy8gICAgICAgIFwiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsIDB4JTAyeFxcblwiLCBoZXJlLnZhbCkpO1xuICAgICAgICAgIHN0YXRlLm1vZGUgPSBMSVQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhlcmVfb3AgJiAzMikge1xuICAgICAgICAgIC8vVHJhY2V2digoc3RkZXJyLCBcImluZmxhdGU6ICAgICAgICAgZW5kIG9mIGJsb2NrXFxuXCIpKTtcbiAgICAgICAgICBzdGF0ZS5iYWNrID0gLTE7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IFRZUEU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhlcmVfb3AgJiA2NCkge1xuICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSc7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5leHRyYSA9IGhlcmVfb3AgJiAxNTtcbiAgICAgICAgc3RhdGUubW9kZSA9IExFTkVYVDtcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBMRU5FWFQ6XG4gICAgICAgIGlmIChzdGF0ZS5leHRyYSkge1xuICAgICAgICAgIC8vPT09IE5FRURCSVRTKHN0YXRlLmV4dHJhKTtcbiAgICAgICAgICBuID0gc3RhdGUuZXh0cmE7XG4gICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7XG4gICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLz09PS8vXG4gICAgICAgICAgc3RhdGUubGVuZ3RoICs9IGhvbGQgJiAoKDEgPDwgc3RhdGUuZXh0cmEpIC0gMSkvKkJJVFMoc3RhdGUuZXh0cmEpKi87XG4gICAgICAgICAgLy8tLS0gRFJPUEJJVFMoc3RhdGUuZXh0cmEpIC0tLS8vXG4gICAgICAgICAgaG9sZCA+Pj49IHN0YXRlLmV4dHJhO1xuICAgICAgICAgIGJpdHMgLT0gc3RhdGUuZXh0cmE7XG4gICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgIHN0YXRlLmJhY2sgKz0gc3RhdGUuZXh0cmE7XG4gICAgICAgIH1cbiAgICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgICAgICBsZW5ndGggJXVcXG5cIiwgc3RhdGUubGVuZ3RoKSk7XG4gICAgICAgIHN0YXRlLndhcyA9IHN0YXRlLmxlbmd0aDtcbiAgICAgICAgc3RhdGUubW9kZSA9IERJU1Q7XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgRElTVDpcbiAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgIGhlcmUgPSBzdGF0ZS5kaXN0Y29kZVtob2xkICYgKCgxIDw8IHN0YXRlLmRpc3RiaXRzKSAtIDEpXTsvKkJJVFMoc3RhdGUuZGlzdGJpdHMpKi9cbiAgICAgICAgICBoZXJlX2JpdHMgPSBoZXJlID4+PiAyNDtcbiAgICAgICAgICBoZXJlX29wID0gKGhlcmUgPj4+IDE2KSAmIDB4ZmY7XG4gICAgICAgICAgaGVyZV92YWwgPSBoZXJlICYgMHhmZmZmO1xuXG4gICAgICAgICAgaWYgKChoZXJlX2JpdHMpIDw9IGJpdHMpIHsgYnJlYWs7IH1cbiAgICAgICAgICAvLy0tLSBQVUxMQllURSgpIC0tLS8vXG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICAvLy0tLS8vXG4gICAgICAgIH1cbiAgICAgICAgaWYgKChoZXJlX29wICYgMHhmMCkgPT09IDApIHtcbiAgICAgICAgICBsYXN0X2JpdHMgPSBoZXJlX2JpdHM7XG4gICAgICAgICAgbGFzdF9vcCA9IGhlcmVfb3A7XG4gICAgICAgICAgbGFzdF92YWwgPSBoZXJlX3ZhbDtcbiAgICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgICBoZXJlID0gc3RhdGUuZGlzdGNvZGVbbGFzdF92YWwgK1xuICAgICAgICAgICAgICAgICAgICAoKGhvbGQgJiAoKDEgPDwgKGxhc3RfYml0cyArIGxhc3Rfb3ApKSAtIDEpKS8qQklUUyhsYXN0LmJpdHMgKyBsYXN0Lm9wKSovID4+IGxhc3RfYml0cyldO1xuICAgICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7XG4gICAgICAgICAgICBoZXJlX29wID0gKGhlcmUgPj4+IDE2KSAmIDB4ZmY7XG4gICAgICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiAweGZmZmY7XG5cbiAgICAgICAgICAgIGlmICgobGFzdF9iaXRzICsgaGVyZV9iaXRzKSA8PSBiaXRzKSB7IGJyZWFrOyB9XG4gICAgICAgICAgICAvLy0tLSBQVUxMQllURSgpIC0tLS8vXG4gICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLy0tLSBEUk9QQklUUyhsYXN0LmJpdHMpIC0tLS8vXG4gICAgICAgICAgaG9sZCA+Pj49IGxhc3RfYml0cztcbiAgICAgICAgICBiaXRzIC09IGxhc3RfYml0cztcbiAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgc3RhdGUuYmFjayArPSBsYXN0X2JpdHM7XG4gICAgICAgIH1cbiAgICAgICAgLy8tLS0gRFJPUEJJVFMoaGVyZS5iaXRzKSAtLS0vL1xuICAgICAgICBob2xkID4+Pj0gaGVyZV9iaXRzO1xuICAgICAgICBiaXRzIC09IGhlcmVfYml0cztcbiAgICAgICAgLy8tLS0vL1xuICAgICAgICBzdGF0ZS5iYWNrICs9IGhlcmVfYml0cztcbiAgICAgICAgaWYgKGhlcmVfb3AgJiA2NCkge1xuICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgZGlzdGFuY2UgY29kZSc7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5vZmZzZXQgPSBoZXJlX3ZhbDtcbiAgICAgICAgc3RhdGUuZXh0cmEgPSAoaGVyZV9vcCkgJiAxNTtcbiAgICAgICAgc3RhdGUubW9kZSA9IERJU1RFWFQ7XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgRElTVEVYVDpcbiAgICAgICAgaWYgKHN0YXRlLmV4dHJhKSB7XG4gICAgICAgICAgLy89PT0gTkVFREJJVFMoc3RhdGUuZXh0cmEpO1xuICAgICAgICAgIG4gPSBzdGF0ZS5leHRyYTtcbiAgICAgICAgICB3aGlsZSAoYml0cyA8IG4pIHtcbiAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vPT09Ly9cbiAgICAgICAgICBzdGF0ZS5vZmZzZXQgKz0gaG9sZCAmICgoMSA8PCBzdGF0ZS5leHRyYSkgLSAxKS8qQklUUyhzdGF0ZS5leHRyYSkqLztcbiAgICAgICAgICAvLy0tLSBEUk9QQklUUyhzdGF0ZS5leHRyYSkgLS0tLy9cbiAgICAgICAgICBob2xkID4+Pj0gc3RhdGUuZXh0cmE7XG4gICAgICAgICAgYml0cyAtPSBzdGF0ZS5leHRyYTtcbiAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgc3RhdGUuYmFjayArPSBzdGF0ZS5leHRyYTtcbiAgICAgICAgfVxuLy8jaWZkZWYgSU5GTEFURV9TVFJJQ1RcbiAgICAgICAgaWYgKHN0YXRlLm9mZnNldCA+IHN0YXRlLmRtYXgpIHtcbiAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayc7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuLy8jZW5kaWZcbiAgICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgICAgICBkaXN0YW5jZSAldVxcblwiLCBzdGF0ZS5vZmZzZXQpKTtcbiAgICAgICAgc3RhdGUubW9kZSA9IE1BVENIO1xuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlIE1BVENIOlxuICAgICAgICBpZiAobGVmdCA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgY29weSA9IF9vdXQgLSBsZWZ0O1xuICAgICAgICBpZiAoc3RhdGUub2Zmc2V0ID4gY29weSkgeyAgICAgICAgIC8qIGNvcHkgZnJvbSB3aW5kb3cgKi9cbiAgICAgICAgICBjb3B5ID0gc3RhdGUub2Zmc2V0IC0gY29weTtcbiAgICAgICAgICBpZiAoY29weSA+IHN0YXRlLndoYXZlKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGUuc2FuZSkge1xuICAgICAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayc7XG4gICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuLy8gKCEpIFRoaXMgYmxvY2sgaXMgZGlzYWJsZWQgaW4gemxpYiBkZWZhdWx0cyxcbi8vIGRvbid0IGVuYWJsZSBpdCBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHlcbi8vI2lmZGVmIElORkxBVEVfQUxMT1dfSU5WQUxJRF9ESVNUQU5DRV9UT09GQVJfQVJSUlxuLy8gICAgICAgICAgVHJhY2UoKHN0ZGVyciwgXCJpbmZsYXRlLmMgdG9vIGZhclxcblwiKSk7XG4vLyAgICAgICAgICBjb3B5IC09IHN0YXRlLndoYXZlO1xuLy8gICAgICAgICAgaWYgKGNvcHkgPiBzdGF0ZS5sZW5ndGgpIHsgY29weSA9IHN0YXRlLmxlbmd0aDsgfVxuLy8gICAgICAgICAgaWYgKGNvcHkgPiBsZWZ0KSB7IGNvcHkgPSBsZWZ0OyB9XG4vLyAgICAgICAgICBsZWZ0IC09IGNvcHk7XG4vLyAgICAgICAgICBzdGF0ZS5sZW5ndGggLT0gY29weTtcbi8vICAgICAgICAgIGRvIHtcbi8vICAgICAgICAgICAgb3V0cHV0W3B1dCsrXSA9IDA7XG4vLyAgICAgICAgICB9IHdoaWxlICgtLWNvcHkpO1xuLy8gICAgICAgICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgeyBzdGF0ZS5tb2RlID0gTEVOOyB9XG4vLyAgICAgICAgICBicmVhaztcbi8vI2VuZGlmXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb3B5ID4gc3RhdGUud25leHQpIHtcbiAgICAgICAgICAgIGNvcHkgLT0gc3RhdGUud25leHQ7XG4gICAgICAgICAgICBmcm9tID0gc3RhdGUud3NpemUgLSBjb3B5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZyb20gPSBzdGF0ZS53bmV4dCAtIGNvcHk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb3B5ID4gc3RhdGUubGVuZ3RoKSB7IGNvcHkgPSBzdGF0ZS5sZW5ndGg7IH1cbiAgICAgICAgICBmcm9tX3NvdXJjZSA9IHN0YXRlLndpbmRvdztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb3B5IGZyb20gb3V0cHV0ICovXG4gICAgICAgICAgZnJvbV9zb3VyY2UgPSBvdXRwdXQ7XG4gICAgICAgICAgZnJvbSA9IHB1dCAtIHN0YXRlLm9mZnNldDtcbiAgICAgICAgICBjb3B5ID0gc3RhdGUubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb3B5ID4gbGVmdCkgeyBjb3B5ID0gbGVmdDsgfVxuICAgICAgICBsZWZ0IC09IGNvcHk7XG4gICAgICAgIHN0YXRlLmxlbmd0aCAtPSBjb3B5O1xuICAgICAgICBkbyB7XG4gICAgICAgICAgb3V0cHV0W3B1dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107XG4gICAgICAgIH0gd2hpbGUgKC0tY29weSk7XG4gICAgICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHsgc3RhdGUubW9kZSA9IExFTjsgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTElUOlxuICAgICAgICBpZiAobGVmdCA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgb3V0cHV0W3B1dCsrXSA9IHN0YXRlLmxlbmd0aDtcbiAgICAgICAgbGVmdC0tO1xuICAgICAgICBzdGF0ZS5tb2RlID0gTEVOO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ0hFQ0s6XG4gICAgICAgIGlmIChzdGF0ZS53cmFwKSB7XG4gICAgICAgICAgLy89PT0gTkVFREJJVFMoMzIpO1xuICAgICAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHtcbiAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgICAgLy8gVXNlICd8JyBpbnN0ZWFkIG9mICcrJyB0byBtYWtlIHN1cmUgdGhhdCByZXN1bHQgaXMgc2lnbmVkXG4gICAgICAgICAgICBob2xkIHw9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy89PT0vL1xuICAgICAgICAgIF9vdXQgLT0gbGVmdDtcbiAgICAgICAgICBzdHJtLnRvdGFsX291dCArPSBfb3V0O1xuICAgICAgICAgIHN0YXRlLnRvdGFsICs9IF9vdXQ7XG4gICAgICAgICAgaWYgKChzdGF0ZS53cmFwICYgNCkgJiYgX291dCkge1xuICAgICAgICAgICAgc3RybS5hZGxlciA9IHN0YXRlLmNoZWNrID1cbiAgICAgICAgICAgICAgICAvKlVQREFURV9DSEVDSyhzdGF0ZS5jaGVjaywgcHV0IC0gX291dCwgX291dCk7Ki9cbiAgICAgICAgICAgICAgICAoc3RhdGUuZmxhZ3MgPyBjcmMzMl8xKHN0YXRlLmNoZWNrLCBvdXRwdXQsIF9vdXQsIHB1dCAtIF9vdXQpIDogYWRsZXIzMl8xKHN0YXRlLmNoZWNrLCBvdXRwdXQsIF9vdXQsIHB1dCAtIF9vdXQpKTtcblxuICAgICAgICAgIH1cbiAgICAgICAgICBfb3V0ID0gbGVmdDtcbiAgICAgICAgICAvLyBOQjogY3JjMzIgc3RvcmVkIGFzIHNpZ25lZCAzMi1iaXQgaW50LCB6c3dhcDMyIHJldHVybnMgc2lnbmVkIHRvb1xuICAgICAgICAgIGlmICgoc3RhdGUud3JhcCAmIDQpICYmIChzdGF0ZS5mbGFncyA/IGhvbGQgOiB6c3dhcDMyKGhvbGQpKSAhPT0gc3RhdGUuY2hlY2spIHtcbiAgICAgICAgICAgIHN0cm0ubXNnID0gJ2luY29ycmVjdCBkYXRhIGNoZWNrJztcbiAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy89PT0gSU5JVEJJVFMoKTtcbiAgICAgICAgICBob2xkID0gMDtcbiAgICAgICAgICBiaXRzID0gMDtcbiAgICAgICAgICAvLz09PS8vXG4gICAgICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgIGNoZWNrIG1hdGNoZXMgdHJhaWxlclxcblwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUubW9kZSA9IExFTkdUSDtcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBMRU5HVEg6XG4gICAgICAgIGlmIChzdGF0ZS53cmFwICYmIHN0YXRlLmZsYWdzKSB7XG4gICAgICAgICAgLy89PT0gTkVFREJJVFMoMzIpO1xuICAgICAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHtcbiAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vPT09Ly9cbiAgICAgICAgICBpZiAoKHN0YXRlLndyYXAgJiA0KSAmJiBob2xkICE9PSAoc3RhdGUudG90YWwgJiAweGZmZmZmZmZmKSkge1xuICAgICAgICAgICAgc3RybS5tc2cgPSAnaW5jb3JyZWN0IGxlbmd0aCBjaGVjayc7XG4gICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vPT09IElOSVRCSVRTKCk7XG4gICAgICAgICAgaG9sZCA9IDA7XG4gICAgICAgICAgYml0cyA9IDA7XG4gICAgICAgICAgLy89PT0vL1xuICAgICAgICAgIC8vVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogICBsZW5ndGggbWF0Y2hlcyB0cmFpbGVyXFxuXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5tb2RlID0gRE9ORTtcbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSBET05FOlxuICAgICAgICByZXQgPSBaX1NUUkVBTV9FTkQkMTtcbiAgICAgICAgYnJlYWsgaW5mX2xlYXZlO1xuICAgICAgY2FzZSBCQUQ6XG4gICAgICAgIHJldCA9IFpfREFUQV9FUlJPUiQxO1xuICAgICAgICBicmVhayBpbmZfbGVhdmU7XG4gICAgICBjYXNlIE1FTTpcbiAgICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SJDE7XG4gICAgICBjYXNlIFNZTkM6XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUiQxO1xuICAgIH1cbiAgfVxuXG4gIC8vIGluZl9sZWF2ZSA8LSBoZXJlIGlzIHJlYWwgcGxhY2UgZm9yIFwiZ290byBpbmZfbGVhdmVcIiwgZW11bGF0ZWQgdmlhIFwiYnJlYWsgaW5mX2xlYXZlXCJcblxuICAvKlxuICAgICBSZXR1cm4gZnJvbSBpbmZsYXRlKCksIHVwZGF0aW5nIHRoZSB0b3RhbCBjb3VudHMgYW5kIHRoZSBjaGVjayB2YWx1ZS5cbiAgICAgSWYgdGhlcmUgd2FzIG5vIHByb2dyZXNzIGR1cmluZyB0aGUgaW5mbGF0ZSgpIGNhbGwsIHJldHVybiBhIGJ1ZmZlclxuICAgICBlcnJvci4gIENhbGwgdXBkYXRld2luZG93KCkgdG8gY3JlYXRlIGFuZC9vciB1cGRhdGUgdGhlIHdpbmRvdyBzdGF0ZS5cbiAgICAgTm90ZTogYSBtZW1vcnkgZXJyb3IgZnJvbSBpbmZsYXRlKCkgaXMgbm9uLXJlY292ZXJhYmxlLlxuICAgKi9cblxuICAvLy0tLSBSRVNUT1JFKCkgLS0tXG4gIHN0cm0ubmV4dF9vdXQgPSBwdXQ7XG4gIHN0cm0uYXZhaWxfb3V0ID0gbGVmdDtcbiAgc3RybS5uZXh0X2luID0gbmV4dDtcbiAgc3RybS5hdmFpbF9pbiA9IGhhdmU7XG4gIHN0YXRlLmhvbGQgPSBob2xkO1xuICBzdGF0ZS5iaXRzID0gYml0cztcbiAgLy8tLS1cblxuICBpZiAoc3RhdGUud3NpemUgfHwgKF9vdXQgIT09IHN0cm0uYXZhaWxfb3V0ICYmIHN0YXRlLm1vZGUgPCBCQUQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUubW9kZSA8IENIRUNLIHx8IGZsdXNoICE9PSBaX0ZJTklTSCQxKSkpIHtcbiAgICBpZiAodXBkYXRld2luZG93KHN0cm0sIHN0cm0ub3V0cHV0LCBzdHJtLm5leHRfb3V0LCBfb3V0IC0gc3RybS5hdmFpbF9vdXQpKSA7XG4gIH1cbiAgX2luIC09IHN0cm0uYXZhaWxfaW47XG4gIF9vdXQgLT0gc3RybS5hdmFpbF9vdXQ7XG4gIHN0cm0udG90YWxfaW4gKz0gX2luO1xuICBzdHJtLnRvdGFsX291dCArPSBfb3V0O1xuICBzdGF0ZS50b3RhbCArPSBfb3V0O1xuICBpZiAoKHN0YXRlLndyYXAgJiA0KSAmJiBfb3V0KSB7XG4gICAgc3RybS5hZGxlciA9IHN0YXRlLmNoZWNrID0gLypVUERBVEVfQ0hFQ0soc3RhdGUuY2hlY2ssIHN0cm0ubmV4dF9vdXQgLSBfb3V0LCBfb3V0KTsqL1xuICAgICAgKHN0YXRlLmZsYWdzID8gY3JjMzJfMShzdGF0ZS5jaGVjaywgb3V0cHV0LCBfb3V0LCBzdHJtLm5leHRfb3V0IC0gX291dCkgOiBhZGxlcjMyXzEoc3RhdGUuY2hlY2ssIG91dHB1dCwgX291dCwgc3RybS5uZXh0X291dCAtIF9vdXQpKTtcbiAgfVxuICBzdHJtLmRhdGFfdHlwZSA9IHN0YXRlLmJpdHMgKyAoc3RhdGUubGFzdCA/IDY0IDogMCkgK1xuICAgICAgICAgICAgICAgICAgICAoc3RhdGUubW9kZSA9PT0gVFlQRSA/IDEyOCA6IDApICtcbiAgICAgICAgICAgICAgICAgICAgKHN0YXRlLm1vZGUgPT09IExFTl8gfHwgc3RhdGUubW9kZSA9PT0gQ09QWV8gPyAyNTYgOiAwKTtcbiAgaWYgKCgoX2luID09PSAwICYmIF9vdXQgPT09IDApIHx8IGZsdXNoID09PSBaX0ZJTklTSCQxKSAmJiByZXQgPT09IFpfT0skMSkge1xuICAgIHJldCA9IFpfQlVGX0VSUk9SJDE7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn07XG5cblxuY29uc3QgaW5mbGF0ZUVuZCA9IChzdHJtKSA9PiB7XG5cbiAgaWYgKGluZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSB7XG4gICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SJDE7XG4gIH1cblxuICBsZXQgc3RhdGUgPSBzdHJtLnN0YXRlO1xuICBpZiAoc3RhdGUud2luZG93KSB7XG4gICAgc3RhdGUud2luZG93ID0gbnVsbDtcbiAgfVxuICBzdHJtLnN0YXRlID0gbnVsbDtcbiAgcmV0dXJuIFpfT0skMTtcbn07XG5cblxuY29uc3QgaW5mbGF0ZUdldEhlYWRlciA9IChzdHJtLCBoZWFkKSA9PiB7XG5cbiAgLyogY2hlY2sgc3RhdGUgKi9cbiAgaWYgKGluZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSB7IHJldHVybiBaX1NUUkVBTV9FUlJPUiQxOyB9XG4gIGNvbnN0IHN0YXRlID0gc3RybS5zdGF0ZTtcbiAgaWYgKChzdGF0ZS53cmFwICYgMikgPT09IDApIHsgcmV0dXJuIFpfU1RSRUFNX0VSUk9SJDE7IH1cblxuICAvKiBzYXZlIGhlYWRlciBzdHJ1Y3R1cmUgKi9cbiAgc3RhdGUuaGVhZCA9IGhlYWQ7XG4gIGhlYWQuZG9uZSA9IGZhbHNlO1xuICByZXR1cm4gWl9PSyQxO1xufTtcblxuXG5jb25zdCBpbmZsYXRlU2V0RGljdGlvbmFyeSA9IChzdHJtLCBkaWN0aW9uYXJ5KSA9PiB7XG4gIGNvbnN0IGRpY3RMZW5ndGggPSBkaWN0aW9uYXJ5Lmxlbmd0aDtcblxuICBsZXQgc3RhdGU7XG4gIGxldCBkaWN0aWQ7XG4gIGxldCByZXQ7XG5cbiAgLyogY2hlY2sgc3RhdGUgKi9cbiAgaWYgKGluZmxhdGVTdGF0ZUNoZWNrKHN0cm0pKSB7IHJldHVybiBaX1NUUkVBTV9FUlJPUiQxOyB9XG4gIHN0YXRlID0gc3RybS5zdGF0ZTtcblxuICBpZiAoc3RhdGUud3JhcCAhPT0gMCAmJiBzdGF0ZS5tb2RlICE9PSBESUNUKSB7XG4gICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SJDE7XG4gIH1cblxuICAvKiBjaGVjayBmb3IgY29ycmVjdCBkaWN0aW9uYXJ5IGlkZW50aWZpZXIgKi9cbiAgaWYgKHN0YXRlLm1vZGUgPT09IERJQ1QpIHtcbiAgICBkaWN0aWQgPSAxOyAvKiBhZGxlcjMyKDAsIG51bGwsIDApKi9cbiAgICAvKiBkaWN0aWQgPSBhZGxlcjMyKGRpY3RpZCwgZGljdGlvbmFyeSwgZGljdExlbmd0aCk7ICovXG4gICAgZGljdGlkID0gYWRsZXIzMl8xKGRpY3RpZCwgZGljdGlvbmFyeSwgZGljdExlbmd0aCwgMCk7XG4gICAgaWYgKGRpY3RpZCAhPT0gc3RhdGUuY2hlY2spIHtcbiAgICAgIHJldHVybiBaX0RBVEFfRVJST1IkMTtcbiAgICB9XG4gIH1cbiAgLyogY29weSBkaWN0aW9uYXJ5IHRvIHdpbmRvdyB1c2luZyB1cGRhdGV3aW5kb3coKSwgd2hpY2ggd2lsbCBhbWVuZCB0aGVcbiAgIGV4aXN0aW5nIGRpY3Rpb25hcnkgaWYgYXBwcm9wcmlhdGUgKi9cbiAgcmV0ID0gdXBkYXRld2luZG93KHN0cm0sIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgsIGRpY3RMZW5ndGgpO1xuICBpZiAocmV0KSB7XG4gICAgc3RhdGUubW9kZSA9IE1FTTtcbiAgICByZXR1cm4gWl9NRU1fRVJST1IkMTtcbiAgfVxuICBzdGF0ZS5oYXZlZGljdCA9IDE7XG4gIC8vIFRyYWNldigoc3RkZXJyLCBcImluZmxhdGU6ICAgZGljdGlvbmFyeSBzZXRcXG5cIikpO1xuICByZXR1cm4gWl9PSyQxO1xufTtcblxuXG52YXIgaW5mbGF0ZVJlc2V0XzEgPSBpbmZsYXRlUmVzZXQ7XG52YXIgaW5mbGF0ZVJlc2V0Ml8xID0gaW5mbGF0ZVJlc2V0MjtcbnZhciBpbmZsYXRlUmVzZXRLZWVwXzEgPSBpbmZsYXRlUmVzZXRLZWVwO1xudmFyIGluZmxhdGVJbml0XzEgPSBpbmZsYXRlSW5pdDtcbnZhciBpbmZsYXRlSW5pdDJfMSA9IGluZmxhdGVJbml0MjtcbnZhciBpbmZsYXRlXzIkMSA9IGluZmxhdGUkMjtcbnZhciBpbmZsYXRlRW5kXzEgPSBpbmZsYXRlRW5kO1xudmFyIGluZmxhdGVHZXRIZWFkZXJfMSA9IGluZmxhdGVHZXRIZWFkZXI7XG52YXIgaW5mbGF0ZVNldERpY3Rpb25hcnlfMSA9IGluZmxhdGVTZXREaWN0aW9uYXJ5O1xudmFyIGluZmxhdGVJbmZvID0gJ3Bha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCknO1xuXG4vKiBOb3QgaW1wbGVtZW50ZWRcbm1vZHVsZS5leHBvcnRzLmluZmxhdGVDb2Rlc1VzZWQgPSBpbmZsYXRlQ29kZXNVc2VkO1xubW9kdWxlLmV4cG9ydHMuaW5mbGF0ZUNvcHkgPSBpbmZsYXRlQ29weTtcbm1vZHVsZS5leHBvcnRzLmluZmxhdGVHZXREaWN0aW9uYXJ5ID0gaW5mbGF0ZUdldERpY3Rpb25hcnk7XG5tb2R1bGUuZXhwb3J0cy5pbmZsYXRlTWFyayA9IGluZmxhdGVNYXJrO1xubW9kdWxlLmV4cG9ydHMuaW5mbGF0ZVByaW1lID0gaW5mbGF0ZVByaW1lO1xubW9kdWxlLmV4cG9ydHMuaW5mbGF0ZVN5bmMgPSBpbmZsYXRlU3luYztcbm1vZHVsZS5leHBvcnRzLmluZmxhdGVTeW5jUG9pbnQgPSBpbmZsYXRlU3luY1BvaW50O1xubW9kdWxlLmV4cG9ydHMuaW5mbGF0ZVVuZGVybWluZSA9IGluZmxhdGVVbmRlcm1pbmU7XG5tb2R1bGUuZXhwb3J0cy5pbmZsYXRlVmFsaWRhdGUgPSBpbmZsYXRlVmFsaWRhdGU7XG4qL1xuXG52YXIgaW5mbGF0ZV8xJDIgPSB7XG5cdGluZmxhdGVSZXNldDogaW5mbGF0ZVJlc2V0XzEsXG5cdGluZmxhdGVSZXNldDI6IGluZmxhdGVSZXNldDJfMSxcblx0aW5mbGF0ZVJlc2V0S2VlcDogaW5mbGF0ZVJlc2V0S2VlcF8xLFxuXHRpbmZsYXRlSW5pdDogaW5mbGF0ZUluaXRfMSxcblx0aW5mbGF0ZUluaXQyOiBpbmZsYXRlSW5pdDJfMSxcblx0aW5mbGF0ZTogaW5mbGF0ZV8yJDEsXG5cdGluZmxhdGVFbmQ6IGluZmxhdGVFbmRfMSxcblx0aW5mbGF0ZUdldEhlYWRlcjogaW5mbGF0ZUdldEhlYWRlcl8xLFxuXHRpbmZsYXRlU2V0RGljdGlvbmFyeTogaW5mbGF0ZVNldERpY3Rpb25hcnlfMSxcblx0aW5mbGF0ZUluZm86IGluZmxhdGVJbmZvXG59O1xuXG4vLyAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXJcbi8vIChDKSAyMDE0LTIwMTcgVml0YWx5IFB1enJpbiBhbmQgQW5kcmV5IFR1cGl0c2luXG4vL1xuLy8gVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWRcbi8vIHdhcnJhbnR5LiBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlc1xuLy8gYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSxcbi8vIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXRcbi8vIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcbi8vXG4vLyAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdFxuLy8gICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZVxuLy8gICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmVcbi8vICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC5cbi8vIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlXG4vLyAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS5cbi8vIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uXG5cbmZ1bmN0aW9uIEdaaGVhZGVyKCkge1xuICAvKiB0cnVlIGlmIGNvbXByZXNzZWQgZGF0YSBiZWxpZXZlZCB0byBiZSB0ZXh0ICovXG4gIHRoaXMudGV4dCAgICAgICA9IDA7XG4gIC8qIG1vZGlmaWNhdGlvbiB0aW1lICovXG4gIHRoaXMudGltZSAgICAgICA9IDA7XG4gIC8qIGV4dHJhIGZsYWdzIChub3QgdXNlZCB3aGVuIHdyaXRpbmcgYSBnemlwIGZpbGUpICovXG4gIHRoaXMueGZsYWdzICAgICA9IDA7XG4gIC8qIG9wZXJhdGluZyBzeXN0ZW0gKi9cbiAgdGhpcy5vcyAgICAgICAgID0gMDtcbiAgLyogcG9pbnRlciB0byBleHRyYSBmaWVsZCBvciBaX05VTEwgaWYgbm9uZSAqL1xuICB0aGlzLmV4dHJhICAgICAgPSBudWxsO1xuICAvKiBleHRyYSBmaWVsZCBsZW5ndGggKHZhbGlkIGlmIGV4dHJhICE9IFpfTlVMTCkgKi9cbiAgdGhpcy5leHRyYV9sZW4gID0gMDsgLy8gQWN0dWFsbHksIHdlIGRvbid0IG5lZWQgaXQgaW4gSlMsXG4gICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1dCBsZWF2ZSBmb3IgZmV3IGNvZGUgbW9kaWZpY2F0aW9uc1xuXG4gIC8vXG4gIC8vIFNldHVwIGxpbWl0cyBpcyBub3QgbmVjZXNzYXJ5IGJlY2F1c2UgaW4ganMgd2Ugc2hvdWxkIG5vdCBwcmVhbGxvY2F0ZSBtZW1vcnlcbiAgLy8gZm9yIGluZmxhdGUgdXNlIGNvbnN0YW50IGxpbWl0IGluIDY1NTM2IGJ5dGVzXG4gIC8vXG5cbiAgLyogc3BhY2UgYXQgZXh0cmEgKG9ubHkgd2hlbiByZWFkaW5nIGhlYWRlcikgKi9cbiAgLy8gdGhpcy5leHRyYV9tYXggID0gMDtcbiAgLyogcG9pbnRlciB0byB6ZXJvLXRlcm1pbmF0ZWQgZmlsZSBuYW1lIG9yIFpfTlVMTCAqL1xuICB0aGlzLm5hbWUgICAgICAgPSAnJztcbiAgLyogc3BhY2UgYXQgbmFtZSAob25seSB3aGVuIHJlYWRpbmcgaGVhZGVyKSAqL1xuICAvLyB0aGlzLm5hbWVfbWF4ICAgPSAwO1xuICAvKiBwb2ludGVyIHRvIHplcm8tdGVybWluYXRlZCBjb21tZW50IG9yIFpfTlVMTCAqL1xuICB0aGlzLmNvbW1lbnQgICAgPSAnJztcbiAgLyogc3BhY2UgYXQgY29tbWVudCAob25seSB3aGVuIHJlYWRpbmcgaGVhZGVyKSAqL1xuICAvLyB0aGlzLmNvbW1fbWF4ICAgPSAwO1xuICAvKiB0cnVlIGlmIHRoZXJlIHdhcyBvciB3aWxsIGJlIGEgaGVhZGVyIGNyYyAqL1xuICB0aGlzLmhjcmMgICAgICAgPSAwO1xuICAvKiB0cnVlIHdoZW4gZG9uZSByZWFkaW5nIGd6aXAgaGVhZGVyIChub3QgdXNlZCB3aGVuIHdyaXRpbmcgYSBnemlwIGZpbGUpICovXG4gIHRoaXMuZG9uZSAgICAgICA9IGZhbHNlO1xufVxuXG52YXIgZ3poZWFkZXIgPSBHWmhlYWRlcjtcblxuY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vKiBQdWJsaWMgY29uc3RhbnRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuY29uc3Qge1xuICBaX05PX0ZMVVNILCBaX0ZJTklTSCxcbiAgWl9PSywgWl9TVFJFQU1fRU5ELCBaX05FRURfRElDVCwgWl9TVFJFQU1fRVJST1IsIFpfREFUQV9FUlJPUiwgWl9NRU1fRVJST1IsIFpfQlVGX0VSUk9SXG59ID0gY29uc3RhbnRzJDI7XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICBjaHVua1NpemU6IDEwMjQgKiA2NCxcbiAgd2luZG93Qml0czogMTUsXG4gIHRvOiAnJ1xufTtcblxuLyoqXG4gKiBjbGFzcyBJbmZsYXRlXG4gKlxuICogR2VuZXJpYyBKUy1zdHlsZSB3cmFwcGVyIGZvciB6bGliIGNhbGxzLiBJZiB5b3UgZG9uJ3QgbmVlZFxuICogc3RyZWFtaW5nIGJlaGF2aW91ciAtIHVzZSBtb3JlIHNpbXBsZSBmdW5jdGlvbnM6IFtbaW5mbGF0ZV1dXG4gKiBhbmQgW1tpbmZsYXRlUmF3XV0uXG4gKiovXG5cbi8qIGludGVybmFsXG4gKiBpbmZsYXRlLmNodW5rcyAtPiBBcnJheVxuICpcbiAqIENodW5rcyBvZiBvdXRwdXQgZGF0YSwgaWYgW1tJbmZsYXRlI29uRGF0YV1dIG5vdCBvdmVycmlkZGVuLlxuICoqL1xuXG4vKipcbiAqIEluZmxhdGUucmVzdWx0IC0+IFVpbnQ4QXJyYXl8U3RyaW5nXG4gKlxuICogVW5jb21wcmVzc2VkIHJlc3VsdCwgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQgW1tJbmZsYXRlI29uRGF0YV1dXG4gKiBhbmQgW1tJbmZsYXRlI29uRW5kXV0gaGFuZGxlcnMuIEZpbGxlZCBhZnRlciB5b3UgcHVzaCBsYXN0IGNodW5rXG4gKiAoY2FsbCBbW0luZmxhdGUjcHVzaF1dIHdpdGggYFpfRklOSVNIYCAvIGB0cnVlYCBwYXJhbSkuXG4gKiovXG5cbi8qKlxuICogSW5mbGF0ZS5lcnIgLT4gTnVtYmVyXG4gKlxuICogRXJyb3IgY29kZSBhZnRlciBpbmZsYXRlIGZpbmlzaGVkLiAwIChaX09LKSBvbiBzdWNjZXNzLlxuICogU2hvdWxkIGJlIGNoZWNrZWQgaWYgYnJva2VuIGRhdGEgcG9zc2libGUuXG4gKiovXG5cbi8qKlxuICogSW5mbGF0ZS5tc2cgLT4gU3RyaW5nXG4gKlxuICogRXJyb3IgbWVzc2FnZSwgaWYgW1tJbmZsYXRlLmVycl1dICE9IDBcbiAqKi9cblxuXG4vKipcbiAqIG5ldyBJbmZsYXRlKG9wdGlvbnMpXG4gKiAtIG9wdGlvbnMgKE9iamVjdCk6IHpsaWIgaW5mbGF0ZSBvcHRpb25zLlxuICpcbiAqIENyZWF0ZXMgbmV3IGluZmxhdG9yIGluc3RhbmNlIHdpdGggc3BlY2lmaWVkIHBhcmFtcy4gVGhyb3dzIGV4Y2VwdGlvblxuICogb24gYmFkIHBhcmFtcy4gU3VwcG9ydGVkIG9wdGlvbnM6XG4gKlxuICogLSBgd2luZG93Qml0c2BcbiAqIC0gYGRpY3Rpb25hcnlgXG4gKlxuICogW2h0dHA6Ly96bGliLm5ldC9tYW51YWwuaHRtbCNBZHZhbmNlZF0oaHR0cDovL3psaWIubmV0L21hbnVhbC5odG1sI0FkdmFuY2VkKVxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlc2UuXG4gKlxuICogQWRkaXRpb25hbCBvcHRpb25zLCBmb3IgaW50ZXJuYWwgbmVlZHM6XG4gKlxuICogLSBgY2h1bmtTaXplYCAtIHNpemUgb2YgZ2VuZXJhdGVkIGRhdGEgY2h1bmtzICgxNksgYnkgZGVmYXVsdClcbiAqIC0gYHJhd2AgKEJvb2xlYW4pIC0gZG8gcmF3IGluZmxhdGVcbiAqIC0gYHRvYCAoU3RyaW5nKSAtIGlmIGVxdWFsIHRvICdzdHJpbmcnLCB0aGVuIHJlc3VsdCB3aWxsIGJlIGNvbnZlcnRlZFxuICogICBmcm9tIHV0ZjggdG8gdXRmMTYgKGphdmFzY3JpcHQpIHN0cmluZy4gV2hlbiBzdHJpbmcgb3V0cHV0IHJlcXVlc3RlZCxcbiAqICAgY2h1bmsgbGVuZ3RoIGNhbiBkaWZmZXIgZnJvbSBgY2h1bmtTaXplYCwgZGVwZW5kaW5nIG9uIGNvbnRlbnQuXG4gKlxuICogQnkgZGVmYXVsdCwgd2hlbiBubyBvcHRpb25zIHNldCwgYXV0b2RldGVjdCBkZWZsYXRlL2d6aXAgZGF0YSBmb3JtYXQgdmlhXG4gKiB3cmFwcGVyIGhlYWRlci5cbiAqXG4gKiAjIyMjIyBFeGFtcGxlOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGNvbnN0IHBha28gPSByZXF1aXJlKCdwYWtvJylcbiAqIGNvbnN0IGNodW5rMSA9IG5ldyBVaW50OEFycmF5KFsxLDIsMyw0LDUsNiw3LDgsOV0pXG4gKiBjb25zdCBjaHVuazIgPSBuZXcgVWludDhBcnJheShbMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTldKTtcbiAqXG4gKiBjb25zdCBpbmZsYXRlID0gbmV3IHBha28uSW5mbGF0ZSh7IGxldmVsOiAzfSk7XG4gKlxuICogaW5mbGF0ZS5wdXNoKGNodW5rMSwgZmFsc2UpO1xuICogaW5mbGF0ZS5wdXNoKGNodW5rMiwgdHJ1ZSk7ICAvLyB0cnVlIC0+IGxhc3QgY2h1bmtcbiAqXG4gKiBpZiAoaW5mbGF0ZS5lcnIpIHsgdGhyb3cgbmV3IEVycm9yKGluZmxhdGUuZXJyKTsgfVxuICpcbiAqIGNvbnNvbGUubG9nKGluZmxhdGUucmVzdWx0KTtcbiAqIGBgYFxuICoqL1xuZnVuY3Rpb24gSW5mbGF0ZSQxKG9wdGlvbnMpIHtcbiAgdGhpcy5vcHRpb25zID0gY29tbW9uLmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMgfHwge30pO1xuXG4gIGNvbnN0IG9wdCA9IHRoaXMub3B0aW9ucztcblxuICAvLyBGb3JjZSB3aW5kb3cgc2l6ZSBmb3IgYHJhd2AgZGF0YSwgaWYgbm90IHNldCBkaXJlY3RseSxcbiAgLy8gYmVjYXVzZSB3ZSBoYXZlIG5vIGhlYWRlciBmb3IgYXV0b2RldGVjdC5cbiAgaWYgKG9wdC5yYXcgJiYgKG9wdC53aW5kb3dCaXRzID49IDApICYmIChvcHQud2luZG93Qml0cyA8IDE2KSkge1xuICAgIG9wdC53aW5kb3dCaXRzID0gLW9wdC53aW5kb3dCaXRzO1xuICAgIGlmIChvcHQud2luZG93Qml0cyA9PT0gMCkgeyBvcHQud2luZG93Qml0cyA9IC0xNTsgfVxuICB9XG5cbiAgLy8gSWYgYHdpbmRvd0JpdHNgIG5vdCBkZWZpbmVkIChhbmQgbW9kZSBub3QgcmF3KSAtIHNldCBhdXRvZGV0ZWN0IGZsYWcgZm9yIGd6aXAvZGVmbGF0ZVxuICBpZiAoKG9wdC53aW5kb3dCaXRzID49IDApICYmIChvcHQud2luZG93Qml0cyA8IDE2KSAmJlxuICAgICAgIShvcHRpb25zICYmIG9wdGlvbnMud2luZG93Qml0cykpIHtcbiAgICBvcHQud2luZG93Qml0cyArPSAzMjtcbiAgfVxuXG4gIC8vIEd6aXAgaGVhZGVyIGhhcyBubyBpbmZvIGFib3V0IHdpbmRvd3Mgc2l6ZSwgd2UgY2FuIGRvIGF1dG9kZXRlY3Qgb25seVxuICAvLyBmb3IgZGVmbGF0ZS4gU28sIGlmIHdpbmRvdyBzaXplIG5vdCBzZXQsIGZvcmNlIGl0IHRvIG1heCB3aGVuIGd6aXAgcG9zc2libGVcbiAgaWYgKChvcHQud2luZG93Qml0cyA+IDE1KSAmJiAob3B0LndpbmRvd0JpdHMgPCA0OCkpIHtcbiAgICAvLyBiaXQgMyAoMTYpIC0+IGd6aXBwZWQgZGF0YVxuICAgIC8vIGJpdCA0ICgzMikgLT4gYXV0b2RldGVjdCBnemlwL2RlZmxhdGVcbiAgICBpZiAoKG9wdC53aW5kb3dCaXRzICYgMTUpID09PSAwKSB7XG4gICAgICBvcHQud2luZG93Qml0cyB8PSAxNTtcbiAgICB9XG4gIH1cblxuICB0aGlzLmVyciAgICA9IDA7ICAgICAgLy8gZXJyb3IgY29kZSwgaWYgaGFwcGVucyAoMCA9IFpfT0spXG4gIHRoaXMubXNnICAgID0gJyc7ICAgICAvLyBlcnJvciBtZXNzYWdlXG4gIHRoaXMuZW5kZWQgID0gZmFsc2U7ICAvLyB1c2VkIHRvIGF2b2lkIG11bHRpcGxlIG9uRW5kKCkgY2FsbHNcbiAgdGhpcy5jaHVua3MgPSBbXTsgICAgIC8vIGNodW5rcyBvZiBjb21wcmVzc2VkIGRhdGFcblxuICB0aGlzLnN0cm0gICA9IG5ldyB6c3RyZWFtKCk7XG4gIHRoaXMuc3RybS5hdmFpbF9vdXQgPSAwO1xuXG4gIGxldCBzdGF0dXMgID0gaW5mbGF0ZV8xJDIuaW5mbGF0ZUluaXQyKFxuICAgIHRoaXMuc3RybSxcbiAgICBvcHQud2luZG93Qml0c1xuICApO1xuXG4gIGlmIChzdGF0dXMgIT09IFpfT0spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZXNbc3RhdHVzXSk7XG4gIH1cblxuICB0aGlzLmhlYWRlciA9IG5ldyBnemhlYWRlcigpO1xuXG4gIGluZmxhdGVfMSQyLmluZmxhdGVHZXRIZWFkZXIodGhpcy5zdHJtLCB0aGlzLmhlYWRlcik7XG5cbiAgLy8gU2V0dXAgZGljdGlvbmFyeVxuICBpZiAob3B0LmRpY3Rpb25hcnkpIHtcbiAgICAvLyBDb252ZXJ0IGRhdGEgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBvcHQuZGljdGlvbmFyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdC5kaWN0aW9uYXJ5ID0gc3RyaW5ncy5zdHJpbmcyYnVmKG9wdC5kaWN0aW9uYXJ5KTtcbiAgICB9IGVsc2UgaWYgKHRvU3RyaW5nLmNhbGwob3B0LmRpY3Rpb25hcnkpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nKSB7XG4gICAgICBvcHQuZGljdGlvbmFyeSA9IG5ldyBVaW50OEFycmF5KG9wdC5kaWN0aW9uYXJ5KTtcbiAgICB9XG4gICAgaWYgKG9wdC5yYXcpIHsgLy9JbiByYXcgbW9kZSB3ZSBuZWVkIHRvIHNldCB0aGUgZGljdGlvbmFyeSBlYXJseVxuICAgICAgc3RhdHVzID0gaW5mbGF0ZV8xJDIuaW5mbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLCBvcHQuZGljdGlvbmFyeSk7XG4gICAgICBpZiAoc3RhdHVzICE9PSBaX09LKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlc1tzdGF0dXNdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBJbmZsYXRlI3B1c2goZGF0YVssIGZsdXNoX21vZGVdKSAtPiBCb29sZWFuXG4gKiAtIGRhdGEgKFVpbnQ4QXJyYXl8QXJyYXlCdWZmZXIpOiBpbnB1dCBkYXRhXG4gKiAtIGZsdXNoX21vZGUgKE51bWJlcnxCb29sZWFuKTogMC4uNiBmb3IgY29ycmVzcG9uZGluZyBaX05PX0ZMVVNILi5aX1RSRUVcbiAqICAgZmx1c2ggbW9kZXMuIFNlZSBjb25zdGFudHMuIFNraXBwZWQgb3IgYGZhbHNlYCBtZWFucyBaX05PX0ZMVVNILFxuICogICBgdHJ1ZWAgbWVhbnMgWl9GSU5JU0guXG4gKlxuICogU2VuZHMgaW5wdXQgZGF0YSB0byBpbmZsYXRlIHBpcGUsIGdlbmVyYXRpbmcgW1tJbmZsYXRlI29uRGF0YV1dIGNhbGxzIHdpdGhcbiAqIG5ldyBvdXRwdXQgY2h1bmtzLiBSZXR1cm5zIGB0cnVlYCBvbiBzdWNjZXNzLiBJZiBlbmQgb2Ygc3RyZWFtIGRldGVjdGVkLFxuICogW1tJbmZsYXRlI29uRW5kXV0gd2lsbCBiZSBjYWxsZWQuXG4gKlxuICogYGZsdXNoX21vZGVgIGlzIG5vdCBuZWVkZWQgZm9yIG5vcm1hbCBvcGVyYXRpb24sIGJlY2F1c2UgZW5kIG9mIHN0cmVhbVxuICogZGV0ZWN0ZWQgYXV0b21hdGljYWxseS4gWW91IG1heSB0cnkgdG8gdXNlIGl0IGZvciBhZHZhbmNlZCB0aGluZ3MsIGJ1dFxuICogdGhpcyBmdW5jdGlvbmFsaXR5IHdhcyBub3QgdGVzdGVkLlxuICpcbiAqIE9uIGZhaWwgY2FsbCBbW0luZmxhdGUjb25FbmRdXSB3aXRoIGVycm9yIGNvZGUgYW5kIHJldHVybiBmYWxzZS5cbiAqXG4gKiAjIyMjIyBFeGFtcGxlXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogcHVzaChjaHVuaywgZmFsc2UpOyAvLyBwdXNoIG9uZSBvZiBkYXRhIGNodW5rc1xuICogLi4uXG4gKiBwdXNoKGNodW5rLCB0cnVlKTsgIC8vIHB1c2ggbGFzdCBjaHVua1xuICogYGBgXG4gKiovXG5JbmZsYXRlJDEucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgZmx1c2hfbW9kZSkge1xuICBjb25zdCBzdHJtID0gdGhpcy5zdHJtO1xuICBjb25zdCBjaHVua1NpemUgPSB0aGlzLm9wdGlvbnMuY2h1bmtTaXplO1xuICBjb25zdCBkaWN0aW9uYXJ5ID0gdGhpcy5vcHRpb25zLmRpY3Rpb25hcnk7XG4gIGxldCBzdGF0dXMsIF9mbHVzaF9tb2RlLCBsYXN0X2F2YWlsX291dDtcblxuICBpZiAodGhpcy5lbmRlZCkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChmbHVzaF9tb2RlID09PSB+fmZsdXNoX21vZGUpIF9mbHVzaF9tb2RlID0gZmx1c2hfbW9kZTtcbiAgZWxzZSBfZmx1c2hfbW9kZSA9IGZsdXNoX21vZGUgPT09IHRydWUgPyBaX0ZJTklTSCA6IFpfTk9fRkxVU0g7XG5cbiAgLy8gQ29udmVydCBkYXRhIGlmIG5lZWRlZFxuICBpZiAodG9TdHJpbmcuY2FsbChkYXRhKSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJykge1xuICAgIHN0cm0uaW5wdXQgPSBuZXcgVWludDhBcnJheShkYXRhKTtcbiAgfSBlbHNlIHtcbiAgICBzdHJtLmlucHV0ID0gZGF0YTtcbiAgfVxuXG4gIHN0cm0ubmV4dF9pbiA9IDA7XG4gIHN0cm0uYXZhaWxfaW4gPSBzdHJtLmlucHV0Lmxlbmd0aDtcblxuICBmb3IgKDs7KSB7XG4gICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICBzdHJtLm91dHB1dCA9IG5ldyBVaW50OEFycmF5KGNodW5rU2l6ZSk7XG4gICAgICBzdHJtLm5leHRfb3V0ID0gMDtcbiAgICAgIHN0cm0uYXZhaWxfb3V0ID0gY2h1bmtTaXplO1xuICAgIH1cblxuICAgIHN0YXR1cyA9IGluZmxhdGVfMSQyLmluZmxhdGUoc3RybSwgX2ZsdXNoX21vZGUpO1xuXG4gICAgaWYgKHN0YXR1cyA9PT0gWl9ORUVEX0RJQ1QgJiYgZGljdGlvbmFyeSkge1xuICAgICAgc3RhdHVzID0gaW5mbGF0ZV8xJDIuaW5mbGF0ZVNldERpY3Rpb25hcnkoc3RybSwgZGljdGlvbmFyeSk7XG5cbiAgICAgIGlmIChzdGF0dXMgPT09IFpfT0spIHtcbiAgICAgICAgc3RhdHVzID0gaW5mbGF0ZV8xJDIuaW5mbGF0ZShzdHJtLCBfZmx1c2hfbW9kZSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gWl9EQVRBX0VSUk9SKSB7XG4gICAgICAgIC8vIFJlcGxhY2UgY29kZSB3aXRoIG1vcmUgdmVyYm9zZVxuICAgICAgICBzdGF0dXMgPSBaX05FRURfRElDVDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPbmx5IHRoZSBnemlwIGZvcm1hdCBkZWZpbmVzIGNvbmNhdGVuYXRlZCBtZW1iZXJzIChSRkMgMTk1MjogYSBnemlwIGZpbGVcbiAgICAvLyBpcyBcImEgc2VyaWVzIG9mIG1lbWJlcnNcIikuIEEgemxpYiBzdHJlYW0gKFJGQyAxOTUwKSBlbmRzIGFmdGVyIGl0c1xuICAgIC8vIEFETEVSMzIsIGFuZCBhIHJhdyBERUZMQVRFIHN0cmVhbSAoUkZDIDE5NTEpIGVuZHMgYWZ0ZXIgaXRzIGZpbmFsIGJsb2NrIC1cbiAgICAvLyBuZWl0aGVyIGZvcm1hdCBhbGxvd3MgYW55dGhpbmcgdG8gZm9sbG93LCBzbyBieXRlcyBhZnRlciB0aGUgZW5kIGFyZSBub3RcbiAgICAvLyBvdXJzIHRvIGludGVycHJldCBhbmQgbXVzdCBiZSBsZWZ0IGluIHRoZSBpbnB1dC4gUmVzdGFydCBkZWNvZGluZyBvbmx5XG4gICAgLy8gZm9yIGEgZ3ppcCBtZW1iZXI6IGBzdGF0ZS5mbGFnc2AgaXMgbm9uLXplcm8gb25seSBvbmNlIGEgZ3ppcCBoZWFkZXIgaGFzXG4gICAgLy8gYWN0dWFsbHkgYmVlbiBkZWNvZGVkIChpdCBzdGF5cyAwIGZvciBhIHpsaWIgbWVtYmVyLCBldmVuIHdoZW4gdGhlIGZvcm1hdFxuICAgIC8vIHdhcyBhdXRvLWRldGVjdGVkIGFuZCB0aGUgZ3ppcCBiaXQgb2YgYHdyYXBgIGlzIHNldCkuIEEgdHJhaWxpbmcgemVyb1xuICAgIC8vIGJ5dGUgaXMgcGFkZGluZywgbm90IHRoZSBzdGFydCBvZiBhIG1lbWJlciAobm8gbWVtYmVyIGNhbiBiZWdpbiB3aXRoIDApLlxuICAgIHdoaWxlIChzdHJtLmF2YWlsX2luID4gMCAmJlxuICAgICAgICAgICBzdGF0dXMgPT09IFpfU1RSRUFNX0VORCAmJlxuICAgICAgICAgICAoc3RybS5zdGF0ZS53cmFwICYgMikgJiYgc3RybS5zdGF0ZS5mbGFncyAhPT0gMCAmJlxuICAgICAgICAgICBzdHJtLmlucHV0W3N0cm0ubmV4dF9pbl0gIT09IDApXG4gICAge1xuICAgICAgaW5mbGF0ZV8xJDIuaW5mbGF0ZVJlc2V0KHN0cm0pO1xuICAgICAgc3RhdHVzID0gaW5mbGF0ZV8xJDIuaW5mbGF0ZShzdHJtLCBfZmx1c2hfbW9kZSk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgWl9TVFJFQU1fRVJST1I6XG4gICAgICBjYXNlIFpfREFUQV9FUlJPUjpcbiAgICAgIGNhc2UgWl9ORUVEX0RJQ1Q6XG4gICAgICBjYXNlIFpfTUVNX0VSUk9SOlxuICAgICAgICB0aGlzLm9uRW5kKHN0YXR1cyk7XG4gICAgICAgIHRoaXMuZW5kZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gUmVtZW1iZXIgcmVhbCBgYXZhaWxfb3V0YCB2YWx1ZSwgYmVjYXVzZSB3ZSBtYXkgcGF0Y2ggb3V0IGJ1ZmZlciBjb250ZW50XG4gICAgLy8gdG8gYWxpZ24gdXRmOCBzdHJpbmdzIGJvdW5kYXJpZXMuXG4gICAgbGFzdF9hdmFpbF9vdXQgPSBzdHJtLmF2YWlsX291dDtcblxuICAgIGlmIChzdHJtLm5leHRfb3V0KSB7XG4gICAgICAvLyBGbHVzaCBvdXRwdXQgaWYgYnVmZmVyIGlzIGZ1bGwsIHN0cmVhbSBlbmRlZCwgb3IgYW4gZXhwbGljaXQgZmx1c2ggd2FzXG4gICAgICAvLyByZXF1ZXN0ZWQgKGUuZy4gWl9TWU5DX0ZMVVNIKSAtIHRvIHB1c2ggb3V0IHRoZSB0YWlsLCBzYW1lIGFzIG5vZGUncyB6bGliLlxuICAgICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwIHx8IHN0YXR1cyA9PT0gWl9TVFJFQU1fRU5EIHx8IF9mbHVzaF9tb2RlID4gMCkge1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMudG8gPT09ICdzdHJpbmcnKSB7XG5cbiAgICAgICAgICBsZXQgbmV4dF9vdXRfdXRmOCA9IHN0cmluZ3MudXRmOGJvcmRlcihzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCk7XG5cbiAgICAgICAgICBsZXQgdGFpbCA9IHN0cm0ubmV4dF9vdXQgLSBuZXh0X291dF91dGY4O1xuICAgICAgICAgIGxldCB1dGY4c3RyID0gc3RyaW5ncy5idWYyc3RyaW5nKHN0cm0ub3V0cHV0LCBuZXh0X291dF91dGY4KTtcblxuICAgICAgICAgIC8vIG1vdmUgdGFpbCAmIHJlYWxpZ24gY291bnRlcnNcbiAgICAgICAgICBzdHJtLm5leHRfb3V0ID0gdGFpbDtcbiAgICAgICAgICBzdHJtLmF2YWlsX291dCA9IGNodW5rU2l6ZSAtIHRhaWw7XG4gICAgICAgICAgaWYgKHRhaWwpIHN0cm0ub3V0cHV0LnNldChzdHJtLm91dHB1dC5zdWJhcnJheShuZXh0X291dF91dGY4LCBuZXh0X291dF91dGY4ICsgdGFpbCksIDApO1xuXG4gICAgICAgICAgdGhpcy5vbkRhdGEodXRmOHN0cik7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uRGF0YShzdHJtLm91dHB1dC5sZW5ndGggPT09IHN0cm0ubmV4dF9vdXQgPyBzdHJtLm91dHB1dCA6IHN0cm0ub3V0cHV0LnN1YmFycmF5KDAsIHN0cm0ubmV4dF9vdXQpKTtcblxuICAgICAgICAgIC8vIEZvcmNlIGEgZnJlc2ggb3V0cHV0IGJ1ZmZlciBvbiBuZXh0IGl0ZXJhdGlvbiAvIG5leHQgcHVzaCwgc28gdGhlXG4gICAgICAgICAgLy8gYWxyZWFkeSBlbWl0dGVkIHRhaWwgaXMgbm90IHNlbnQgYWdhaW4uXG4gICAgICAgICAgc3RybS5hdmFpbF9vdXQgPSAwO1xuICAgICAgICAgIHN0cm0ubmV4dF9vdXQgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQSBmdWxsIG91dHB1dCBidWZmZXIgbWVhbnMgdGhlcmUgbWF5IGJlIG1vcmUgdG8gcHJvZHVjZSAtIGFsbG9jYXRlIGEgbmV3XG4gICAgLy8gb25lIGFuZCBjYWxsIGluZmxhdGUgYWdhaW4uIFRoZSBzdGF0dXMgZGVwZW5kcyBvbiB0aGUgZmx1c2ggbW9kZTogd2l0aFxuICAgIC8vIFpfTk9fRkxVU0ggYSBmdWxsIGJ1ZmZlciBpcyByZXBvcnRlZCBhcyBaX09LLCBidXQgd2l0aCBaX0ZJTklTSCB0aGUgc2FtZVxuICAgIC8vIHNpdHVhdGlvbiBpcyByZXBvcnRlZCBhcyBaX0JVRl9FUlJPUiAoXCJjb3VsZCBub3QgbWFrZSBwcm9ncmVzcyBub3dcIixcbiAgICAvLyBub24tZmF0YWwpIGV2ZW4gdGhvdWdoIG91dHB1dCBpcyBzdGlsbCBwZW5kaW5nLiBCb3RoIG11c3QgY29udGludWU7IHRoZVxuICAgIC8vIGRpc3RpbmN0aW9uIHRoYXQgbWF0dGVycyBpcyBwdXJlbHkgXCJ3YXMgdGhlIG91dHB1dCBidWZmZXIgZXhoYXVzdGVkXCIuXG4gICAgaWYgKChzdGF0dXMgPT09IFpfT0sgfHwgc3RhdHVzID09PSBaX0JVRl9FUlJPUikgJiYgbGFzdF9hdmFpbF9vdXQgPT09IDApIGNvbnRpbnVlO1xuXG4gICAgLy8gRmluYWxpemUgaWYgZW5kIG9mIHN0cmVhbSByZWFjaGVkLlxuICAgIGlmIChzdGF0dXMgPT09IFpfU1RSRUFNX0VORCkge1xuICAgICAgc3RhdHVzID0gaW5mbGF0ZV8xJDIuaW5mbGF0ZUVuZCh0aGlzLnN0cm0pO1xuICAgICAgdGhpcy5vbkVuZChzdGF0dXMpO1xuICAgICAgdGhpcy5lbmRlZCA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RybS5hdmFpbF9pbiA9PT0gMCkge1xuICAgICAgLy8gSW5wdXQgaXMgZXhoYXVzdGVkLiBJZiB0aGUgY2FsbGVyIGRlY2xhcmVkIHRoaXMgdGhlIGVuZCBvZiB0aGUgc3RyZWFtXG4gICAgICAvLyAoWl9GSU5JU0gpIGJ1dCB3ZSBuZXZlciBzYXcgWl9TVFJFQU1fRU5ELCB0aGUgY29tcHJlc3NlZCBkYXRhIGVuZGVkXG4gICAgICAvLyBiZWZvcmUgaXRzIHRlcm1pbmF0aW5nIG1hcmtlciAtIGkuZS4gaXQgaXMgdHJ1bmNhdGVkL2luY29tcGxldGUuIFRoYXRcbiAgICAgIC8vIGlzIGFuIGVycm9yOiByZXR1cm5pbmcgdGhlIHBhcnRpYWwgb3V0cHV0IGFzIHN1Y2Nlc3Mgd291bGQgYmVcbiAgICAgIC8vIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYSBjb21wbGV0ZSBkZWNvZGUsIGhpZGluZyB0aGUgZGF0YSBsb3NzLiBSZXBvcnRcbiAgICAgIC8vIGl0IHZpYSBaX0JVRl9FUlJPUi4gKFJlYWNoZWQgb25seSB3aGVuIHRoZSBvdXRwdXQgYnVmZmVyIHN0aWxsIGhhZCByb29tXG4gICAgICAvLyAtIGEgZnVsbCBidWZmZXIgaXMgaGFuZGxlZCBieSB0aGUgYGNvbnRpbnVlYCBhYm92ZSAtIHNvIHRoaXMgZ2VudWluZWx5XG4gICAgICAvLyBtZWFucyBcInJhbiBvdXQgb2YgaW5wdXRcIiwgbm90IFwicmFuIG91dCBvZiBvdXRwdXRcIi4pXG4gICAgICBpZiAoX2ZsdXNoX21vZGUgPT09IFpfRklOSVNIKSB7XG4gICAgICAgIHN0YXR1cyA9IGluZmxhdGVfMSQyLmluZmxhdGVFbmQodGhpcy5zdHJtKTtcbiAgICAgICAgdGhpcy5vbkVuZChzdGF0dXMgPT09IFpfT0sgPyBaX0JVRl9FUlJPUiA6IHN0YXR1cyk7XG4gICAgICAgIHRoaXMuZW5kZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cblxuLyoqXG4gKiBJbmZsYXRlI29uRGF0YShjaHVuaykgLT4gVm9pZFxuICogLSBjaHVuayAoVWludDhBcnJheXxTdHJpbmcpOiBvdXRwdXQgZGF0YS4gV2hlbiBzdHJpbmcgb3V0cHV0IHJlcXVlc3RlZCxcbiAqICAgZWFjaCBjaHVuayB3aWxsIGJlIHN0cmluZy5cbiAqXG4gKiBCeSBkZWZhdWx0LCBzdG9yZXMgZGF0YSBibG9ja3MgaW4gYGNodW5rc1tdYCBwcm9wZXJ0eSBhbmQgZ2x1ZVxuICogdGhvc2UgaW4gYG9uRW5kYC4gT3ZlcnJpZGUgdGhpcyBoYW5kbGVyLCBpZiB5b3UgbmVlZCBhbm90aGVyIGJlaGF2aW91ci5cbiAqKi9cbkluZmxhdGUkMS5wcm90b3R5cGUub25EYXRhID0gZnVuY3Rpb24gKGNodW5rKSB7XG4gIHRoaXMuY2h1bmtzLnB1c2goY2h1bmspO1xufTtcblxuXG4vKipcbiAqIEluZmxhdGUjb25FbmQoc3RhdHVzKSAtPiBWb2lkXG4gKiAtIHN0YXR1cyAoTnVtYmVyKTogaW5mbGF0ZSBzdGF0dXMuIDAgKFpfT0spIG9uIHN1Y2Nlc3MsXG4gKiAgIG90aGVyIGlmIG5vdC5cbiAqXG4gKiBDYWxsZWQgZWl0aGVyIGFmdGVyIHlvdSB0ZWxsIGluZmxhdGUgdGhhdCB0aGUgaW5wdXQgc3RyZWFtIGlzXG4gKiBjb21wbGV0ZSAoWl9GSU5JU0gpLiBCeSBkZWZhdWx0IC0gam9pbiBjb2xsZWN0ZWQgY2h1bmtzLFxuICogZnJlZSBtZW1vcnkgYW5kIGZpbGwgYHJlc3VsdHNgIC8gYGVycmAgcHJvcGVydGllcy5cbiAqKi9cbkluZmxhdGUkMS5wcm90b3R5cGUub25FbmQgPSBmdW5jdGlvbiAoc3RhdHVzKSB7XG4gIC8vIE9uIHN1Y2Nlc3MgLSBqb2luXG4gIGlmIChzdGF0dXMgPT09IFpfT0spIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnRvID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5yZXN1bHQgPSB0aGlzLmNodW5rcy5qb2luKCcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXN1bHQgPSBjb21tb24uZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcyk7XG4gICAgfVxuICB9XG4gIHRoaXMuY2h1bmtzID0gW107XG4gIHRoaXMuZXJyID0gc3RhdHVzO1xuICB0aGlzLm1zZyA9IHRoaXMuc3RybS5tc2c7XG59O1xuXG5cbi8qKlxuICogaW5mbGF0ZShkYXRhWywgb3B0aW9uc10pIC0+IFVpbnQ4QXJyYXl8U3RyaW5nXG4gKiAtIGRhdGEgKFVpbnQ4QXJyYXl8QXJyYXlCdWZmZXIpOiBpbnB1dCBkYXRhIHRvIGRlY29tcHJlc3MuXG4gKiAtIG9wdGlvbnMgKE9iamVjdCk6IHpsaWIgaW5mbGF0ZSBvcHRpb25zLlxuICpcbiAqIERlY29tcHJlc3MgYGRhdGFgIHdpdGggaW5mbGF0ZS91bmd6aXAgYW5kIGBvcHRpb25zYC4gQXV0b2RldGVjdFxuICogZm9ybWF0IHZpYSB3cmFwcGVyIGhlYWRlciBieSBkZWZhdWx0LiBUaGF0J3Mgd2h5IHdlIGRvbid0IHByb3ZpZGVcbiAqIHNlcGFyYXRlIGB1bmd6aXBgIG1ldGhvZC5cbiAqXG4gKiBTdXBwb3J0ZWQgb3B0aW9ucyBhcmU6XG4gKlxuICogLSB3aW5kb3dCaXRzXG4gKlxuICogW2h0dHA6Ly96bGliLm5ldC9tYW51YWwuaHRtbCNBZHZhbmNlZF0oaHR0cDovL3psaWIubmV0L21hbnVhbC5odG1sI0FkdmFuY2VkKVxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogU3VnYXIgKG9wdGlvbnMpOlxuICpcbiAqIC0gYHJhd2AgKEJvb2xlYW4pIC0gc2F5IHRoYXQgd2Ugd29yayB3aXRoIHJhdyBzdHJlYW0sIGlmIHlvdSBkb24ndCB3aXNoIHRvIHNwZWNpZnlcbiAqICAgbmVnYXRpdmUgd2luZG93Qml0cyBpbXBsaWNpdGx5LlxuICogLSBgdG9gIChTdHJpbmcpIC0gaWYgZXF1YWwgdG8gJ3N0cmluZycsIHRoZW4gcmVzdWx0IHdpbGwgYmUgY29udmVydGVkXG4gKiAgIGZyb20gdXRmOCB0byB1dGYxNiAoamF2YXNjcmlwdCkgc3RyaW5nLiBXaGVuIHN0cmluZyBvdXRwdXQgcmVxdWVzdGVkLFxuICogICBjaHVuayBsZW5ndGggY2FuIGRpZmZlciBmcm9tIGBjaHVua1NpemVgLCBkZXBlbmRpbmcgb24gY29udGVudC5cbiAqXG4gKlxuICogIyMjIyMgRXhhbXBsZTpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBjb25zdCBwYWtvID0gcmVxdWlyZSgncGFrbycpO1xuICogY29uc3QgaW5wdXQgPSBwYWtvLmRlZmxhdGUobmV3IFVpbnQ4QXJyYXkoWzEsMiwzLDQsNSw2LDcsOCw5XSkpO1xuICogbGV0IG91dHB1dDtcbiAqXG4gKiB0cnkge1xuICogICBvdXRwdXQgPSBwYWtvLmluZmxhdGUoaW5wdXQpO1xuICogfSBjYXRjaCAoZXJyKSB7XG4gKiAgIGNvbnNvbGUubG9nKGVycik7XG4gKiB9XG4gKiBgYGBcbiAqKi9cbmZ1bmN0aW9uIGluZmxhdGUkMShpbnB1dCwgb3B0aW9ucykge1xuICBjb25zdCBpbmZsYXRvciA9IG5ldyBJbmZsYXRlJDEob3B0aW9ucyk7XG5cbiAgaW5mbGF0b3IucHVzaChpbnB1dCwgdHJ1ZSk7XG5cbiAgLy8gVGhhdCB3aWxsIG5ldmVyIGhhcHBlbnMsIGlmIHlvdSBkb24ndCBjaGVhdCB3aXRoIG9wdGlvbnMgOilcbiAgaWYgKGluZmxhdG9yLmVycikgdGhyb3cgaW5mbGF0b3IubXNnIHx8IG1lc3NhZ2VzW2luZmxhdG9yLmVycl07XG5cbiAgcmV0dXJuIGluZmxhdG9yLnJlc3VsdDtcbn1cblxuXG4vKipcbiAqIGluZmxhdGVSYXcoZGF0YVssIG9wdGlvbnNdKSAtPiBVaW50OEFycmF5fFN0cmluZ1xuICogLSBkYXRhIChVaW50OEFycmF5fEFycmF5QnVmZmVyKTogaW5wdXQgZGF0YSB0byBkZWNvbXByZXNzLlxuICogLSBvcHRpb25zIChPYmplY3QpOiB6bGliIGluZmxhdGUgb3B0aW9ucy5cbiAqXG4gKiBUaGUgc2FtZSBhcyBbW2luZmxhdGVdXSwgYnV0IGNyZWF0ZXMgcmF3IGRhdGEsIHdpdGhvdXQgd3JhcHBlclxuICogKGhlYWRlciBhbmQgYWRsZXIzMiBjcmMpLlxuICoqL1xuZnVuY3Rpb24gaW5mbGF0ZVJhdyQxKGlucHV0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBvcHRpb25zLnJhdyA9IHRydWU7XG4gIHJldHVybiBpbmZsYXRlJDEoaW5wdXQsIG9wdGlvbnMpO1xufVxuXG5cbi8qKlxuICogdW5nemlwKGRhdGFbLCBvcHRpb25zXSkgLT4gVWludDhBcnJheXxTdHJpbmdcbiAqIC0gZGF0YSAoVWludDhBcnJheXxBcnJheUJ1ZmZlcik6IGlucHV0IGRhdGEgdG8gZGVjb21wcmVzcy5cbiAqIC0gb3B0aW9ucyAoT2JqZWN0KTogemxpYiBpbmZsYXRlIG9wdGlvbnMuXG4gKlxuICogSnVzdCBzaG9ydGN1dCB0byBbW2luZmxhdGVdXSwgYmVjYXVzZSBpdCBhdXRvZGV0ZWN0cyBmb3JtYXRcbiAqIGJ5IGhlYWRlci5jb250ZW50LiBEb25lIGZvciBjb252ZW5pZW5jZS5cbiAqKi9cblxuXG52YXIgSW5mbGF0ZV8xJDEgPSBJbmZsYXRlJDE7XG52YXIgaW5mbGF0ZV8yID0gaW5mbGF0ZSQxO1xudmFyIGluZmxhdGVSYXdfMSQxID0gaW5mbGF0ZVJhdyQxO1xudmFyIHVuZ3ppcCQxID0gaW5mbGF0ZSQxO1xudmFyIGNvbnN0YW50cyA9IGNvbnN0YW50cyQyO1xuXG52YXIgaW5mbGF0ZV8xJDEgPSB7XG5cdEluZmxhdGU6IEluZmxhdGVfMSQxLFxuXHRpbmZsYXRlOiBpbmZsYXRlXzIsXG5cdGluZmxhdGVSYXc6IGluZmxhdGVSYXdfMSQxLFxuXHR1bmd6aXA6IHVuZ3ppcCQxLFxuXHRjb25zdGFudHM6IGNvbnN0YW50c1xufTtcblxuY29uc3QgeyBEZWZsYXRlLCBkZWZsYXRlLCBkZWZsYXRlUmF3LCBnemlwIH0gPSBkZWZsYXRlXzEkMTtcblxuY29uc3QgeyBJbmZsYXRlLCBpbmZsYXRlLCBpbmZsYXRlUmF3LCB1bmd6aXAgfSA9IGluZmxhdGVfMSQxO1xuXG5cblxudmFyIERlZmxhdGVfMSA9IERlZmxhdGU7XG52YXIgZGVmbGF0ZV8xID0gZGVmbGF0ZTtcbnZhciBkZWZsYXRlUmF3XzEgPSBkZWZsYXRlUmF3O1xudmFyIGd6aXBfMSA9IGd6aXA7XG52YXIgSW5mbGF0ZV8xID0gSW5mbGF0ZTtcbnZhciBpbmZsYXRlXzEgPSBpbmZsYXRlO1xudmFyIGluZmxhdGVSYXdfMSA9IGluZmxhdGVSYXc7XG52YXIgdW5nemlwXzEgPSB1bmd6aXA7XG52YXIgY29uc3RhbnRzXzEgPSBjb25zdGFudHMkMjtcblxudmFyIHBha28gPSB7XG5cdERlZmxhdGU6IERlZmxhdGVfMSxcblx0ZGVmbGF0ZTogZGVmbGF0ZV8xLFxuXHRkZWZsYXRlUmF3OiBkZWZsYXRlUmF3XzEsXG5cdGd6aXA6IGd6aXBfMSxcblx0SW5mbGF0ZTogSW5mbGF0ZV8xLFxuXHRpbmZsYXRlOiBpbmZsYXRlXzEsXG5cdGluZmxhdGVSYXc6IGluZmxhdGVSYXdfMSxcblx0dW5nemlwOiB1bmd6aXBfMSxcblx0Y29uc3RhbnRzOiBjb25zdGFudHNfMVxufTtcblxuZXhwb3J0IHsgRGVmbGF0ZV8xIGFzIERlZmxhdGUsIEluZmxhdGVfMSBhcyBJbmZsYXRlLCBjb25zdGFudHNfMSBhcyBjb25zdGFudHMsIHBha28gYXMgZGVmYXVsdCwgZGVmbGF0ZV8xIGFzIGRlZmxhdGUsIGRlZmxhdGVSYXdfMSBhcyBkZWZsYXRlUmF3LCBnemlwXzEgYXMgZ3ppcCwgaW5mbGF0ZV8xIGFzIGluZmxhdGUsIGluZmxhdGVSYXdfMSBhcyBpbmZsYXRlUmF3LCB1bmd6aXBfMSBhcyB1bmd6aXAgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/pako/dist/pako.esm.mjs\n"));
/***/ })
},
/******/ function(__webpack_require__) { // webpackRuntimeModules
/******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
/******/ __webpack_require__.O(0, ["main-app"], function() { return __webpack_exec__("(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22C%3A%5C%5Ccompany_projects%5C%5Cverify%20pack%5C%5Cfrontend%5C%5Capp%5C%5Cdashboard%5C%5Ccompliance%5C%5Cpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"); });
/******/ var __webpack_exports__ = __webpack_require__.O();
/******/ _N_E = __webpack_exports__;
/******/ }
]);